| OLD | NEW | 
|---|
| 1 // Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file | 1 // Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file | 
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a | 
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. | 
| 4 | 4 | 
| 5 library dart2js.serialization.resolved_ast; | 5 library dart2js.serialization.resolved_ast; | 
| 6 | 6 | 
| 7 import '../common.dart'; | 7 import '../common.dart'; | 
| 8 import '../common/resolution.dart'; | 8 import '../common/resolution.dart'; | 
| 9 import '../constants/expressions.dart'; | 9 import '../constants/expressions.dart'; | 
| 10 import '../dart_types.dart'; | 10 import '../dart_types.dart'; | 
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 49   ENUM_INDEX_FIELD, | 49   ENUM_INDEX_FIELD, | 
| 50   ENUM_VALUES_FIELD, | 50   ENUM_VALUES_FIELD, | 
| 51   ENUM_TO_STRING, | 51   ENUM_TO_STRING, | 
| 52   FACTORY, | 52   FACTORY, | 
| 53   FIELD, | 53   FIELD, | 
| 54   FUNCTION, | 54   FUNCTION, | 
| 55 } | 55 } | 
| 56 | 56 | 
| 57 /// Serializer for [ResolvedAst]s. | 57 /// Serializer for [ResolvedAst]s. | 
| 58 class ResolvedAstSerializer extends Visitor { | 58 class ResolvedAstSerializer extends Visitor { | 
|  | 59   final SerializerPlugin nativeDataSerializer; | 
| 59   final ObjectEncoder objectEncoder; | 60   final ObjectEncoder objectEncoder; | 
| 60   final ResolvedAst resolvedAst; | 61   final ResolvedAst resolvedAst; | 
| 61   final AstIndexComputer indexComputer = new AstIndexComputer(); | 62   final AstIndexComputer indexComputer = new AstIndexComputer(); | 
| 62   final Map<int, ObjectEncoder> nodeData = <int, ObjectEncoder>{}; | 63   final Map<int, ObjectEncoder> nodeData = <int, ObjectEncoder>{}; | 
| 63   ListEncoder _nodeDataEncoder; | 64   ListEncoder _nodeDataEncoder; | 
| 64 | 65 | 
| 65   ResolvedAstSerializer(this.objectEncoder, this.resolvedAst); | 66   ResolvedAstSerializer( | 
|  | 67       this.objectEncoder, this.resolvedAst, this.nativeDataSerializer); | 
| 66 | 68 | 
| 67   AstElement get element => resolvedAst.element; | 69   AstElement get element => resolvedAst.element; | 
| 68 | 70 | 
| 69   TreeElements get elements => resolvedAst.elements; | 71   TreeElements get elements => resolvedAst.elements; | 
| 70 | 72 | 
| 71   Node get root => resolvedAst.node; | 73   Node get root => resolvedAst.node; | 
| 72 | 74 | 
| 73   Map<Node, int> get nodeIndices => indexComputer.nodeIndices; | 75   Map<Node, int> get nodeIndices => indexComputer.nodeIndices; | 
| 74   List<Node> get nodeList => indexComputer.nodeList; | 76   List<Node> get nodeList => indexComputer.nodeList; | 
| 75 | 77 | 
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 232     } | 234     } | 
| 233     DartType cachedType = elements.typesCache[node]; | 235     DartType cachedType = elements.typesCache[node]; | 
| 234     if (cachedType != null) { | 236     if (cachedType != null) { | 
| 235       getNodeDataEncoder(node).setType(Key.CACHED_TYPE, cachedType); | 237       getNodeDataEncoder(node).setType(Key.CACHED_TYPE, cachedType); | 
| 236     } | 238     } | 
| 237     JumpTarget jumpTargetDefinition = elements.getTargetDefinition(node); | 239     JumpTarget jumpTargetDefinition = elements.getTargetDefinition(node); | 
| 238     if (jumpTargetDefinition != null) { | 240     if (jumpTargetDefinition != null) { | 
| 239       getNodeDataEncoder(node).setInt( | 241       getNodeDataEncoder(node).setInt( | 
| 240           Key.JUMP_TARGET_DEFINITION, getJumpTargetId(jumpTargetDefinition)); | 242           Key.JUMP_TARGET_DEFINITION, getJumpTargetId(jumpTargetDefinition)); | 
| 241     } | 243     } | 
|  | 244     var nativeData = elements.getNativeData(node); | 
|  | 245     if (nativeData != null) { | 
|  | 246       nativeDataSerializer.onData( | 
|  | 247           nativeData, getNodeDataEncoder(node).createObject(Key.NATIVE)); | 
|  | 248     } | 
| 242     node.visitChildren(this); | 249     node.visitChildren(this); | 
| 243   } | 250   } | 
| 244 | 251 | 
| 245   @override | 252   @override | 
| 246   visitSend(Send node) { | 253   visitSend(Send node) { | 
| 247     visitExpression(node); | 254     visitExpression(node); | 
| 248     SendStructure structure = elements.getSendStructure(node); | 255     SendStructure structure = elements.getSendStructure(node); | 
| 249     if (structure != null) { | 256     if (structure != null) { | 
| 250       serializeSendStructure( | 257       serializeSendStructure( | 
| 251           structure, getNodeDataEncoder(node).createObject(Key.SEND_STRUCTURE)); | 258           structure, getNodeDataEncoder(node).createObject(Key.SEND_STRUCTURE)); | 
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 298         return token; | 305         return token; | 
| 299       } | 306       } | 
| 300       token = token.next; | 307       token = token.next; | 
| 301     } | 308     } | 
| 302     return null; | 309     return null; | 
| 303   } | 310   } | 
| 304 | 311 | 
| 305   /// Deserializes the [ResolvedAst] for [element] from [objectDecoder]. | 312   /// Deserializes the [ResolvedAst] for [element] from [objectDecoder]. | 
| 306   /// [parsing] and [getBeginToken] are used for parsing the [Node] for | 313   /// [parsing] and [getBeginToken] are used for parsing the [Node] for | 
| 307   /// [element] from its source code. | 314   /// [element] from its source code. | 
| 308   static ResolvedAst deserialize(Element element, ObjectDecoder objectDecoder, | 315   static ResolvedAst deserialize( | 
| 309       ParsingContext parsing, Token getBeginToken(Uri uri, int charOffset)) { | 316       Element element, | 
|  | 317       ObjectDecoder objectDecoder, | 
|  | 318       ParsingContext parsing, | 
|  | 319       Token getBeginToken(Uri uri, int charOffset), | 
|  | 320       DeserializerPlugin nativeDataDeserializer) { | 
| 310     ResolvedAstKind kind = | 321     ResolvedAstKind kind = | 
| 311         objectDecoder.getEnum(Key.KIND, ResolvedAstKind.values); | 322         objectDecoder.getEnum(Key.KIND, ResolvedAstKind.values); | 
| 312     switch (kind) { | 323     switch (kind) { | 
| 313       case ResolvedAstKind.PARSED: | 324       case ResolvedAstKind.PARSED: | 
| 314         return deserializeParsed( | 325         return deserializeParsed(element, objectDecoder, parsing, getBeginToken, | 
| 315             element, objectDecoder, parsing, getBeginToken); | 326             nativeDataDeserializer); | 
| 316       case ResolvedAstKind.DEFAULT_CONSTRUCTOR: | 327       case ResolvedAstKind.DEFAULT_CONSTRUCTOR: | 
| 317       case ResolvedAstKind.FORWARDING_CONSTRUCTOR: | 328       case ResolvedAstKind.FORWARDING_CONSTRUCTOR: | 
| 318         return new SynthesizedResolvedAst(element, kind); | 329         return new SynthesizedResolvedAst(element, kind); | 
| 319     } | 330     } | 
| 320   } | 331   } | 
| 321 | 332 | 
| 322   /// Deserialize a [ResolvedAst] that is defined in terms of an AST together | 333   /// Deserialize a [ResolvedAst] that is defined in terms of an AST together | 
| 323   /// with [TreeElements]. | 334   /// with [TreeElements]. | 
| 324   static ResolvedAst deserializeParsed( | 335   static ResolvedAst deserializeParsed( | 
| 325       Element element, | 336       Element element, | 
| 326       ObjectDecoder objectDecoder, | 337       ObjectDecoder objectDecoder, | 
| 327       ParsingContext parsing, | 338       ParsingContext parsing, | 
| 328       Token getBeginToken(Uri uri, int charOffset)) { | 339       Token getBeginToken(Uri uri, int charOffset), | 
|  | 340       DeserializerPlugin nativeDataDeserializer) { | 
| 329     CompilationUnitElement compilationUnit = element.compilationUnit; | 341     CompilationUnitElement compilationUnit = element.compilationUnit; | 
| 330     DiagnosticReporter reporter = parsing.reporter; | 342     DiagnosticReporter reporter = parsing.reporter; | 
| 331 | 343 | 
| 332     /// Returns the first [Token] for parsing the [Node] for [element]. | 344     /// Returns the first [Token] for parsing the [Node] for [element]. | 
| 333     Token readBeginToken() { | 345     Token readBeginToken() { | 
| 334       Uri uri = objectDecoder.getUri(Key.URI); | 346       Uri uri = objectDecoder.getUri(Key.URI); | 
| 335       int charOffset = objectDecoder.getInt(Key.OFFSET); | 347       int charOffset = objectDecoder.getInt(Key.OFFSET); | 
| 336       Token beginToken = getBeginToken(uri, charOffset); | 348       Token beginToken = getBeginToken(uri, charOffset); | 
| 337       if (beginToken == null) { | 349       if (beginToken == null) { | 
| 338         reporter.internalError( | 350         reporter.internalError( | 
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 593         int labelDefinitionId = | 605         int labelDefinitionId = | 
| 594             objectDecoder.getInt(Key.LABEL_DEFINITION, isOptional: true); | 606             objectDecoder.getInt(Key.LABEL_DEFINITION, isOptional: true); | 
| 595         if (labelDefinitionId != null) { | 607         if (labelDefinitionId != null) { | 
| 596           elements.defineLabel(node, labelDefinitions[labelDefinitionId]); | 608           elements.defineLabel(node, labelDefinitions[labelDefinitionId]); | 
| 597         } | 609         } | 
| 598         int targetLabelId = | 610         int targetLabelId = | 
| 599             objectDecoder.getInt(Key.TARGET_LABEL, isOptional: true); | 611             objectDecoder.getInt(Key.TARGET_LABEL, isOptional: true); | 
| 600         if (targetLabelId != null) { | 612         if (targetLabelId != null) { | 
| 601           elements.registerTargetLabel(node, labelDefinitions[targetLabelId]); | 613           elements.registerTargetLabel(node, labelDefinitions[targetLabelId]); | 
| 602         } | 614         } | 
|  | 615         ObjectDecoder nativeDataDecoder = | 
|  | 616             objectDecoder.getObject(Key.NATIVE, isOptional: true); | 
|  | 617         if (nativeDataDecoder != null) { | 
|  | 618           var nativeData = nativeDataDeserializer.onData(nativeDataDecoder); | 
|  | 619           if (nativeData != null) { | 
|  | 620             elements.registerNativeData(node, nativeData); | 
|  | 621           } | 
|  | 622         } | 
| 603       } | 623       } | 
| 604     } | 624     } | 
| 605     return new ParsedResolvedAst(element, root, body, elements); | 625     return new ParsedResolvedAst(element, root, body, elements); | 
| 606   } | 626   } | 
| 607 } | 627 } | 
| OLD | NEW | 
|---|