Chromium Code Reviews| 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 f0c34cd1dab49c9515f8e8d54d17baa8b22fc2a0..0cb69c6c6e0dc31f80705dde6cf21ebf95612100 100644 |
| --- a/pkg/kernel/lib/binary/ast_from_binary.dart |
| +++ b/pkg/kernel/lib/binary/ast_from_binary.dart |
| @@ -157,18 +157,27 @@ class BinaryBuilder { |
| return list; |
| } |
| - void _fillTreeNodeList( |
| - List<TreeNode> list, TreeNode buildObject(), TreeNode parent) { |
| - list.length = readUInt(); |
| - for (int i = 0; i < list.length; ++i) { |
| - list[i] = buildObject()..parent = parent; |
| + void _fillTreeNodeList(List<TreeNode> list, TreeNode buildObject(), |
|
ahe
2017/07/06 13:12:22
If it isn't just me that find this method confusin
Siggi Cherem (dart-lang)
2017/07/06 19:05:28
I like it. Done.
|
| + TreeNode parent, bool shouldWriteData) { |
| + var length = readUInt(); |
| + if (shouldWriteData) list.length = length; |
| + for (int i = 0; i < length; ++i) { |
| + TreeNode object = buildObject(); |
| + if (shouldWriteData) { |
| + list[i] = object..parent = parent; |
| + } |
| } |
| } |
| - void _fillNonTreeNodeList(List<Node> list, Node buildObject()) { |
| - list.length = readUInt(); |
| - for (int i = 0; i < list.length; ++i) { |
| - list[i] = buildObject(); |
| + void _fillNonTreeNodeList( |
| + List<Node> list, Node buildObject(), bool shouldWriteData) { |
| + var length = readUInt(); |
| + if (shouldWriteData) list.length = length; |
| + for (int i = 0; i < length; ++i) { |
| + Node object = buildObject(); |
| + if (shouldWriteData) { |
| + list[i] = object; |
| + } |
| } |
| } |
| @@ -184,7 +193,7 @@ class BinaryBuilder { |
| if (_isReadingLibraryImplementation) { |
| // When reading the library implementation, overwrite the whole list |
| // with the new one. |
| - _fillTreeNodeList(list, readObject, parent); |
| + _fillTreeNodeList(list, readObject, parent, true); |
| } else { |
| // When reading an external library, the results should either be: |
| // - merged with the existing external library definition (if any) |
| @@ -356,7 +365,8 @@ class BinaryBuilder { |
| debugPath.add(library.name ?? library.importUri?.toString() ?? 'library'); |
| - _fillTreeNodeList(library.annotations, readExpression, library); |
| + _fillTreeNodeList( |
| + library.annotations, readExpression, library, shouldWriteData); |
| _readLibraryDependencies(library); |
| _mergeNamedNodeList(library.typedefs, readTypedef, library); |
| _mergeNamedNodeList(library.classes, readClass, library); |
| @@ -445,7 +455,7 @@ class BinaryBuilder { |
| readAndPushTypeParameterList(node.typeParameters, node); |
| var supertype = readSupertypeOption(); |
| var mixedInType = readSupertypeOption(); |
| - _fillNonTreeNodeList(node.implementedTypes, readSupertype); |
| + _fillNonTreeNodeList(node.implementedTypes, readSupertype, shouldWriteData); |
| _mergeNamedNodeList(node.fields, readField, node); |
| _mergeNamedNodeList(node.constructors, readConstructor, node); |
| _mergeNamedNodeList(node.procedures, readProcedure, node); |
| @@ -529,7 +539,8 @@ class BinaryBuilder { |
| var function = readFunctionNode(); |
| pushVariableDeclarations(function.positionalParameters); |
| pushVariableDeclarations(function.namedParameters); |
| - _fillTreeNodeList(node.initializers, readInitializer, node); |
| + _fillTreeNodeList( |
| + node.initializers, readInitializer, node, shouldWriteData); |
| variableStack.length = 0; |
| var transformerFlags = getAndResetTransformerFlags(); |
| debugPath.removeLast(); |