Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(515)

Side by Side Diff: pkg/compiler/lib/src/serialization/resolved_ast_serialization.dart

Issue 1896843002: Store and serialize NativeBehavior in TreeElements. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Updated cf. comments. Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/serialization/modelz.dart ('k') | pkg/compiler/lib/src/serialization/serialization.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698