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 e5af2a3c15128688b872bfda65d12f65ce669224..db11ce40f4a7c4407325d0faa7505ab603fd04c8 100644 |
--- a/pkg/kernel/lib/binary/ast_from_binary.dart |
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart |
@@ -665,19 +665,23 @@ class BinaryBuilder { |
return new InvalidExpression(); |
case Tag.VariableGet: |
int offset = readOffset(); |
+ readUInt(); // offset of the variable declaration in the binary. |
return new VariableGet(readVariableReference(), readDartTypeOption()) |
..fileOffset = offset; |
case Tag.SpecializedVariableGet: |
int index = tagByte & Tag.SpecializedPayloadMask; |
int offset = readOffset(); |
+ readUInt(); // offset of the variable declaration in the binary. |
return new VariableGet(variableStack[index])..fileOffset = offset; |
case Tag.VariableSet: |
int offset = readOffset(); |
+ readUInt(); // offset of the variable declaration in the binary. |
return new VariableSet(readVariableReference(), readExpression()) |
..fileOffset = offset; |
case Tag.SpecializedVariableSet: |
int index = tagByte & Tag.SpecializedPayloadMask; |
int offset = readOffset(); |
+ readUInt(); // offset of the variable declaration in the binary. |
return new VariableSet(variableStack[index], readExpression()) |
..fileOffset = offset; |
case Tag.PropertyGet: |
@@ -949,10 +953,12 @@ class BinaryBuilder { |
switchCaseStack.addAll(cases); |
for (int i = 0; i < cases.length; ++i) { |
var caseNode = cases[i]; |
- _fillTreeNodeList(caseNode.expressions, readExpression, caseNode); |
- caseNode.expressionOffsets.length = caseNode.expressions.length; |
- for (int i = 0; i < caseNode.expressionOffsets.length; ++i) { |
+ int length = readUInt(); |
+ caseNode.expressions.length = length; |
+ caseNode.expressionOffsets.length = length; |
+ for (int i = 0; i < length; ++i) { |
caseNode.expressionOffsets[i] = readOffset(); |
+ caseNode.expressions[i] = readExpression()..parent = caseNode; |
} |
caseNode.isDefault = readByte() == 1; |
caseNode.body = readStatement()..parent = caseNode; |
@@ -969,7 +975,9 @@ class BinaryBuilder { |
int offset = readOffset(); |
return new ReturnStatement(readExpressionOption())..fileOffset = offset; |
case Tag.TryCatch: |
- return new TryCatch(readStatement(), readCatchList()); |
+ Statement body = readStatement(); |
+ readByte(); // whether any catch needs a stacktrace. |
+ return new TryCatch(body, readCatchList()); |
case Tag.TryFinally: |
return new TryFinally(readStatement(), readStatement()); |
case Tag.YieldStatement: |
@@ -1070,8 +1078,10 @@ class BinaryBuilder { |
int typeParameterStackHeight = typeParameterStack.length; |
var typeParameters = readAndPushTypeParameterList(); |
var requiredParameterCount = readUInt(); |
+ var totalParameterCount = readUInt(); |
var positional = readDartTypeList(); |
var named = readNamedTypeList(); |
+ assert(positional.length + named.length == totalParameterCount); |
var returnType = readDartType(); |
typeParameterStack.length = typeParameterStackHeight; |
return new FunctionType(positional, returnType, |
@@ -1084,6 +1094,7 @@ class BinaryBuilder { |
return new FunctionType(positional, returnType); |
case Tag.TypeParameterType: |
int index = readUInt(); |
+ readUInt(); // offset of the TypeParameter declaration in the binary. |
var bound = readDartTypeOption(); |
return new TypeParameterType(typeParameterStack[index], bound); |
default: |
@@ -1117,9 +1128,11 @@ class BinaryBuilder { |
} |
Arguments readArguments() { |
+ var numArguments = readUInt(); |
var typeArguments = readDartTypeList(); |
var positional = readExpressionList(); |
var named = readNamedExpressionList(); |
+ assert(numArguments == positional.length + named.length); |
return new Arguments(positional, types: typeArguments, named: named); |
} |