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

Side by Side Diff: pkg/kernel/lib/binary/ast_from_binary.dart

Issue 2852373002: Add import/export declaration AST node boilerplate to kernel. (Closed)
Patch Set: Merge and adapt C++ code to upstream changes Created 3 years, 7 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
« no previous file with comments | « pkg/kernel/lib/ast.dart ('k') | pkg/kernel/lib/binary/ast_to_binary.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 library kernel.ast_from_binary; 4 library kernel.ast_from_binary;
5 5
6 import 'dart:convert'; 6 import 'dart:convert';
7 import 'dart:typed_data'; 7 import 'dart:typed_data';
8 8
9 import '../ast.dart'; 9 import '../ast.dart';
10 import '../transformations/flags.dart'; 10 import '../transformations/flags.dart';
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 } 120 }
121 121
122 String readUriReference() { 122 String readUriReference() {
123 return _sourceUriTable[readUInt()]; 123 return _sourceUriTable[readUInt()];
124 } 124 }
125 125
126 String readStringReference() { 126 String readStringReference() {
127 return _stringTable[readUInt()]; 127 return _stringTable[readUInt()];
128 } 128 }
129 129
130 List<String> readStringReferenceList() {
131 return new List<String>.generate(readUInt(), (i) => readStringReference());
132 }
133
130 String readStringOrNullIfEmpty() { 134 String readStringOrNullIfEmpty() {
131 var string = readStringReference(); 135 var string = readStringReference();
132 return string.isEmpty ? null : string; 136 return string.isEmpty ? null : string;
133 } 137 }
134 138
135 bool readAndCheckOptionTag() { 139 bool readAndCheckOptionTag() {
136 int tag = readByte(); 140 int tag = readByte();
137 if (tag == Tag.Nothing) { 141 if (tag == Tag.Nothing) {
138 return false; 142 return false;
139 } else if (tag == Tag.Something) { 143 } else if (tag == Tag.Something) {
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 CanonicalName readCanonicalNameReference() { 289 CanonicalName readCanonicalNameReference() {
286 var index = readUInt(); 290 var index = readUInt();
287 if (index == 0) return null; 291 if (index == 0) return null;
288 return _linkTable[index - 1]; 292 return _linkTable[index - 1];
289 } 293 }
290 294
291 Reference readLibraryReference() { 295 Reference readLibraryReference() {
292 return readCanonicalNameReference().getReference(); 296 return readCanonicalNameReference().getReference();
293 } 297 }
294 298
295 DeferredImport readDeferredImportReference() { 299 LibraryDependency readLibraryDependencyReference() {
296 int index = readUInt(); 300 int index = readUInt();
297 return _currentLibrary.deferredImports[index]; 301 return _currentLibrary.dependencies[index];
298 } 302 }
299 303
300 Reference readClassReference({bool allowNull: false}) { 304 Reference readClassReference({bool allowNull: false}) {
301 var name = readCanonicalNameReference(); 305 var name = readCanonicalNameReference();
302 if (name == null && !allowNull) { 306 if (name == null && !allowNull) {
303 throw 'Expected a class reference to be valid but was `null`.'; 307 throw 'Expected a class reference to be valid but was `null`.';
304 } 308 }
305 return name?.getReference(); 309 return name?.getReference();
306 } 310 }
307 311
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 String name = readStringOrNullIfEmpty(); 347 String name = readStringOrNullIfEmpty();
344 // TODO(jensj): We currently save (almost the same) uri twice. 348 // TODO(jensj): We currently save (almost the same) uri twice.
345 String fileUri = readUriReference(); 349 String fileUri = readUriReference();
346 350
347 if (shouldWriteData) { 351 if (shouldWriteData) {
348 library.isExternal = isExternal; 352 library.isExternal = isExternal;
349 library.name = name; 353 library.name = name;
350 library.fileUri = fileUri; 354 library.fileUri = fileUri;
351 } 355 }
352 356
353 _readDeferredImports(library); 357 _readLibraryDependencies(library);
354 358
355 debugPath.add(library.name ?? library.importUri?.toString() ?? 'library'); 359 debugPath.add(library.name ?? library.importUri?.toString() ?? 'library');
356 360
357 _mergeNamedNodeList(library.typedefs, readTypedef, library); 361 _mergeNamedNodeList(library.typedefs, readTypedef, library);
358 _mergeNamedNodeList(library.classes, readClass, library); 362 _mergeNamedNodeList(library.classes, readClass, library);
359 _mergeNamedNodeList(library.fields, readField, library); 363 _mergeNamedNodeList(library.fields, readField, library);
360 _mergeNamedNodeList(library.procedures, readProcedure, library); 364 _mergeNamedNodeList(library.procedures, readProcedure, library);
361 365
362 debugPath.removeLast(); 366 debugPath.removeLast();
363 _currentLibrary = null; 367 _currentLibrary = null;
364 return library; 368 return library;
365 } 369 }
366 370
367 void _readDeferredImports(Library library) { 371 void _readLibraryDependencies(Library library) {
368 int length = readUInt(); 372 int length = readUInt();
369 if (library.isExternal) { 373 if (library.isExternal) {
370 assert(length == 0); 374 assert(length == 0);
371 return; 375 return;
372 } 376 }
373 library.deferredImports.length = length; 377 library.dependencies.length = length;
374 for (int i = 0; i < length; ++i) { 378 for (int i = 0; i < length; ++i) {
375 library.deferredImports[i] = new DeferredImport.byReference( 379 var flags = readByte();
376 readLibraryReference(), readStringReference()) 380 var annotations = readExpressionList();
381 var targetLibrary = readLibraryReference();
382 var prefixName = readStringOrNullIfEmpty();
383 var names = readCombinatorList();
384 library.dependencies[i] = new LibraryDependency.byReference(
385 flags, annotations, targetLibrary, prefixName, names)
377 ..parent = library; 386 ..parent = library;
378 } 387 }
379 } 388 }
380 389
390 Combinator readCombinator() {
391 var isShow = readUInt() == 1;
392 var names = readStringReferenceList();
393 return new Combinator(isShow, names);
394 }
395
396 List<Combinator> readCombinatorList() {
397 return new List<Combinator>.generate(readUInt(), (i) => readCombinator());
398 }
399
381 Typedef readTypedef() { 400 Typedef readTypedef() {
382 var canonicalName = readCanonicalNameReference(); 401 var canonicalName = readCanonicalNameReference();
383 var reference = canonicalName.getReference(); 402 var reference = canonicalName.getReference();
384 Typedef node = reference.node; 403 Typedef node = reference.node;
385 bool shouldWriteData = node == null || _isReadingLibraryImplementation; 404 bool shouldWriteData = node == null || _isReadingLibraryImplementation;
386 if (node == null) { 405 if (node == null) {
387 node = new Typedef(null, null, reference: reference); 406 node = new Typedef(null, null, reference: reference);
388 } 407 }
389 int fileOffset = readOffset(); 408 int fileOffset = readOffset();
390 String name = readStringReference(); 409 String name = readStringReference();
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
651 return readAndCheckOptionTag() ? readExpression() : null; 670 return readAndCheckOptionTag() ? readExpression() : null;
652 } 671 }
653 672
654 Expression readExpression() { 673 Expression readExpression() {
655 int tagByte = readByte(); 674 int tagByte = readByte();
656 int tag = tagByte & Tag.SpecializedTagHighBit == 0 675 int tag = tagByte & Tag.SpecializedTagHighBit == 0
657 ? tagByte 676 ? tagByte
658 : (tagByte & Tag.SpecializedTagMask); 677 : (tagByte & Tag.SpecializedTagMask);
659 switch (tag) { 678 switch (tag) {
660 case Tag.LoadLibrary: 679 case Tag.LoadLibrary:
661 return new LoadLibrary(readDeferredImportReference()); 680 return new LoadLibrary(readLibraryDependencyReference());
662 case Tag.CheckLibraryIsLoaded: 681 case Tag.CheckLibraryIsLoaded:
663 return new CheckLibraryIsLoaded(readDeferredImportReference()); 682 return new CheckLibraryIsLoaded(readLibraryDependencyReference());
664 case Tag.InvalidExpression: 683 case Tag.InvalidExpression:
665 return new InvalidExpression(); 684 return new InvalidExpression();
666 case Tag.VariableGet: 685 case Tag.VariableGet:
667 int offset = readOffset(); 686 int offset = readOffset();
668 readUInt(); // offset of the variable declaration in the binary. 687 readUInt(); // offset of the variable declaration in the binary.
669 return new VariableGet(readVariableReference(), readDartTypeOption()) 688 return new VariableGet(readVariableReference(), readDartTypeOption())
670 ..fileOffset = offset; 689 ..fileOffset = offset;
671 case Tag.SpecializedVariableGet: 690 case Tag.SpecializedVariableGet:
672 int index = tagByte & Tag.SpecializedPayloadMask; 691 int index = tagByte & Tag.SpecializedPayloadMask;
673 int offset = readOffset(); 692 int offset = readOffset();
(...skipping 498 matching lines...) Expand 10 before | Expand all | Expand 10 after
1172 ..fileOffset = offset 1191 ..fileOffset = offset
1173 ..fileEqualsOffset = fileEqualsOffset; 1192 ..fileEqualsOffset = fileEqualsOffset;
1174 } 1193 }
1175 1194
1176 int readOffset() { 1195 int readOffset() {
1177 // Offset is saved as unsigned, 1196 // Offset is saved as unsigned,
1178 // but actually ranges from -1 and up (thus the -1) 1197 // but actually ranges from -1 and up (thus the -1)
1179 return readUInt() - 1; 1198 return readUInt() - 1;
1180 } 1199 }
1181 } 1200 }
OLDNEW
« no previous file with comments | « pkg/kernel/lib/ast.dart ('k') | pkg/kernel/lib/binary/ast_to_binary.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698