| 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 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 507 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 518 bool shouldWriteData = node == null || _isReadingLibraryImplementation; | 518 bool shouldWriteData = node == null || _isReadingLibraryImplementation; |
| 519 if (node == null) { | 519 if (node == null) { |
| 520 node = new Field(null, reference: reference); | 520 node = new Field(null, reference: reference); |
| 521 } | 521 } |
| 522 int fileOffset = readOffset(); | 522 int fileOffset = readOffset(); |
| 523 int fileEndOffset = readOffset(); | 523 int fileEndOffset = readOffset(); |
| 524 int flags = readByte(); | 524 int flags = readByte(); |
| 525 readUInt(); // parent class binary offset. | 525 readUInt(); // parent class binary offset. |
| 526 var name = readName(); | 526 var name = readName(); |
| 527 var fileUri = readUriReference(); | 527 var fileUri = readUriReference(); |
| 528 var documentationComment = readStringOrNullIfEmpty(); |
| 528 var annotations = readAnnotationList(node); | 529 var annotations = readAnnotationList(node); |
| 529 debugPath.add(node.name?.name ?? 'field'); | 530 debugPath.add(node.name?.name ?? 'field'); |
| 530 var type = readDartType(); | 531 var type = readDartType(); |
| 531 var initializer = readExpressionOption(); | 532 var initializer = readExpressionOption(); |
| 532 int transformerFlags = getAndResetTransformerFlags(); | 533 int transformerFlags = getAndResetTransformerFlags(); |
| 533 debugPath.removeLast(); | 534 debugPath.removeLast(); |
| 534 if (shouldWriteData) { | 535 if (shouldWriteData) { |
| 535 node.fileOffset = fileOffset; | 536 node.fileOffset = fileOffset; |
| 536 node.fileEndOffset = fileEndOffset; | 537 node.fileEndOffset = fileEndOffset; |
| 537 node.flags = flags; | 538 node.flags = flags; |
| 538 node.name = name; | 539 node.name = name; |
| 539 node.fileUri = fileUri; | 540 node.fileUri = fileUri; |
| 541 node.documentationComment = documentationComment; |
| 540 node.annotations = annotations; | 542 node.annotations = annotations; |
| 541 node.type = type; | 543 node.type = type; |
| 542 node.initializer = initializer; | 544 node.initializer = initializer; |
| 543 node.initializer?.parent = node; | 545 node.initializer?.parent = node; |
| 544 node.transformerFlags = transformerFlags; | 546 node.transformerFlags = transformerFlags; |
| 545 } | 547 } |
| 546 return node; | 548 return node; |
| 547 } | 549 } |
| 548 | 550 |
| 549 Constructor readConstructor() { | 551 Constructor readConstructor() { |
| 550 int tag = readByte(); | 552 int tag = readByte(); |
| 551 assert(tag == Tag.Constructor); | 553 assert(tag == Tag.Constructor); |
| 552 var canonicalName = readCanonicalNameReference(); | 554 var canonicalName = readCanonicalNameReference(); |
| 553 var reference = canonicalName.getReference(); | 555 var reference = canonicalName.getReference(); |
| 554 Constructor node = reference.node; | 556 Constructor node = reference.node; |
| 555 bool shouldWriteData = node == null || _isReadingLibraryImplementation; | 557 bool shouldWriteData = node == null || _isReadingLibraryImplementation; |
| 556 if (node == null) { | 558 if (node == null) { |
| 557 node = new Constructor(null, reference: reference); | 559 node = new Constructor(null, reference: reference); |
| 558 } | 560 } |
| 559 var fileOffset = readOffset(); | 561 var fileOffset = readOffset(); |
| 560 var fileEndOffset = readOffset(); | 562 var fileEndOffset = readOffset(); |
| 561 var flags = readByte(); | 563 var flags = readByte(); |
| 562 readUInt(); // parent class binary offset. | 564 readUInt(); // parent class binary offset. |
| 563 var name = readName(); | 565 var name = readName(); |
| 566 var documentationComment = readStringOrNullIfEmpty(); |
| 564 var annotations = readAnnotationList(node); | 567 var annotations = readAnnotationList(node); |
| 565 debugPath.add(node.name?.name ?? 'constructor'); | 568 debugPath.add(node.name?.name ?? 'constructor'); |
| 566 var function = readFunctionNode(); | 569 var function = readFunctionNode(); |
| 567 pushVariableDeclarations(function.positionalParameters); | 570 pushVariableDeclarations(function.positionalParameters); |
| 568 pushVariableDeclarations(function.namedParameters); | 571 pushVariableDeclarations(function.namedParameters); |
| 569 if (shouldWriteData) { | 572 if (shouldWriteData) { |
| 570 _fillTreeNodeList(node.initializers, readInitializer, node); | 573 _fillTreeNodeList(node.initializers, readInitializer, node); |
| 571 } else { | 574 } else { |
| 572 _skipNodeList(readInitializer); | 575 _skipNodeList(readInitializer); |
| 573 } | 576 } |
| 574 variableStack.length = 0; | 577 variableStack.length = 0; |
| 575 var transformerFlags = getAndResetTransformerFlags(); | 578 var transformerFlags = getAndResetTransformerFlags(); |
| 576 debugPath.removeLast(); | 579 debugPath.removeLast(); |
| 577 if (shouldWriteData) { | 580 if (shouldWriteData) { |
| 578 node.fileOffset = fileOffset; | 581 node.fileOffset = fileOffset; |
| 579 node.fileEndOffset = fileEndOffset; | 582 node.fileEndOffset = fileEndOffset; |
| 580 node.flags = flags; | 583 node.flags = flags; |
| 581 node.name = name; | 584 node.name = name; |
| 585 node.documentationComment = documentationComment; |
| 582 node.annotations = annotations; | 586 node.annotations = annotations; |
| 583 node.function = function..parent = node; | 587 node.function = function..parent = node; |
| 584 node.transformerFlags = transformerFlags; | 588 node.transformerFlags = transformerFlags; |
| 585 } | 589 } |
| 586 return node; | 590 return node; |
| 587 } | 591 } |
| 588 | 592 |
| 589 Procedure readProcedure() { | 593 Procedure readProcedure() { |
| 590 int tag = readByte(); | 594 int tag = readByte(); |
| 591 assert(tag == Tag.Procedure); | 595 assert(tag == Tag.Procedure); |
| 592 var canonicalName = readCanonicalNameReference(); | 596 var canonicalName = readCanonicalNameReference(); |
| 593 var reference = canonicalName.getReference(); | 597 var reference = canonicalName.getReference(); |
| 594 Procedure node = reference.node; | 598 Procedure node = reference.node; |
| 595 bool shouldWriteData = node == null || _isReadingLibraryImplementation; | 599 bool shouldWriteData = node == null || _isReadingLibraryImplementation; |
| 596 if (node == null) { | 600 if (node == null) { |
| 597 node = new Procedure(null, null, null, reference: reference); | 601 node = new Procedure(null, null, null, reference: reference); |
| 598 } | 602 } |
| 599 var fileOffset = readOffset(); | 603 var fileOffset = readOffset(); |
| 600 var fileEndOffset = readOffset(); | 604 var fileEndOffset = readOffset(); |
| 601 int kindIndex = readByte(); | 605 int kindIndex = readByte(); |
| 602 var kind = ProcedureKind.values[kindIndex]; | 606 var kind = ProcedureKind.values[kindIndex]; |
| 603 var flags = readByte(); | 607 var flags = readByte(); |
| 604 readUInt(); // parent class binary offset. | 608 readUInt(); // parent class binary offset. |
| 605 var name = readName(); | 609 var name = readName(); |
| 606 var fileUri = readUriReference(); | 610 var fileUri = readUriReference(); |
| 611 var documentationComment = readStringOrNullIfEmpty(); |
| 607 var annotations = readAnnotationList(node); | 612 var annotations = readAnnotationList(node); |
| 608 debugPath.add(node.name?.name ?? 'procedure'); | 613 debugPath.add(node.name?.name ?? 'procedure'); |
| 609 var function = readFunctionNodeOption(); | 614 var function = readFunctionNodeOption(); |
| 610 var transformerFlags = getAndResetTransformerFlags(); | 615 var transformerFlags = getAndResetTransformerFlags(); |
| 611 debugPath.removeLast(); | 616 debugPath.removeLast(); |
| 612 if (shouldWriteData) { | 617 if (shouldWriteData) { |
| 613 node.fileOffset = fileOffset; | 618 node.fileOffset = fileOffset; |
| 614 node.fileEndOffset = fileEndOffset; | 619 node.fileEndOffset = fileEndOffset; |
| 615 node.kind = kind; | 620 node.kind = kind; |
| 616 node.flags = flags; | 621 node.flags = flags; |
| 617 node.name = name; | 622 node.name = name; |
| 618 node.fileUri = fileUri; | 623 node.fileUri = fileUri; |
| 624 node.documentationComment = documentationComment; |
| 619 node.annotations = annotations; | 625 node.annotations = annotations; |
| 620 node.function = function; | 626 node.function = function; |
| 621 node.function?.parent = node; | 627 node.function?.parent = node; |
| 622 node.transformerFlags = transformerFlags; | 628 node.transformerFlags = transformerFlags; |
| 623 } | 629 } |
| 624 return node; | 630 return node; |
| 625 } | 631 } |
| 626 | 632 |
| 627 Initializer readInitializer() { | 633 Initializer readInitializer() { |
| 628 int tag = readByte(); | 634 int tag = readByte(); |
| (...skipping 619 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1248 ..fileOffset = offset | 1254 ..fileOffset = offset |
| 1249 ..fileEqualsOffset = fileEqualsOffset; | 1255 ..fileEqualsOffset = fileEqualsOffset; |
| 1250 } | 1256 } |
| 1251 | 1257 |
| 1252 int readOffset() { | 1258 int readOffset() { |
| 1253 // Offset is saved as unsigned, | 1259 // Offset is saved as unsigned, |
| 1254 // but actually ranges from -1 and up (thus the -1) | 1260 // but actually ranges from -1 and up (thus the -1) |
| 1255 return readUInt() - 1; | 1261 return readUInt() - 1; |
| 1256 } | 1262 } |
| 1257 } | 1263 } |
| OLD | NEW |