| Index: pkg/compiler/lib/src/io/line_column_provider.dart
|
| diff --git a/pkg/compiler/lib/src/io/line_column_provider.dart b/pkg/compiler/lib/src/io/line_column_provider.dart
|
| index 4d17583fb9f5b972cf93b2dbf67c7811e4b4faa9..fb3d5db513e9a41280cd97e5e8330263faca3a73 100644
|
| --- a/pkg/compiler/lib/src/io/line_column_provider.dart
|
| +++ b/pkg/compiler/lib/src/io/line_column_provider.dart
|
| @@ -1,77 +1,77 @@
|
| -// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
| -// for details. All rights reserved. Use of this source code is governed by a
|
| -// BSD-style license that can be found in the LICENSE file.
|
| -
|
| -library dart2js.io.line_column;
|
| -
|
| -import 'code_output.dart';
|
| -
|
| -/// Interface for providing line/column information.
|
| -abstract class LineColumnProvider {
|
| - /// Returns the line number (0-based) for [offset].
|
| - int getLine(int offset);
|
| -
|
| - /// Returns the column number (0-based) for [offset] at the given [line].
|
| - int getColumn(int line, int offset);
|
| -}
|
| -
|
| -/// [CodeOutputListener] that collects line information.
|
| -class LineColumnCollector extends CodeOutputListener
|
| - implements LineColumnProvider {
|
| - int length = 0;
|
| - List<int> lineStarts = <int>[0];
|
| -
|
| - void _collect(String text) {
|
| - int index = 0;
|
| - while (index < text.length) {
|
| - // Unix uses '\n' and Windows uses '\r\n', so this algorithm works for
|
| - // both platforms.
|
| - index = text.indexOf('\n', index) + 1;
|
| - if (index <= 0) break;
|
| - lineStarts.add(length + index);
|
| - }
|
| - length += text.length;
|
| - }
|
| -
|
| - @override
|
| - void onText(String text) {
|
| - _collect(text);
|
| - }
|
| -
|
| - @override
|
| - int getLine(int offset) {
|
| - List<int> starts = lineStarts;
|
| - if (offset < 0 || starts.last <= offset) {
|
| - throw 'bad position #$offset in buffer with length ${length}.';
|
| - }
|
| - int first = 0;
|
| - int count = starts.length;
|
| - while (count > 1) {
|
| - int step = count ~/ 2;
|
| - int middle = first + step;
|
| - int lineStart = starts[middle];
|
| - if (offset < lineStart) {
|
| - count = step;
|
| - } else {
|
| - first = middle;
|
| - count -= step;
|
| - }
|
| - }
|
| - return first;
|
| - }
|
| -
|
| - @override
|
| - int getColumn(int line, int offset) {
|
| - return offset - lineStarts[line];
|
| - }
|
| -
|
| - @override
|
| - void onDone(int length) {
|
| - lineStarts.add(length + 1);
|
| - this.length = length;
|
| - }
|
| -
|
| - String toString() {
|
| - return 'lineStarts=$lineStarts,length=$length';
|
| - }
|
| -}
|
| +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +
|
| +library dart2js.io.line_column;
|
| +
|
| +import 'code_output.dart';
|
| +
|
| +/// Interface for providing line/column information.
|
| +abstract class LineColumnProvider {
|
| + /// Returns the line number (0-based) for [offset].
|
| + int getLine(int offset);
|
| +
|
| + /// Returns the column number (0-based) for [offset] at the given [line].
|
| + int getColumn(int line, int offset);
|
| +}
|
| +
|
| +/// [CodeOutputListener] that collects line information.
|
| +class LineColumnCollector extends CodeOutputListener
|
| + implements LineColumnProvider {
|
| + int length = 0;
|
| + List<int> lineStarts = <int>[0];
|
| +
|
| + void _collect(String text) {
|
| + int index = 0;
|
| + while (index < text.length) {
|
| + // Unix uses '\n' and Windows uses '\r\n', so this algorithm works for
|
| + // both platforms.
|
| + index = text.indexOf('\n', index) + 1;
|
| + if (index <= 0) break;
|
| + lineStarts.add(length + index);
|
| + }
|
| + length += text.length;
|
| + }
|
| +
|
| + @override
|
| + void onText(String text) {
|
| + _collect(text);
|
| + }
|
| +
|
| + @override
|
| + int getLine(int offset) {
|
| + List<int> starts = lineStarts;
|
| + if (offset < 0 || starts.last <= offset) {
|
| + throw 'bad position #$offset in buffer with length ${length}.';
|
| + }
|
| + int first = 0;
|
| + int count = starts.length;
|
| + while (count > 1) {
|
| + int step = count ~/ 2;
|
| + int middle = first + step;
|
| + int lineStart = starts[middle];
|
| + if (offset < lineStart) {
|
| + count = step;
|
| + } else {
|
| + first = middle;
|
| + count -= step;
|
| + }
|
| + }
|
| + return first;
|
| + }
|
| +
|
| + @override
|
| + int getColumn(int line, int offset) {
|
| + return offset - lineStarts[line];
|
| + }
|
| +
|
| + @override
|
| + void onDone(int length) {
|
| + lineStarts.add(length + 1);
|
| + this.length = length;
|
| + }
|
| +
|
| + String toString() {
|
| + return 'lineStarts=$lineStarts,length=$length';
|
| + }
|
| +}
|
|
|