| Index: runtime/bin/vmservice/client/lib/src/service/object.dart
|
| diff --git a/runtime/bin/vmservice/client/lib/src/service/object.dart b/runtime/bin/vmservice/client/lib/src/service/object.dart
|
| index 5e008d16d4e34474c361fd98c440a38b39849955..0341965852e609642a3ae3c9e7986e591fbc63a7 100644
|
| --- a/runtime/bin/vmservice/client/lib/src/service/object.dart
|
| +++ b/runtime/bin/vmservice/client/lib/src/service/object.dart
|
| @@ -819,6 +819,14 @@ class Script extends ServiceObject {
|
|
|
| Script._empty(ServiceObjectOwner owner) : super._empty(owner);
|
|
|
| + /// This function maps a token position to a line number.
|
| + int tokenToLine(int token) => _tokenToLine[token];
|
| + Map _tokenToLine;
|
| +
|
| + /// This function maps a token position to a column number.
|
| + int tokenToCol(int token) => _tokenToCol[token];
|
| + Map _tokenToCol;
|
| +
|
| void _update(ObservableMap map, bool mapIsRef) {
|
| kind = map['kind'];
|
| _url = map['name'];
|
| @@ -826,6 +834,26 @@ class Script extends ServiceObject {
|
| name = _shortUrl;
|
| vmName = _url;
|
| _processSource(map['source']);
|
| + _parseTokenPosTable(map['tokenPosTable']);
|
| + }
|
| +
|
| + void _parseTokenPosTable(List<List<int>> table) {
|
| + if (table == null) {
|
| + return;
|
| + }
|
| + _tokenToLine = {};
|
| + _tokenToCol = {};
|
| + for (var line in table) {
|
| + // Each entry begins with a line number...
|
| + var lineNumber = line[0];
|
| + for (var pos = 1; pos < line.length; pos += 2) {
|
| + // ...and is followed by (token offset, col number) pairs.
|
| + var tokenOffset = line[pos];
|
| + var colNumber = line[pos+1];
|
| + _tokenToLine[tokenOffset] = lineNumber;
|
| + _tokenToCol[tokenOffset] = colNumber;
|
| + }
|
| + }
|
| }
|
|
|
| void _processHits(List scriptHits) {
|
|
|