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

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

Issue 1881013002: Expand ResolvedAst to handle synthetic constructors. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Updated cf. comments + fix test, cps and compilation units for injected members. 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 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 66
67 TreeElements get elements => resolvedAst.elements; 67 TreeElements get elements => resolvedAst.elements;
68 68
69 Node get root => resolvedAst.node; 69 Node get root => resolvedAst.node;
70 70
71 Map<Node, int> get nodeIndices => indexComputer.nodeIndices; 71 Map<Node, int> get nodeIndices => indexComputer.nodeIndices;
72 List<Node> get nodeList => indexComputer.nodeList; 72 List<Node> get nodeList => indexComputer.nodeList;
73 73
74 /// Serializes [resolvedAst] into [objectEncoder]. 74 /// Serializes [resolvedAst] into [objectEncoder].
75 void serialize() { 75 void serialize() {
76 objectEncoder.setEnum(Key.KIND, resolvedAst.kind);
77 switch (resolvedAst.kind) {
78 case ResolvedAstKind.PARSED:
79 serializeParsed();
80 break;
81 case ResolvedAstKind.DEFAULT_CONSTRUCTOR:
82 case ResolvedAstKind.FORWARDING_CONSTRUCTOR:
83 // No additional properties.
84 break;
85 }
86 }
87
88 /// Serialize [ResolvedAst] that is defined in terms of an AST together with
89 /// [TreeElements].
90 void serializeParsed() {
76 objectEncoder.setUri( 91 objectEncoder.setUri(
77 Key.URI, 92 Key.URI,
78 elements.analyzedElement.compilationUnit.script.resourceUri, 93 elements.analyzedElement.compilationUnit.script.resourceUri,
79 elements.analyzedElement.compilationUnit.script.resourceUri); 94 elements.analyzedElement.compilationUnit.script.resourceUri);
80 AstKind kind; 95 AstKind kind;
81 if (element.enclosingClass is EnumClassElement) { 96 if (element.enclosingClass is EnumClassElement) {
82 if (element.name == 'index') { 97 if (element.name == 'index') {
83 kind = AstKind.ENUM_INDEX_FIELD; 98 kind = AstKind.ENUM_INDEX_FIELD;
84 } else if (element.name == 'values') { 99 } else if (element.name == 'values') {
85 kind = AstKind.ENUM_VALUES_FIELD; 100 kind = AstKind.ENUM_VALUES_FIELD;
(...skipping 17 matching lines...) Expand all
103 } else { 118 } else {
104 kind = AstKind.FUNCTION; 119 kind = AstKind.FUNCTION;
105 FunctionExpression functionExpression = root.asFunctionExpression(); 120 FunctionExpression functionExpression = root.asFunctionExpression();
106 if (functionExpression.getOrSet != null) { 121 if (functionExpression.getOrSet != null) {
107 // Getters/setters need the get/set token to be parsed. 122 // Getters/setters need the get/set token to be parsed.
108 objectEncoder.setInt( 123 objectEncoder.setInt(
109 Key.GET_OR_SET, functionExpression.getOrSet.charOffset); 124 Key.GET_OR_SET, functionExpression.getOrSet.charOffset);
110 } 125 }
111 } 126 }
112 } 127 }
113 objectEncoder.setEnum(Key.KIND, kind); 128 objectEncoder.setEnum(Key.SUB_KIND, kind);
114 root.accept(indexComputer); 129 root.accept(indexComputer);
115 root.accept(this); 130 root.accept(this);
116 } 131 }
117 132
118 /// Computes the [ListEncoder] for serializing data for nodes. 133 /// Computes the [ListEncoder] for serializing data for nodes.
119 ListEncoder get nodeDataEncoder { 134 ListEncoder get nodeDataEncoder {
120 if (_nodeDataEncoder == null) { 135 if (_nodeDataEncoder == null) {
121 _nodeDataEncoder = objectEncoder.createList(Key.DATA); 136 _nodeDataEncoder = objectEncoder.createList(Key.DATA);
122 } 137 }
123 return _nodeDataEncoder; 138 return _nodeDataEncoder;
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 token = token.next; 224 token = token.next;
210 } 225 }
211 return null; 226 return null;
212 } 227 }
213 228
214 /// Deserializes the [ResolvedAst] for [element] from [objectDecoder]. 229 /// Deserializes the [ResolvedAst] for [element] from [objectDecoder].
215 /// [parsing] and [getBeginToken] are used for parsing the [Node] for 230 /// [parsing] and [getBeginToken] are used for parsing the [Node] for
216 /// [element] from its source code. 231 /// [element] from its source code.
217 static ResolvedAst deserialize(Element element, ObjectDecoder objectDecoder, 232 static ResolvedAst deserialize(Element element, ObjectDecoder objectDecoder,
218 Parsing parsing, Token getBeginToken(Uri uri, int charOffset)) { 233 Parsing parsing, Token getBeginToken(Uri uri, int charOffset)) {
234 ResolvedAstKind kind =
235 objectDecoder.getEnum(Key.KIND, ResolvedAstKind.values);
236 switch (kind) {
237 case ResolvedAstKind.PARSED:
238 return deserializeParsed(
239 element, objectDecoder, parsing, getBeginToken);
240 case ResolvedAstKind.DEFAULT_CONSTRUCTOR:
241 case ResolvedAstKind.FORWARDING_CONSTRUCTOR:
242 return new SynthesizedResolvedAst(element, kind);
243 }
244 }
245
246 /// Deserialize a [ResolvedAst] that is defined in terms of an AST together
247 /// with [TreeElements].
248 static ResolvedAst deserializeParsed(
249 Element element,
250 ObjectDecoder objectDecoder,
251 Parsing parsing,
252 Token getBeginToken(Uri uri, int charOffset)) {
219 CompilationUnitElement compilationUnit = element.compilationUnit; 253 CompilationUnitElement compilationUnit = element.compilationUnit;
220 DiagnosticReporter reporter = parsing.reporter; 254 DiagnosticReporter reporter = parsing.reporter;
221 255
222 /// Returns the first [Token] for parsing the [Node] for [element]. 256 /// Returns the first [Token] for parsing the [Node] for [element].
223 Token readBeginToken() { 257 Token readBeginToken() {
224 Uri uri = objectDecoder.getUri(Key.URI); 258 Uri uri = objectDecoder.getUri(Key.URI);
225 int charOffset = objectDecoder.getInt(Key.OFFSET); 259 int charOffset = objectDecoder.getInt(Key.OFFSET);
226 Token beginToken = getBeginToken(uri, charOffset); 260 Token beginToken = getBeginToken(uri, charOffset);
227 if (beginToken == null) { 261 if (beginToken == null) {
228 reporter.internalError( 262 reporter.internalError(
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
359 "No token found for $element in " 393 "No token found for $element in "
360 "${objectDecoder.getUri(Key.URI)} @ $getOrSetOffset"); 394 "${objectDecoder.getUri(Key.URI)} @ $getOrSetOffset");
361 } 395 }
362 } 396 }
363 return doParse((parser) { 397 return doParse((parser) {
364 parser.parseFunction(beginToken, getOrSet); 398 parser.parseFunction(beginToken, getOrSet);
365 }); 399 });
366 } 400 }
367 } 401 }
368 402
369 AstKind kind = objectDecoder.getEnum(Key.KIND, AstKind.values); 403 AstKind kind = objectDecoder.getEnum(Key.SUB_KIND, AstKind.values);
370 Node root = computeNode(kind); 404 Node root = computeNode(kind);
371 TreeElementMapping elements = new TreeElementMapping(element); 405 TreeElementMapping elements = new TreeElementMapping(element);
372 AstIndexComputer indexComputer = new AstIndexComputer(); 406 AstIndexComputer indexComputer = new AstIndexComputer();
373 Map<Node, int> nodeIndices = indexComputer.nodeIndices; 407 Map<Node, int> nodeIndices = indexComputer.nodeIndices;
374 List<Node> nodeList = indexComputer.nodeList; 408 List<Node> nodeList = indexComputer.nodeList;
375 root.accept(indexComputer); 409 root.accept(indexComputer);
376 ListDecoder dataDecoder = objectDecoder.getList(Key.DATA); 410 ListDecoder dataDecoder = objectDecoder.getList(Key.DATA);
377 if (dataDecoder != null) { 411 if (dataDecoder != null) {
378 for (int i = 0; i < dataDecoder.length; i++) { 412 for (int i = 0; i < dataDecoder.length; i++) {
379 ObjectDecoder objectDecoder = dataDecoder.getObject(i); 413 ObjectDecoder objectDecoder = dataDecoder.getObject(i);
(...skipping 30 matching lines...) Expand all
410 node, deserializeSendStructure(sendStructureDecoder)); 444 node, deserializeSendStructure(sendStructureDecoder));
411 } 445 }
412 ObjectDecoder newStructureDecoder = 446 ObjectDecoder newStructureDecoder =
413 objectDecoder.getObject(Key.NEW_STRUCTURE, isOptional: true); 447 objectDecoder.getObject(Key.NEW_STRUCTURE, isOptional: true);
414 if (newStructureDecoder != null) { 448 if (newStructureDecoder != null) {
415 elements.setNewStructure( 449 elements.setNewStructure(
416 node, deserializeNewStructure(newStructureDecoder)); 450 node, deserializeNewStructure(newStructureDecoder));
417 } 451 }
418 } 452 }
419 } 453 }
420 return new ResolvedAst(element, root, elements); 454 return new ParsedResolvedAst(element, root, elements);
421 } 455 }
422 } 456 }
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