Index: pkg/kernel/lib/binary/ast_to_binary.dart |
diff --git a/pkg/kernel/lib/binary/ast_to_binary.dart b/pkg/kernel/lib/binary/ast_to_binary.dart |
index 37dd80ea77ba44aec7fce76800ce623f594d03c8..6d3dabda980afd5aa453172db000a029a3974d87 100644 |
--- a/pkg/kernel/lib/binary/ast_to_binary.dart |
+++ b/pkg/kernel/lib/binary/ast_to_binary.dart |
@@ -203,11 +203,11 @@ class BinaryPrinter extends Visitor { |
} |
} |
- writeOffset(TreeNode node) { |
+ writeOffset(TreeNode node, int offset) { |
// TODO(jensj): Delta-encoding. |
// File offset ranges from -1 and up, |
// but is here saved as unsigned (thus the +1) |
- writeUInt30(node.fileOffset + 1); |
+ writeUInt30(offset + 1); |
} |
void visitClassReference(Class node) { |
@@ -290,6 +290,7 @@ class BinaryPrinter extends Visitor { |
} |
if (node.isMixinApplication) { |
writeByte(Tag.MixinClass); |
+ writeOffset(node, node.fileOffset); |
writeByte(flags); |
writeStringReference(node.name ?? ''); |
writeUriReference(node.fileUri ?? ''); |
@@ -303,6 +304,7 @@ class BinaryPrinter extends Visitor { |
_typeParameterIndexer.exit(node.typeParameters); |
} else { |
writeByte(Tag.NormalClass); |
+ writeOffset(node, node.fileOffset); |
writeByte(flags); |
writeStringReference(node.name ?? ''); |
writeUriReference(node.fileUri ?? ''); |
@@ -323,6 +325,8 @@ class BinaryPrinter extends Visitor { |
visitConstructor(Constructor node) { |
_variableIndexer = new VariableIndexer(); |
writeByte(Tag.Constructor); |
+ writeOffset(node, node.fileOffset); |
+ writeOffset(node, node.fileEndOffset); |
writeByte(node.flags); |
writeName(node.name ?? _emptyName); |
writeAnnotationList(node.annotations); |
@@ -338,6 +342,8 @@ class BinaryPrinter extends Visitor { |
visitProcedure(Procedure node) { |
_variableIndexer = new VariableIndexer(); |
writeByte(Tag.Procedure); |
+ writeOffset(node, node.fileOffset); |
+ writeOffset(node, node.fileEndOffset); |
writeByte(node.kind.index); |
writeByte(node.flags); |
writeName(node.name ?? ''); |
@@ -350,7 +356,8 @@ class BinaryPrinter extends Visitor { |
visitField(Field node) { |
_variableIndexer = new VariableIndexer(); |
writeByte(Tag.Field); |
- writeOffset(node); |
+ writeOffset(node, node.fileOffset); |
+ writeOffset(node, node.fileEndOffset); |
writeByte(node.flags); |
writeName(node.name ?? ''); |
writeUriReference(node.fileUri ?? ''); |
@@ -397,7 +404,10 @@ class BinaryPrinter extends Visitor { |
_switchCaseIndexer = new SwitchCaseIndexer(); |
// Note: FunctionNode has no tag. |
_typeParameterIndexer.enter(node.typeParameters); |
+ writeOffset(node, node.fileOffset); |
+ writeOffset(node, node.fileEndOffset); |
writeByte(node.asyncMarker.index); |
+ writeByte(node.debuggable ? 1 : 0); |
writeNodeList(node.typeParameters); |
writeUInt30(node.requiredParameterCount); |
writeVariableDeclarationList(node.positionalParameters); |
@@ -422,8 +432,10 @@ class BinaryPrinter extends Visitor { |
if (index & Tag.SpecializedPayloadMask == index && |
node.promotedType == null) { |
writeByte(Tag.SpecializedVariableGet + index); |
+ writeOffset(node, node.fileOffset); |
} else { |
writeByte(Tag.VariableGet); |
+ writeOffset(node, node.fileOffset); |
writeUInt30(_variableIndexer[node.variable]); |
writeOptionalNode(node.promotedType); |
} |
@@ -434,9 +446,11 @@ class BinaryPrinter extends Visitor { |
int index = _variableIndexer[node.variable]; |
if (index & Tag.SpecializedPayloadMask == index) { |
writeByte(Tag.SpecializedVariableSet + index); |
+ writeOffset(node, node.fileOffset); |
writeNode(node.value); |
} else { |
writeByte(Tag.VariableSet); |
+ writeOffset(node, node.fileOffset); |
writeUInt30(_variableIndexer[node.variable]); |
writeNode(node.value); |
} |
@@ -444,7 +458,7 @@ class BinaryPrinter extends Visitor { |
visitPropertyGet(PropertyGet node) { |
writeByte(Tag.PropertyGet); |
- writeOffset(node); |
+ writeOffset(node, node.fileOffset); |
writeNode(node.receiver); |
writeName(node.name); |
writeMemberReference(node.interfaceTarget, allowNull: true); |
@@ -452,7 +466,7 @@ class BinaryPrinter extends Visitor { |
visitPropertySet(PropertySet node) { |
writeByte(Tag.PropertySet); |
- writeOffset(node); |
+ writeOffset(node, node.fileOffset); |
writeNode(node.receiver); |
writeName(node.name); |
writeNode(node.value); |
@@ -487,7 +501,7 @@ class BinaryPrinter extends Visitor { |
visitStaticGet(StaticGet node) { |
writeByte(Tag.StaticGet); |
- writeOffset(node); |
+ writeOffset(node, node.fileOffset); |
writeMemberReference(node.target); |
} |
@@ -499,7 +513,7 @@ class BinaryPrinter extends Visitor { |
visitMethodInvocation(MethodInvocation node) { |
writeByte(Tag.MethodInvocation); |
- writeOffset(node); |
+ writeOffset(node, node.fileOffset); |
writeNode(node.receiver); |
writeName(node.name); |
writeNode(node.arguments); |
@@ -508,7 +522,7 @@ class BinaryPrinter extends Visitor { |
visitSuperMethodInvocation(SuperMethodInvocation node) { |
writeByte(Tag.SuperMethodInvocation); |
- writeOffset(node); |
+ writeOffset(node, node.fileOffset); |
writeName(node.name); |
writeNode(node.arguments); |
writeMemberReference(node.interfaceTarget, allowNull: true); |
@@ -523,7 +537,7 @@ class BinaryPrinter extends Visitor { |
visitStaticInvocation(StaticInvocation node) { |
writeByte(node.isConst ? Tag.ConstStaticInvocation : Tag.StaticInvocation); |
- writeOffset(node); |
+ writeOffset(node, node.fileOffset); |
writeMemberReference(node.target); |
writeNode(node.arguments); |
} |
@@ -532,7 +546,7 @@ class BinaryPrinter extends Visitor { |
writeByte(node.isConst |
? Tag.ConstConstructorInvocation |
: Tag.ConstructorInvocation); |
- writeOffset(node); |
+ writeOffset(node, node.fileOffset); |
writeMemberReference(node.target); |
writeNode(node.arguments); |
} |
@@ -580,11 +594,13 @@ class BinaryPrinter extends Visitor { |
visitStringConcatenation(StringConcatenation node) { |
writeByte(Tag.StringConcatenation); |
+ writeOffset(node, node.fileOffset); |
writeNodeList(node.expressions); |
} |
visitIsExpression(IsExpression node) { |
writeByte(Tag.IsExpression); |
+ writeOffset(node, node.fileOffset); |
writeNode(node.operand); |
writeNode(node.type); |
} |
@@ -655,7 +671,7 @@ class BinaryPrinter extends Visitor { |
visitThrow(Throw node) { |
writeByte(Tag.Throw); |
- writeOffset(node); |
+ writeOffset(node, node.fileOffset); |
writeNode(node.expression); |
} |
@@ -667,6 +683,7 @@ class BinaryPrinter extends Visitor { |
visitMapLiteral(MapLiteral node) { |
writeByte(node.isConst ? Tag.ConstMapLiteral : Tag.MapLiteral); |
+ writeOffset(node, node.fileOffset); |
writeNode(node.keyType); |
writeNode(node.valueType); |
writeNodeList(node.entries); |
@@ -801,6 +818,7 @@ class BinaryPrinter extends Visitor { |
visitReturnStatement(ReturnStatement node) { |
writeByte(Tag.ReturnStatement); |
+ writeOffset(node, node.fileOffset); |
writeOptionalNode(node.expression); |
} |
@@ -828,6 +846,7 @@ class BinaryPrinter extends Visitor { |
visitYieldStatement(YieldStatement node) { |
writeByte(Tag.YieldStatement); |
+ writeOffset(node, node.fileOffset); |
writeByte(node.flags); |
writeNode(node.expression); |
} |
@@ -838,6 +857,7 @@ class BinaryPrinter extends Visitor { |
} |
void writeVariableDeclaration(VariableDeclaration node) { |
+ writeOffset(node, node.fileOffset); |
writeByte(node.flags); |
writeStringReference(node.name ?? ''); |
writeNode(node.type); |
@@ -863,6 +883,7 @@ class BinaryPrinter extends Visitor { |
visitFunctionDeclaration(FunctionDeclaration node) { |
writeByte(Tag.FunctionDeclaration); |
+ writeOffset(node, node.fileOffset); |
writeVariableDeclaration(node.variable); |
writeNode(node.function); |
} |