Index: pkg/kernel/lib/binary/ast_from_binary.dart |
diff --git a/pkg/kernel/lib/binary/ast_from_binary.dart b/pkg/kernel/lib/binary/ast_from_binary.dart |
index 0dee08d44ed19a63acf53af9a77533062490b5a1..8c940f69fe5586c80a9aab09cc9354c5f8db56a9 100644 |
--- a/pkg/kernel/lib/binary/ast_from_binary.dart |
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart |
@@ -321,6 +321,7 @@ class BinaryBuilder { |
} |
void readNormalClass(Class node) { |
+ node.fileOffset = readOffset(); |
int flags = readByte(); |
node.isAbstract = flags & 0x1 != 0; |
node.level = _currentLibrary.isExternal |
@@ -347,6 +348,7 @@ class BinaryBuilder { |
} |
void readMixinClass(Class node) { |
+ node.fileOffset = readOffset(); |
int flags = readByte(); |
node.isAbstract = flags & 0x1 != 0; |
node.level = _currentLibrary.isExternal |
@@ -384,6 +386,7 @@ class BinaryBuilder { |
// consumed from the input. |
assert(tag == Tag.Field); |
node.fileOffset = readOffset(); |
+ node.fileEndOffset = readOffset(); |
node.flags = readByte(); |
node.name = readName(); |
node.fileUri = readUriReference(); |
@@ -399,6 +402,8 @@ class BinaryBuilder { |
void readConstructor(Constructor node, int tag) { |
assert(tag == Tag.Constructor); |
+ node.fileOffset = readOffset(); |
+ node.fileEndOffset = readOffset(); |
node.flags = readByte(); |
node.name = readName(); |
node.annotations = readAnnotationList(node); |
@@ -414,6 +419,8 @@ class BinaryBuilder { |
void readProcedure(Procedure node, int tag) { |
assert(tag == Tag.Procedure); |
+ node.fileOffset = readOffset(); |
+ node.fileEndOffset = readOffset(); |
int kindIndex = readByte(); |
node.kind = ProcedureKind.values[kindIndex]; |
node.flags = readByte(); |
@@ -451,7 +458,10 @@ class BinaryBuilder { |
} |
FunctionNode readFunctionNode() { |
+ int offset = readOffset(); |
+ int endOffset = readOffset(); |
AsyncMarker asyncMarker = AsyncMarker.values[readByte()]; |
+ bool debuggable = readByte() == 1 ? true : false; |
int typeParameterStackHeight = typeParameterStack.length; |
var typeParameters = readAndPushTypeParameterList(); |
var requiredParameterCount = readUInt(); |
@@ -473,7 +483,10 @@ class BinaryBuilder { |
namedParameters: named, |
returnType: returnType, |
inferredReturnValue: inferredReturnValue, |
- asyncMarker: asyncMarker); |
+ asyncMarker: asyncMarker) |
+ ..fileOffset = offset |
+ ..fileEndOffset = endOffset |
+ ..debuggable = debuggable; |
} |
void pushVariableDeclaration(VariableDeclaration variable) { |
@@ -520,15 +533,22 @@ class BinaryBuilder { |
case Tag.InvalidExpression: |
return new InvalidExpression(); |
case Tag.VariableGet: |
- return new VariableGet(readVariableReference(), readDartTypeOption()); |
+ int offset = readOffset(); |
+ return new VariableGet(readVariableReference(), readDartTypeOption()) |
+ ..fileOffset = offset; |
case Tag.SpecializedVariableGet: |
int index = tagByte & Tag.SpecializedPayloadMask; |
- return new VariableGet(variableStack[index]); |
+ int offset = readOffset(); |
+ return new VariableGet(variableStack[index])..fileOffset = offset; |
case Tag.VariableSet: |
- return new VariableSet(readVariableReference(), readExpression()); |
+ int offset = readOffset(); |
+ return new VariableSet(readVariableReference(), readExpression()) |
+ ..fileOffset = offset; |
case Tag.SpecializedVariableSet: |
int index = tagByte & Tag.SpecializedPayloadMask; |
- return new VariableSet(variableStack[index], readExpression()); |
+ int offset = readOffset(); |
+ return new VariableSet(variableStack[index], readExpression()) |
+ ..fileOffset = offset; |
case Tag.PropertyGet: |
int offset = readOffset(); |
return new PropertyGet( |
@@ -597,9 +617,13 @@ class BinaryBuilder { |
return new ConditionalExpression(readExpression(), readExpression(), |
readExpression(), readDartTypeOption()); |
case Tag.StringConcatenation: |
- return new StringConcatenation(readExpressionList()); |
+ int offset = readOffset(); |
+ return new StringConcatenation(readExpressionList()) |
+ ..fileOffset = offset; |
case Tag.IsExpression: |
- return new IsExpression(readExpression(), readDartType()); |
+ int offset = readOffset(); |
+ return new IsExpression(readExpression(), readDartType()) |
+ ..fileOffset = offset; |
case Tag.AsExpression: |
return new AsExpression(readExpression(), readDartType()); |
case Tag.StringLiteral: |
@@ -641,15 +665,21 @@ class BinaryBuilder { |
return new ListLiteral(readExpressionList(), |
typeArgument: typeArgument, isConst: true); |
case Tag.MapLiteral: |
+ int offset = readOffset(); |
var keyType = readDartType(); |
var valueType = readDartType(); |
return new MapLiteral(readMapEntryList(), |
- keyType: keyType, valueType: valueType, isConst: false); |
+ keyType: keyType, |
+ valueType: valueType, |
+ isConst: false)..fileOffset = offset; |
case Tag.ConstMapLiteral: |
+ int offset = readOffset(); |
var keyType = readDartType(); |
var valueType = readDartType(); |
return new MapLiteral(readMapEntryList(), |
- keyType: keyType, valueType: valueType, isConst: true); |
+ keyType: keyType, |
+ valueType: valueType, |
+ isConst: true)..fileOffset = offset; |
case Tag.AwaitExpression: |
return new AwaitExpression(readExpression()); |
case Tag.FunctionExpression: |
@@ -755,25 +785,29 @@ class BinaryBuilder { |
return new IfStatement( |
readExpression(), readStatement(), readStatementOrNullIfEmpty()); |
case Tag.ReturnStatement: |
- return new ReturnStatement(readExpressionOption()); |
+ int offset = readOffset(); |
+ return new ReturnStatement(readExpressionOption())..fileOffset = offset; |
case Tag.TryCatch: |
return new TryCatch(readStatement(), readCatchList()); |
case Tag.TryFinally: |
return new TryFinally(readStatement(), readStatement()); |
case Tag.YieldStatement: |
+ int offset = readOffset(); |
int flags = readByte(); |
return new YieldStatement(readExpression(), |
isYieldStar: flags & YieldStatement.FlagYieldStar != 0, |
- isNative: flags & YieldStatement.FlagNative != 0); |
+ isNative: flags & YieldStatement.FlagNative != 0) |
+ ..fileOffset = offset; |
case Tag.VariableDeclaration: |
var variable = readVariableDeclaration(); |
variableStack.add(variable); // Will be popped by the enclosing scope. |
return variable; |
case Tag.FunctionDeclaration: |
+ int offset = readOffset(); |
var variable = readVariableDeclaration(); |
variableStack.add(variable); // Will be popped by the enclosing scope. |
var function = readFunctionNode(); |
- return new FunctionDeclaration(variable, function); |
+ return new FunctionDeclaration(variable, function)..fileOffset = offset; |
default: |
throw fail('Invalid statement tag: $tag'); |
} |
@@ -925,13 +959,14 @@ class BinaryBuilder { |
} |
VariableDeclaration readVariableDeclaration() { |
+ int offset = readOffset(); |
int flags = readByte(); |
return new VariableDeclaration(readStringOrNullIfEmpty(), |
type: readDartType(), |
inferredValue: readOptionalInferredValue(), |
initializer: readExpressionOption(), |
isFinal: flags & 0x1 != 0, |
- isConst: flags & 0x2 != 0); |
+ isConst: flags & 0x2 != 0)..fileOffset = offset; |
} |
int readOffset() { |