Chromium Code Reviews| Index: pkg/compiler/lib/src/serialization/resolved_ast_serialization.dart |
| diff --git a/pkg/compiler/lib/src/serialization/resolved_ast_serialization.dart b/pkg/compiler/lib/src/serialization/resolved_ast_serialization.dart |
| index 613bd6195968761aa842525475609f732ba2d255..87577976eef03f8b61841465d96afd2a742e2ec0 100644 |
| --- a/pkg/compiler/lib/src/serialization/resolved_ast_serialization.dart |
| +++ b/pkg/compiler/lib/src/serialization/resolved_ast_serialization.dart |
| @@ -22,6 +22,7 @@ import '../tree/tree.dart'; |
| import '../universe/selector.dart'; |
| import '../util/util.dart'; |
| import 'keys.dart'; |
| +import 'modelz.dart'; |
| import 'serialization.dart'; |
| import 'serialization_util.dart'; |
| @@ -165,6 +166,18 @@ class ResolvedAstSerializer extends Visitor { |
| serializeLabelDefinition(labelDefinition, list.createObject()); |
| } |
| } |
| + if (element is FunctionElement) { |
| + FunctionElement function = element; |
| + function.functionSignature.forEachParameter((ParameterElement parameter) { |
| + ParameterElement parameterImpl = parameter.implementation; |
| + getNodeDataEncoder(parameterImpl.node) |
| + .setElement(PARAMETER_NODE, parameter); |
|
Siggi Cherem (dart-lang)
2016/05/07 01:34:35
interesting --- it feels a bit odd that our storag
Johnni Winther
2016/05/09 08:18:19
Yes, it does feel awkward to map nodes to elements
|
| + if (parameter.initializer != null) { |
| + getNodeDataEncoder(parameterImpl.initializer) |
| + .setElement(PARAMETER_INITIALIZER, parameter); |
| + } |
| + }); |
| + } |
| } |
| /// Serialize [target] into [encoder]. |
| @@ -203,7 +216,9 @@ class ResolvedAstSerializer extends Visitor { |
| /// Computes the [ObjectEncoder] for serializing data for [node]. |
| ObjectEncoder getNodeDataEncoder(Node node) { |
| + assert(invariant(element, node != null, message: "Node must be non-null.")); |
| int id = nodeIndices[node]; |
| + assert(invariant(element, id != null, message: "Node without id: $node")); |
| return nodeData.putIfAbsent(id, () { |
| ObjectEncoder objectEncoder = nodeDataEncoder.createObject(); |
| objectEncoder.setInt(Key.ID, id); |
| @@ -650,6 +665,18 @@ class ResolvedAstDeserializer { |
| resolvedAstMap[function] = new ParsedResolvedAst(function, |
| functionExpression, functionExpression.body, elements, uri); |
| } |
| + // TODO(johnniwinther): Remove these when inference doesn't need `.node` |
| + // and `.initializer` of [ParameterElement]s. |
| + ParameterElementZ parameter = |
| + objectDecoder.getElement(PARAMETER_NODE, isOptional: true); |
| + if (parameter != null) { |
| + parameter.node = node; |
| + } |
| + parameter = |
| + objectDecoder.getElement(PARAMETER_INITIALIZER, isOptional: true); |
| + if (parameter != null) { |
| + parameter.initializer = node; |
| + } |
| } |
| } |
| assert(invariant(element, !resolvedAstMap.containsKey(element), |
| @@ -658,3 +685,6 @@ class ResolvedAstDeserializer { |
| new ParsedResolvedAst(element, root, body, elements, uri); |
| } |
| } |
| + |
| +const Key PARAMETER_NODE = const Key('parameter.node'); |
| +const Key PARAMETER_INITIALIZER = const Key('parameter.initializer'); |