| 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);
|
| }
|
|
|