Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(84)

Unified Diff: runtime/observatory/lib/src/service/object.dart

Issue 2419013004: Add local variable declaration token position to service protocol (Closed)
Patch Set: ... Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | runtime/observatory/tests/service/local_variable_declaration_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/observatory/lib/src/service/object.dart
diff --git a/runtime/observatory/lib/src/service/object.dart b/runtime/observatory/lib/src/service/object.dart
index 32df1b24a256163f6541d7c1700249b64fb432b9..e0f6e055920eee8fa6b9a594f19a7a0e95bfa2ca 100644
--- a/runtime/observatory/lib/src/service/object.dart
+++ b/runtime/observatory/lib/src/service/object.dart
@@ -3254,6 +3254,7 @@ class Script extends HeapObject implements M.Script {
Script._empty(ServiceObjectOwner owner) : super._empty(owner);
+ /// Retrieves line number [line] if it exists.
ScriptLine getLine(int line) {
assert(_loaded);
assert(line >= 1);
@@ -3261,10 +3262,12 @@ class Script extends HeapObject implements M.Script {
}
/// This function maps a token position to a line number.
+ /// The VM considers the first line to be line 1.
int tokenToLine(int tokenPos) => _tokenToLine[tokenPos];
Map _tokenToLine = {};
/// This function maps a token position to a column number.
+ /// The VM considers the first column to be column 1.
int tokenToCol(int tokenPos) => _tokenToCol[tokenPos];
Map _tokenToCol = {};
@@ -3327,7 +3330,7 @@ class Script extends HeapObject implements M.Script {
static bool _isIdentifierChar(int c) {
if (_isInitialIdentifierChar(c)) return true;
- return c >= 48 && c <= 75; // Digit
+ return c >= 48 && c <= 57; // Digit
}
void _update(Map map, bool mapIsRef) {
@@ -3408,6 +3411,28 @@ class Script extends HeapObject implements M.Script {
}
}
+ // Note, this may return source beyond the token length if [guessTokenLength]
+ // fails.
+ String getToken(int tokenPos) {
+ final int line = tokenToLine(tokenPos);
+ int column = tokenToCol(tokenPos);
+ if ((line == null) || (column == null)) {
+ return null;
+ }
+ // Line and column numbers start at 1 in the VM.
+ column -= 1;
+ String sourceLine = getLine(line).text;
+ if (sourceLine == null) {
+ return null;
+ }
+ final int length = guessTokenLength(line, column);
+ if (length == null) {
+ return sourceLine.substring(column);
+ } else {
+ return sourceLine.substring(column, column + length);
+ }
+ }
+
void _addBreakpoint(Breakpoint bpt) {
var line;
if (bpt.location.tokenPos != null) {
@@ -3610,13 +3635,20 @@ class LocalVarDescriptor implements M.LocalVarDescriptorsRef {
final String id;
final String name;
final int index;
+ final int declarationPos;
final int beginPos;
final int endPos;
final int scopeId;
final String kind;
- LocalVarDescriptor(this.id, this.name, this.index, this.beginPos, this.endPos,
- this.scopeId, this.kind);
+ LocalVarDescriptor(this.id,
+ this.name,
+ this.index,
+ this.declarationPos,
+ this.beginPos,
+ this.endPos,
+ this.scopeId,
+ this.kind);
}
class LocalVarDescriptors extends ServiceObject {
@@ -3638,12 +3670,13 @@ class LocalVarDescriptors extends ServiceObject {
var id = descriptor['name'];
var name = descriptor['name'];
var index = descriptor['index'];
- var beginPos = descriptor['beginPos'];
- var endPos = descriptor['endPos'];
+ var declarationPos = descriptor['declarationTokenPos'];
+ var beginPos = descriptor['scopeStartTokenPos'];
+ var endPos = descriptor['scopeEndTokenPos'];
var scopeId = descriptor['scopeId'];
var kind = descriptor['kind'].trim();
descriptors.add(new LocalVarDescriptor(
- id, name, index, beginPos, endPos, scopeId, kind));
+ id, name, index, declarationPos, beginPos, endPos, scopeId, kind));
}
}
}
« no previous file with comments | « no previous file | runtime/observatory/tests/service/local_variable_declaration_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698