Chromium Code Reviews| 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 #if !defined(DART_PRECOMPILED_RUNTIME) | 4 #if !defined(DART_PRECOMPILED_RUNTIME) |
| 5 | 5 |
| 6 #include "platform/globals.h" | 6 #include "platform/globals.h" |
| 7 #include "vm/flags.h" | 7 #include "vm/flags.h" |
| 8 #include "vm/growable_array.h" | 8 #include "vm/growable_array.h" |
| 9 #include "vm/kernel.h" | 9 #include "vm/kernel.h" |
| 10 #include "vm/kernel_to_il.h" | 10 #include "vm/kernel_to_il.h" |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 26 | 26 |
| 27 | 27 |
| 28 static const uint32_t kMagicProgramFile = 0x90ABCDEFu; | 28 static const uint32_t kMagicProgramFile = 0x90ABCDEFu; |
| 29 | 29 |
| 30 | 30 |
| 31 // Keep in sync with package:dynamo/lib/binary/tag.dart | 31 // Keep in sync with package:dynamo/lib/binary/tag.dart |
| 32 enum Tag { | 32 enum Tag { |
| 33 kNothing = 0, | 33 kNothing = 0, |
| 34 kSomething = 1, | 34 kSomething = 1, |
| 35 | 35 |
| 36 kNormalClass = 2, | 36 kClass = 2, |
| 37 kMixinClass = 3, | |
| 38 | 37 |
| 39 kField = 4, | 38 kField = 4, |
| 40 kConstructor = 5, | 39 kConstructor = 5, |
| 41 kProcedure = 6, | 40 kProcedure = 6, |
| 42 | 41 |
| 43 kInvalidInitializer = 7, | 42 kInvalidInitializer = 7, |
| 44 kFieldInitializer = 8, | 43 kFieldInitializer = 8, |
| 45 kSuperInitializer = 9, | 44 kSuperInitializer = 9, |
| 46 kRedirectingInitializer = 10, | 45 kRedirectingInitializer = 10, |
| 47 kLocalInitializer = 11, | 46 kLocalInitializer = 11, |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 116 | 115 |
| 117 kInvalidType = 90, | 116 kInvalidType = 90, |
| 118 kDynamicType = 91, | 117 kDynamicType = 91, |
| 119 kVoidType = 92, | 118 kVoidType = 92, |
| 120 kInterfaceType = 93, | 119 kInterfaceType = 93, |
| 121 kFunctionType = 94, | 120 kFunctionType = 94, |
| 122 kTypeParameterType = 95, | 121 kTypeParameterType = 95, |
| 123 kSimpleInterfaceType = 96, | 122 kSimpleInterfaceType = 96, |
| 124 kSimpleFunctionType = 97, | 123 kSimpleFunctionType = 97, |
| 125 | 124 |
| 126 kNullReference = 99, | |
| 127 kNormalClassReference = 100, | |
| 128 kMixinClassReference = 101, | |
| 129 | |
| 130 kLibraryFieldReference = 102, | |
| 131 kClassFieldReference = 103, | |
| 132 kClassConstructorReference = 104, | |
| 133 kLibraryProcedureReference = 105, | |
| 134 kClassProcedureReference = 106, | |
| 135 | |
| 136 kSpecializedTagHighBit = 0x80, // 10000000 | 125 kSpecializedTagHighBit = 0x80, // 10000000 |
| 137 kSpecializedTagMask = 0xF8, // 11111000 | 126 kSpecializedTagMask = 0xF8, // 11111000 |
| 138 kSpecializedPayloadMask = 0x7, // 00000111 | 127 kSpecializedPayloadMask = 0x7, // 00000111 |
| 139 | 128 |
| 140 kSpecializedVariableGet = 128, | 129 kSpecializedVariableGet = 128, |
| 141 kSpecializedVariableSet = 136, | 130 kSpecializedVariableSet = 136, |
| 142 kSpecialIntLiteral = 144, | 131 kSpecialIntLiteral = 144, |
| 143 }; | 132 }; |
| 144 | 133 |
| 145 | 134 |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 314 Program* program() { return program_; } | 303 Program* program() { return program_; } |
| 315 void set_program(Program* program) { program_ = program; } | 304 void set_program(Program* program) { program_ = program; } |
| 316 | 305 |
| 317 BlockStack<VariableDeclaration>& variables() { return scope_; } | 306 BlockStack<VariableDeclaration>& variables() { return scope_; } |
| 318 BlockStack<TypeParameter>& type_parameters() { return type_parameters_; } | 307 BlockStack<TypeParameter>& type_parameters() { return type_parameters_; } |
| 319 BlockStack<SwitchCase>& switch_cases() { return switch_cases_; } | 308 BlockStack<SwitchCase>& switch_cases() { return switch_cases_; } |
| 320 | 309 |
| 321 BlockStack<LabeledStatement>* labels() { return labels_; } | 310 BlockStack<LabeledStatement>* labels() { return labels_; } |
| 322 void set_labels(BlockStack<LabeledStatement>* labels) { labels_ = labels; } | 311 void set_labels(BlockStack<LabeledStatement>* labels) { labels_ = labels; } |
| 323 | 312 |
| 313 CanonicalName* GetCanonicalName(int index) { return canonical_names_[index]; } | |
| 314 void SetCanonicalName(int index, CanonicalName* name) { | |
| 315 canonical_names_[index] = name; | |
| 316 } | |
| 317 void SetCanonicalNameCount(int count) { canonical_names_.SetLength(count); } | |
| 318 | |
| 324 private: | 319 private: |
| 325 Program* program_; | 320 Program* program_; |
| 321 MallocGrowableArray<Ref<CanonicalName> > canonical_names_; | |
| 326 BlockStack<VariableDeclaration> scope_; | 322 BlockStack<VariableDeclaration> scope_; |
| 327 BlockStack<TypeParameter> type_parameters_; | 323 BlockStack<TypeParameter> type_parameters_; |
| 328 BlockStack<SwitchCase> switch_cases_; | 324 BlockStack<SwitchCase> switch_cases_; |
| 329 BlockStack<LabeledStatement>* labels_; | 325 BlockStack<LabeledStatement>* labels_; |
| 330 }; | 326 }; |
| 331 | 327 |
| 332 | 328 |
| 333 class Reader { | 329 class Reader { |
| 334 public: | 330 public: |
| 335 Reader(const uint8_t* buffer, int64_t size) | 331 Reader(const uint8_t* buffer, int64_t size) |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 454 return RT::ReadFrom(this); | 450 return RT::ReadFrom(this); |
| 455 } | 451 } |
| 456 | 452 |
| 457 template <typename T> | 453 template <typename T> |
| 458 T* ReadOptional() { | 454 T* ReadOptional() { |
| 459 return ReadOptional<T, T>(); | 455 return ReadOptional<T, T>(); |
| 460 } | 456 } |
| 461 | 457 |
| 462 ReaderHelper* helper() { return &builder_; } | 458 ReaderHelper* helper() { return &builder_; } |
| 463 | 459 |
| 460 CanonicalName* ReadCanonicalNameReference() { | |
| 461 int index = ReadUInt(); | |
| 462 if (index == 0) return NULL; | |
| 463 CanonicalName* name = builder_.GetCanonicalName(index - 1); | |
| 464 ASSERT(name != NULL); | |
| 465 return name; | |
| 466 } | |
| 467 | |
| 468 CanonicalName* ReadDefiningCanonicalNameReference(LinkedNode* node_to_link) { | |
| 469 CanonicalName* name = ReadCanonicalNameReference(); | |
| 470 ASSERT(name != NULL); | |
| 471 name->BindTo(node_to_link); | |
| 472 return name; | |
| 473 } | |
| 474 | |
| 464 private: | 475 private: |
| 465 const uint8_t* buffer_; | 476 const uint8_t* buffer_; |
| 466 int64_t size_; | 477 int64_t size_; |
| 467 int64_t offset_; | 478 int64_t offset_; |
| 468 ReaderHelper builder_; | 479 ReaderHelper builder_; |
| 469 TokenPosition max_position_; | 480 TokenPosition max_position_; |
| 470 TokenPosition min_position_; | 481 TokenPosition min_position_; |
| 471 intptr_t current_script_id_; | 482 intptr_t current_script_id_; |
| 472 | 483 |
| 473 friend class PositionScope; | 484 friend class PositionScope; |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 637 } | 648 } |
| 638 line_starts_[i] = line_starts; | 649 line_starts_[i] = line_starts; |
| 639 } | 650 } |
| 640 } | 651 } |
| 641 | 652 |
| 642 | 653 |
| 643 Library* Library::ReadFrom(Reader* reader) { | 654 Library* Library::ReadFrom(Reader* reader) { |
| 644 TRACE_READ_OFFSET(); | 655 TRACE_READ_OFFSET(); |
| 645 int flags = reader->ReadFlags(); | 656 int flags = reader->ReadFlags(); |
| 646 ASSERT(flags == 0); // external libraries not supported | 657 ASSERT(flags == 0); // external libraries not supported |
| 658 | |
| 659 CanonicalName* canonical_name = reader->ReadCanonicalNameReference(); | |
| 660 ASSERT(canonical_name != NULL); | |
| 661 canonical_name->BindTo(this); | |
|
kustermann
2017/02/03 11:48:20
Use reader->ReadDefiningCanonicalNameReference(thi
asgerf
2017/02/03 12:47:38
Done.
| |
| 662 | |
| 647 name_ = Reference::ReadStringFrom(reader); | 663 name_ = Reference::ReadStringFrom(reader); |
| 648 import_uri_ = Reference::ReadStringFrom(reader); | 664 import_uri_ = canonical_name->name(); |
| 649 source_uri_index_ = reader->ReadUInt(); | 665 source_uri_index_ = reader->ReadUInt(); |
| 650 reader->set_current_script_id(source_uri_index_); | 666 reader->set_current_script_id(source_uri_index_); |
| 651 | 667 |
| 652 int num_classes = reader->ReadUInt(); | 668 int num_classes = reader->ReadUInt(); |
| 653 classes().EnsureInitialized(num_classes); | 669 classes().EnsureInitialized(num_classes); |
| 654 for (int i = 0; i < num_classes; i++) { | 670 for (int i = 0; i < num_classes; i++) { |
| 655 Tag tag = reader->ReadTag(); | 671 Tag tag = reader->ReadTag(); |
| 656 if (tag == kNormalClass) { | 672 ASSERT(tag == kClass); |
| 657 NormalClass* klass = classes().GetOrCreate<NormalClass>(i, this); | 673 NormalClass* klass = classes().GetOrCreate<NormalClass>(i, this); |
| 658 klass->ReadFrom(reader); | 674 klass->ReadFrom(reader); |
| 659 } else { | |
| 660 ASSERT(tag == kMixinClass); | |
| 661 MixinClass* klass = classes().GetOrCreate<MixinClass>(i, this); | |
| 662 klass->ReadFrom(reader); | |
| 663 } | |
| 664 } | 675 } |
| 665 | 676 |
| 666 fields().ReadFrom<Field>(reader, this); | 677 fields().ReadFrom<Field>(reader, this); |
| 667 procedures().ReadFrom<Procedure>(reader, this); | 678 procedures().ReadFrom<Procedure>(reader, this); |
| 668 return this; | 679 return this; |
| 669 } | 680 } |
| 670 | 681 |
| 671 | 682 |
| 672 Class* Class::ReadFrom(Reader* reader) { | 683 Class* Class::ReadFrom(Reader* reader) { |
| 673 TRACE_READ_OFFSET(); | 684 TRACE_READ_OFFSET(); |
| 674 | 685 |
| 686 CanonicalName* canonical_name = reader->ReadCanonicalNameReference(); | |
| 687 ASSERT(canonical_name != NULL); | |
| 688 canonical_name->BindTo(this); | |
|
kustermann
2017/02/03 11:48:20
Use reader->ReadDefiningCanonicalNameReference(thi
asgerf
2017/02/03 12:47:38
Done.
| |
| 675 position_ = reader->ReadPosition(); | 689 position_ = reader->ReadPosition(); |
| 676 is_abstract_ = reader->ReadBool(); | 690 is_abstract_ = reader->ReadBool(); |
| 677 name_ = Reference::ReadStringFrom(reader); | 691 name_ = Reference::ReadStringFrom(reader); |
| 678 source_uri_index_ = reader->ReadUInt(); | 692 source_uri_index_ = reader->ReadUInt(); |
| 679 reader->set_current_script_id(source_uri_index_); | 693 reader->set_current_script_id(source_uri_index_); |
| 680 annotations_.ReadFromStatic<Expression>(reader); | 694 annotations_.ReadFromStatic<Expression>(reader); |
| 681 | 695 |
| 682 return this; | 696 return this; |
| 683 } | 697 } |
| 684 | 698 |
| 685 | 699 |
| 686 NormalClass* NormalClass::ReadFrom(Reader* reader) { | 700 NormalClass* NormalClass::ReadFrom(Reader* reader) { |
| 687 TRACE_READ_OFFSET(); | 701 TRACE_READ_OFFSET(); |
| 688 Class::ReadFrom(reader); | 702 Class::ReadFrom(reader); |
| 689 TypeParameterScope<ReaderHelper> scope(reader->helper()); | 703 TypeParameterScope<ReaderHelper> scope(reader->helper()); |
| 690 | 704 |
| 691 type_parameters_.ReadFrom(reader); | 705 type_parameters_.ReadFrom(reader); |
| 692 DartType* type = reader->ReadOptional<DartType>(); | 706 DartType* type = reader->ReadOptional<DartType>(); |
| 693 | 707 |
| 694 super_class_ = InterfaceType::Cast(type); | 708 super_class_ = InterfaceType::Cast(type); |
| 709 reader->ReadOptional<DartType>(); // Mixed-in type is unused. | |
| 695 implemented_classes_.ReadFromStatic<DowncastReader<DartType, InterfaceType> >( | 710 implemented_classes_.ReadFromStatic<DowncastReader<DartType, InterfaceType> >( |
| 696 reader); | 711 reader); |
| 697 fields_.ReadFrom<Field>(reader, this); | 712 fields_.ReadFrom<Field>(reader, this); |
| 698 constructors_.ReadFrom<Constructor>(reader, this); | 713 constructors_.ReadFrom<Constructor>(reader, this); |
| 699 procedures_.ReadFrom<Procedure>(reader, this); | 714 procedures_.ReadFrom<Procedure>(reader, this); |
| 700 | 715 |
| 701 return this; | 716 return this; |
| 702 } | 717 } |
| 703 | 718 |
| 704 | 719 |
| 705 MixinClass* MixinClass::ReadFrom(Reader* reader) { | 720 MixinClass* MixinClass::ReadFrom(Reader* reader) { |
| 706 TRACE_READ_OFFSET(); | 721 TRACE_READ_OFFSET(); |
| 707 TypeParameterScope<ReaderHelper> scope(reader->helper()); | 722 TypeParameterScope<ReaderHelper> scope(reader->helper()); |
| 708 | 723 |
| 709 Class::ReadFrom(reader); | 724 Class::ReadFrom(reader); |
| 710 type_parameters_.ReadFrom(reader); | 725 type_parameters_.ReadFrom(reader); |
| 711 first_ = InterfaceType::Cast(DartType::ReadFrom(reader)); | 726 first_ = InterfaceType::Cast(DartType::ReadFrom(reader)); |
| 712 second_ = InterfaceType::Cast(DartType::ReadFrom(reader)); | 727 second_ = InterfaceType::Cast(DartType::ReadFrom(reader)); |
| 713 implemented_classes_.ReadFromStatic<DowncastReader<DartType, InterfaceType> >( | 728 implemented_classes_.ReadFromStatic<DowncastReader<DartType, InterfaceType> >( |
| 714 reader); | 729 reader); |
| 715 constructors_.ReadFrom<Constructor>(reader, this); | 730 constructors_.ReadFrom<Constructor>(reader, this); |
| 716 return this; | 731 return this; |
| 717 } | 732 } |
| 718 | 733 |
| 719 | 734 |
| 720 Member* Reference::ReadMemberFrom(Reader* reader, bool allow_null) { | 735 CanonicalName* Reference::ReadMemberFrom(Reader* reader, bool allow_null) { |
| 721 TRACE_READ_OFFSET(); | 736 TRACE_READ_OFFSET(); |
| 722 | 737 |
| 723 Program* program = reader->helper()->program(); | 738 CanonicalName* canonical_name = reader->ReadCanonicalNameReference(); |
| 724 Tag tag = reader->ReadTag(); | 739 if (canonical_name == NULL && !allow_null) { |
| 725 switch (tag) { | 740 FATAL("Expected a valid member reference, but got `null`"); |
| 726 case kLibraryFieldReference: { | |
| 727 int library_idx = reader->ReadUInt(); | |
| 728 int field_idx = reader->ReadUInt(); | |
| 729 Library* library = program->libraries().GetOrCreate<Library>(library_idx); | |
| 730 return library->fields().GetOrCreate<Field>(field_idx, library); | |
| 731 } | |
| 732 case kLibraryProcedureReference: { | |
| 733 int library_idx = reader->ReadUInt(); | |
| 734 int procedure_idx = reader->ReadUInt(); | |
| 735 Library* library = program->libraries().GetOrCreate<Library>(library_idx); | |
| 736 return library->procedures().GetOrCreate<Procedure>(procedure_idx, | |
| 737 library); | |
| 738 } | |
| 739 case kClassFieldReference: | |
| 740 case kClassConstructorReference: | |
| 741 case kClassProcedureReference: { | |
| 742 Class* klass = Reference::ReadClassFrom(reader); | |
| 743 if (tag == kClassFieldReference) { | |
| 744 int field_idx = reader->ReadUInt(); | |
| 745 return klass->fields().GetOrCreate<Field>(field_idx, klass); | |
| 746 } else if (tag == kClassConstructorReference) { | |
| 747 int constructor_idx = reader->ReadUInt(); | |
| 748 return klass->constructors().GetOrCreate<Constructor>(constructor_idx, | |
| 749 klass); | |
| 750 } else { | |
| 751 ASSERT(tag == kClassProcedureReference); | |
| 752 int procedure_idx = reader->ReadUInt(); | |
| 753 return klass->procedures().GetOrCreate<Procedure>(procedure_idx, klass); | |
| 754 } | |
| 755 } | |
| 756 case kNullReference: | |
| 757 if (allow_null) { | |
| 758 return NULL; | |
| 759 } else { | |
| 760 FATAL("Expected a valid member reference, but got `null`"); | |
| 761 } | |
| 762 default: | |
| 763 UNREACHABLE(); | |
| 764 break; | |
| 765 } | 741 } |
| 766 | 742 |
| 767 UNREACHABLE(); | 743 if (canonical_name != NULL) { |
| 768 return NULL; | 744 canonical_name->set_referenced(true); |
| 745 } | |
| 746 | |
| 747 return canonical_name; | |
| 769 } | 748 } |
| 770 | 749 |
| 771 | 750 |
| 772 Class* Reference::ReadClassFrom(Reader* reader, bool allow_null) { | 751 CanonicalName* Reference::ReadClassFrom(Reader* reader, bool allow_null) { |
| 773 TRACE_READ_OFFSET(); | 752 TRACE_READ_OFFSET(); |
| 774 Program* program = reader->helper()->program(); | |
| 775 | 753 |
| 776 Tag klass_member_tag = reader->ReadTag(); | 754 CanonicalName* canonical_name = reader->ReadCanonicalNameReference(); |
| 777 if (klass_member_tag == kNullReference) { | 755 if (canonical_name == NULL && !allow_null) { |
| 778 if (allow_null) { | 756 FATAL("Expected a valid class reference, but got `null`"); |
| 779 return NULL; | |
| 780 } else { | |
| 781 FATAL("Expected a valid class reference but got `null`."); | |
| 782 } | |
| 783 } | 757 } |
| 784 int library_idx = reader->ReadUInt(); | |
| 785 int class_idx = reader->ReadUInt(); | |
| 786 | 758 |
| 787 Library* library = program->libraries().GetOrCreate<Library>(library_idx); | 759 if (canonical_name != NULL) { |
| 788 Class* klass; | 760 canonical_name->set_referenced(true); |
| 789 if (klass_member_tag == kNormalClassReference) { | |
| 790 klass = library->classes().GetOrCreate<NormalClass>(class_idx, library); | |
| 791 } else { | |
| 792 ASSERT(klass_member_tag == kMixinClassReference); | |
| 793 klass = library->classes().GetOrCreate<MixinClass>(class_idx, library); | |
| 794 } | 761 } |
| 795 return klass; | 762 |
| 763 return canonical_name; | |
| 796 } | 764 } |
| 797 | 765 |
| 798 | 766 |
| 799 String* Reference::ReadStringFrom(Reader* reader) { | 767 String* Reference::ReadStringFrom(Reader* reader) { |
| 800 int index = reader->ReadUInt(); | 768 int index = reader->ReadUInt(); |
| 801 return reader->helper()->program()->string_table().strings()[index]; | 769 return reader->helper()->program()->string_table().strings()[index]; |
| 802 } | 770 } |
| 803 | 771 |
| 804 | 772 |
| 805 Field* Field::ReadFrom(Reader* reader) { | 773 Field* Field::ReadFrom(Reader* reader) { |
| 806 TRACE_READ_OFFSET(); | 774 TRACE_READ_OFFSET(); |
| 807 Tag tag = reader->ReadTag(); | 775 Tag tag = reader->ReadTag(); |
| 808 ASSERT(tag == kField); | 776 ASSERT(tag == kField); |
| 809 | 777 |
| 778 reader->ReadDefiningCanonicalNameReference(this); | |
| 810 position_ = reader->ReadPosition(); | 779 position_ = reader->ReadPosition(); |
| 811 end_position_ = reader->ReadPosition(); | 780 end_position_ = reader->ReadPosition(); |
| 812 flags_ = reader->ReadFlags(); | 781 flags_ = reader->ReadFlags(); |
| 813 name_ = Name::ReadFrom(reader); | 782 name_ = Name::ReadFrom(reader); |
| 814 source_uri_index_ = reader->ReadUInt(); | 783 source_uri_index_ = reader->ReadUInt(); |
| 815 reader->set_current_script_id(source_uri_index_); | 784 reader->set_current_script_id(source_uri_index_); |
| 816 annotations_.ReadFromStatic<Expression>(reader); | 785 annotations_.ReadFromStatic<Expression>(reader); |
| 817 type_ = DartType::ReadFrom(reader); | 786 type_ = DartType::ReadFrom(reader); |
| 818 inferred_value_ = reader->ReadOptional<InferredValue>(); | 787 inferred_value_ = reader->ReadOptional<InferredValue>(); |
| 819 initializer_ = reader->ReadOptional<Expression>(); | 788 initializer_ = reader->ReadOptional<Expression>(); |
| 820 return this; | 789 return this; |
| 821 } | 790 } |
| 822 | 791 |
| 823 | 792 |
| 824 Constructor* Constructor::ReadFrom(Reader* reader) { | 793 Constructor* Constructor::ReadFrom(Reader* reader) { |
| 825 TRACE_READ_OFFSET(); | 794 TRACE_READ_OFFSET(); |
| 826 Tag tag = reader->ReadTag(); | 795 Tag tag = reader->ReadTag(); |
| 827 ASSERT(tag == kConstructor); | 796 ASSERT(tag == kConstructor); |
| 828 | 797 |
| 798 reader->ReadDefiningCanonicalNameReference(this); | |
| 829 VariableScope<ReaderHelper> parameters(reader->helper()); | 799 VariableScope<ReaderHelper> parameters(reader->helper()); |
| 830 position_ = reader->ReadPosition(); | 800 position_ = reader->ReadPosition(); |
| 831 end_position_ = reader->ReadPosition(); | 801 end_position_ = reader->ReadPosition(); |
| 832 flags_ = reader->ReadFlags(); | 802 flags_ = reader->ReadFlags(); |
| 833 name_ = Name::ReadFrom(reader); | 803 name_ = Name::ReadFrom(reader); |
| 834 annotations_.ReadFromStatic<Expression>(reader); | 804 annotations_.ReadFromStatic<Expression>(reader); |
| 835 function_ = FunctionNode::ReadFrom(reader); | 805 function_ = FunctionNode::ReadFrom(reader); |
| 836 initializers_.ReadFromStatic<Initializer>(reader); | 806 initializers_.ReadFromStatic<Initializer>(reader); |
| 837 return this; | 807 return this; |
| 838 } | 808 } |
| 839 | 809 |
| 840 | 810 |
| 841 Procedure* Procedure::ReadFrom(Reader* reader) { | 811 Procedure* Procedure::ReadFrom(Reader* reader) { |
| 842 TRACE_READ_OFFSET(); | 812 TRACE_READ_OFFSET(); |
| 843 Tag tag = reader->ReadTag(); | 813 Tag tag = reader->ReadTag(); |
| 844 ASSERT(tag == kProcedure); | 814 ASSERT(tag == kProcedure); |
| 845 | 815 |
| 816 reader->ReadDefiningCanonicalNameReference(this); | |
| 846 VariableScope<ReaderHelper> parameters(reader->helper()); | 817 VariableScope<ReaderHelper> parameters(reader->helper()); |
| 847 position_ = reader->ReadPosition(); | 818 position_ = reader->ReadPosition(); |
| 848 end_position_ = reader->ReadPosition(); | 819 end_position_ = reader->ReadPosition(); |
| 849 kind_ = static_cast<ProcedureKind>(reader->ReadByte()); | 820 kind_ = static_cast<ProcedureKind>(reader->ReadByte()); |
| 850 flags_ = reader->ReadFlags(); | 821 flags_ = reader->ReadFlags(); |
| 851 name_ = Name::ReadFrom(reader); | 822 name_ = Name::ReadFrom(reader); |
| 852 source_uri_index_ = reader->ReadUInt(); | 823 source_uri_index_ = reader->ReadUInt(); |
| 853 reader->set_current_script_id(source_uri_index_); | 824 reader->set_current_script_id(source_uri_index_); |
| 854 annotations_.ReadFromStatic<Expression>(reader); | 825 annotations_.ReadFromStatic<Expression>(reader); |
| 855 function_ = reader->ReadOptional<FunctionNode>(); | 826 function_ = reader->ReadOptional<FunctionNode>(); |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 880 | 851 |
| 881 InvalidInitializer* InvalidInitializer::ReadFromImpl(Reader* reader) { | 852 InvalidInitializer* InvalidInitializer::ReadFromImpl(Reader* reader) { |
| 882 TRACE_READ_OFFSET(); | 853 TRACE_READ_OFFSET(); |
| 883 return new InvalidInitializer(); | 854 return new InvalidInitializer(); |
| 884 } | 855 } |
| 885 | 856 |
| 886 | 857 |
| 887 FieldInitializer* FieldInitializer::ReadFromImpl(Reader* reader) { | 858 FieldInitializer* FieldInitializer::ReadFromImpl(Reader* reader) { |
| 888 TRACE_READ_OFFSET(); | 859 TRACE_READ_OFFSET(); |
| 889 FieldInitializer* initializer = new FieldInitializer(); | 860 FieldInitializer* initializer = new FieldInitializer(); |
| 890 initializer->field_ = Field::Cast(Reference::ReadMemberFrom(reader)); | 861 initializer->field_reference_ = Reference::ReadMemberFrom(reader); |
| 891 initializer->value_ = Expression::ReadFrom(reader); | 862 initializer->value_ = Expression::ReadFrom(reader); |
| 892 return initializer; | 863 return initializer; |
| 893 } | 864 } |
| 894 | 865 |
| 895 | 866 |
| 896 SuperInitializer* SuperInitializer::ReadFromImpl(Reader* reader) { | 867 SuperInitializer* SuperInitializer::ReadFromImpl(Reader* reader) { |
| 897 TRACE_READ_OFFSET(); | 868 TRACE_READ_OFFSET(); |
| 898 SuperInitializer* init = new SuperInitializer(); | 869 SuperInitializer* init = new SuperInitializer(); |
| 899 init->target_ = Constructor::Cast(Reference::ReadMemberFrom(reader)); | 870 init->target_reference_ = Reference::ReadMemberFrom(reader); |
| 900 init->arguments_ = Arguments::ReadFrom(reader); | 871 init->arguments_ = Arguments::ReadFrom(reader); |
| 901 return init; | 872 return init; |
| 902 } | 873 } |
| 903 | 874 |
| 904 | 875 |
| 905 RedirectingInitializer* RedirectingInitializer::ReadFromImpl(Reader* reader) { | 876 RedirectingInitializer* RedirectingInitializer::ReadFromImpl(Reader* reader) { |
| 906 TRACE_READ_OFFSET(); | 877 TRACE_READ_OFFSET(); |
| 907 RedirectingInitializer* init = new RedirectingInitializer(); | 878 RedirectingInitializer* init = new RedirectingInitializer(); |
| 908 init->target_ = Constructor::Cast(Reference::ReadMemberFrom(reader)); | 879 init->target_reference_ = Reference::ReadMemberFrom(reader); |
| 909 init->arguments_ = Arguments::ReadFrom(reader); | 880 init->arguments_ = Arguments::ReadFrom(reader); |
| 910 return init; | 881 return init; |
| 911 } | 882 } |
| 912 | 883 |
| 913 | 884 |
| 914 LocalInitializer* LocalInitializer::ReadFromImpl(Reader* reader) { | 885 LocalInitializer* LocalInitializer::ReadFromImpl(Reader* reader) { |
| 915 TRACE_READ_OFFSET(); | 886 TRACE_READ_OFFSET(); |
| 916 LocalInitializer* init = new LocalInitializer(); | 887 LocalInitializer* init = new LocalInitializer(); |
| 917 init->variable_ = VariableDeclaration::ReadFromImpl(reader); | 888 init->variable_ = VariableDeclaration::ReadFromImpl(reader); |
| 918 return init; | 889 return init; |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1063 return set; | 1034 return set; |
| 1064 } | 1035 } |
| 1065 | 1036 |
| 1066 | 1037 |
| 1067 PropertyGet* PropertyGet::ReadFrom(Reader* reader) { | 1038 PropertyGet* PropertyGet::ReadFrom(Reader* reader) { |
| 1068 TRACE_READ_OFFSET(); | 1039 TRACE_READ_OFFSET(); |
| 1069 PropertyGet* get = new PropertyGet(); | 1040 PropertyGet* get = new PropertyGet(); |
| 1070 get->position_ = reader->ReadPosition(); | 1041 get->position_ = reader->ReadPosition(); |
| 1071 get->receiver_ = Expression::ReadFrom(reader); | 1042 get->receiver_ = Expression::ReadFrom(reader); |
| 1072 get->name_ = Name::ReadFrom(reader); | 1043 get->name_ = Name::ReadFrom(reader); |
| 1073 get->interfaceTarget_ = Reference::ReadMemberFrom(reader, true); | 1044 get->interface_target_reference_ = Reference::ReadMemberFrom(reader, true); |
| 1074 return get; | 1045 return get; |
| 1075 } | 1046 } |
| 1076 | 1047 |
| 1077 | 1048 |
| 1078 PropertySet* PropertySet::ReadFrom(Reader* reader) { | 1049 PropertySet* PropertySet::ReadFrom(Reader* reader) { |
| 1079 TRACE_READ_OFFSET(); | 1050 TRACE_READ_OFFSET(); |
| 1080 PropertySet* set = new PropertySet(); | 1051 PropertySet* set = new PropertySet(); |
| 1081 set->position_ = reader->ReadPosition(); | 1052 set->position_ = reader->ReadPosition(); |
| 1082 set->receiver_ = Expression::ReadFrom(reader); | 1053 set->receiver_ = Expression::ReadFrom(reader); |
| 1083 set->name_ = Name::ReadFrom(reader); | 1054 set->name_ = Name::ReadFrom(reader); |
| 1084 set->value_ = Expression::ReadFrom(reader); | 1055 set->value_ = Expression::ReadFrom(reader); |
| 1085 set->interfaceTarget_ = Reference::ReadMemberFrom(reader, true); | 1056 set->interface_target_reference_ = Reference::ReadMemberFrom(reader, true); |
| 1086 return set; | 1057 return set; |
| 1087 } | 1058 } |
| 1088 | 1059 |
| 1089 | 1060 |
| 1090 DirectPropertyGet* DirectPropertyGet::ReadFrom(Reader* reader) { | 1061 DirectPropertyGet* DirectPropertyGet::ReadFrom(Reader* reader) { |
| 1091 TRACE_READ_OFFSET(); | 1062 TRACE_READ_OFFSET(); |
| 1092 DirectPropertyGet* get = new DirectPropertyGet(); | 1063 DirectPropertyGet* get = new DirectPropertyGet(); |
| 1093 get->receiver_ = Expression::ReadFrom(reader); | 1064 get->receiver_ = Expression::ReadFrom(reader); |
| 1094 get->target_ = Reference::ReadMemberFrom(reader); | 1065 get->target_reference_ = Reference::ReadMemberFrom(reader); |
| 1095 return get; | 1066 return get; |
| 1096 } | 1067 } |
| 1097 | 1068 |
| 1098 | 1069 |
| 1099 DirectPropertySet* DirectPropertySet::ReadFrom(Reader* reader) { | 1070 DirectPropertySet* DirectPropertySet::ReadFrom(Reader* reader) { |
| 1100 TRACE_READ_OFFSET(); | 1071 TRACE_READ_OFFSET(); |
| 1101 DirectPropertySet* set = new DirectPropertySet(); | 1072 DirectPropertySet* set = new DirectPropertySet(); |
| 1102 set->receiver_ = Expression::ReadFrom(reader); | 1073 set->receiver_ = Expression::ReadFrom(reader); |
| 1103 set->target_ = Reference::ReadMemberFrom(reader); | 1074 set->target_reference_ = Reference::ReadMemberFrom(reader); |
| 1104 set->value_ = Expression::ReadFrom(reader); | 1075 set->value_ = Expression::ReadFrom(reader); |
| 1105 return set; | 1076 return set; |
| 1106 } | 1077 } |
| 1107 | 1078 |
| 1108 | 1079 |
| 1109 StaticGet* StaticGet::ReadFrom(Reader* reader) { | 1080 StaticGet* StaticGet::ReadFrom(Reader* reader) { |
| 1110 TRACE_READ_OFFSET(); | 1081 TRACE_READ_OFFSET(); |
| 1111 StaticGet* get = new StaticGet(); | 1082 StaticGet* get = new StaticGet(); |
| 1112 get->position_ = reader->ReadPosition(); | 1083 get->position_ = reader->ReadPosition(); |
| 1113 get->target_ = Reference::ReadMemberFrom(reader); | 1084 get->target_reference_ = Reference::ReadMemberFrom(reader); |
| 1114 return get; | 1085 return get; |
| 1115 } | 1086 } |
| 1116 | 1087 |
| 1117 | 1088 |
| 1118 StaticSet* StaticSet::ReadFrom(Reader* reader) { | 1089 StaticSet* StaticSet::ReadFrom(Reader* reader) { |
| 1119 TRACE_READ_OFFSET(); | 1090 TRACE_READ_OFFSET(); |
| 1120 StaticSet* set = new StaticSet(); | 1091 StaticSet* set = new StaticSet(); |
| 1121 set->target_ = Reference::ReadMemberFrom(reader); | 1092 set->target_reference_ = Reference::ReadMemberFrom(reader); |
| 1122 set->expression_ = Expression::ReadFrom(reader); | 1093 set->expression_ = Expression::ReadFrom(reader); |
| 1123 return set; | 1094 return set; |
| 1124 } | 1095 } |
| 1125 | 1096 |
| 1126 | 1097 |
| 1127 Arguments* Arguments::ReadFrom(Reader* reader) { | 1098 Arguments* Arguments::ReadFrom(Reader* reader) { |
| 1128 TRACE_READ_OFFSET(); | 1099 TRACE_READ_OFFSET(); |
| 1129 Arguments* arguments = new Arguments(); | 1100 Arguments* arguments = new Arguments(); |
| 1130 arguments->types().ReadFromStatic<DartType>(reader); | 1101 arguments->types().ReadFromStatic<DartType>(reader); |
| 1131 arguments->positional().ReadFromStatic<Expression>(reader); | 1102 arguments->positional().ReadFromStatic<Expression>(reader); |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 1142 } | 1113 } |
| 1143 | 1114 |
| 1144 | 1115 |
| 1145 MethodInvocation* MethodInvocation::ReadFrom(Reader* reader) { | 1116 MethodInvocation* MethodInvocation::ReadFrom(Reader* reader) { |
| 1146 TRACE_READ_OFFSET(); | 1117 TRACE_READ_OFFSET(); |
| 1147 MethodInvocation* invocation = new MethodInvocation(); | 1118 MethodInvocation* invocation = new MethodInvocation(); |
| 1148 invocation->position_ = reader->ReadPosition(); | 1119 invocation->position_ = reader->ReadPosition(); |
| 1149 invocation->receiver_ = Expression::ReadFrom(reader); | 1120 invocation->receiver_ = Expression::ReadFrom(reader); |
| 1150 invocation->name_ = Name::ReadFrom(reader); | 1121 invocation->name_ = Name::ReadFrom(reader); |
| 1151 invocation->arguments_ = Arguments::ReadFrom(reader); | 1122 invocation->arguments_ = Arguments::ReadFrom(reader); |
| 1152 invocation->interfaceTarget_ = Reference::ReadMemberFrom(reader, true); | 1123 invocation->interface_target_reference_ = |
| 1124 Reference::ReadMemberFrom(reader, true); | |
| 1153 return invocation; | 1125 return invocation; |
| 1154 } | 1126 } |
| 1155 | 1127 |
| 1156 | 1128 |
| 1157 DirectMethodInvocation* DirectMethodInvocation::ReadFrom(Reader* reader) { | 1129 DirectMethodInvocation* DirectMethodInvocation::ReadFrom(Reader* reader) { |
| 1158 TRACE_READ_OFFSET(); | 1130 TRACE_READ_OFFSET(); |
| 1159 DirectMethodInvocation* invocation = new DirectMethodInvocation(); | 1131 DirectMethodInvocation* invocation = new DirectMethodInvocation(); |
| 1160 invocation->receiver_ = Expression::ReadFrom(reader); | 1132 invocation->receiver_ = Expression::ReadFrom(reader); |
| 1161 invocation->target_ = Procedure::Cast(Reference::ReadMemberFrom(reader)); | 1133 invocation->target_reference_ = Reference::ReadMemberFrom(reader); |
| 1162 invocation->arguments_ = Arguments::ReadFrom(reader); | 1134 invocation->arguments_ = Arguments::ReadFrom(reader); |
| 1163 return invocation; | 1135 return invocation; |
| 1164 } | 1136 } |
| 1165 | 1137 |
| 1166 | 1138 |
| 1167 StaticInvocation* StaticInvocation::ReadFrom(Reader* reader, bool is_const) { | 1139 StaticInvocation* StaticInvocation::ReadFrom(Reader* reader, bool is_const) { |
| 1168 TRACE_READ_OFFSET(); | 1140 TRACE_READ_OFFSET(); |
| 1169 StaticInvocation* invocation = new StaticInvocation(); | 1141 StaticInvocation* invocation = new StaticInvocation(); |
| 1170 invocation->is_const_ = is_const; | 1142 invocation->is_const_ = is_const; |
| 1171 invocation->position_ = reader->ReadPosition(); | 1143 invocation->position_ = reader->ReadPosition(); |
| 1172 invocation->procedure_ = Procedure::Cast(Reference::ReadMemberFrom(reader)); | 1144 invocation->procedure_reference_ = Reference::ReadMemberFrom(reader); |
| 1173 invocation->arguments_ = Arguments::ReadFrom(reader); | 1145 invocation->arguments_ = Arguments::ReadFrom(reader); |
| 1174 return invocation; | 1146 return invocation; |
| 1175 } | 1147 } |
| 1176 | 1148 |
| 1177 | 1149 |
| 1178 ConstructorInvocation* ConstructorInvocation::ReadFrom(Reader* reader, | 1150 ConstructorInvocation* ConstructorInvocation::ReadFrom(Reader* reader, |
| 1179 bool is_const) { | 1151 bool is_const) { |
| 1180 TRACE_READ_OFFSET(); | 1152 TRACE_READ_OFFSET(); |
| 1181 ConstructorInvocation* invocation = new ConstructorInvocation(); | 1153 ConstructorInvocation* invocation = new ConstructorInvocation(); |
| 1182 invocation->is_const_ = is_const; | 1154 invocation->is_const_ = is_const; |
| 1183 invocation->position_ = reader->ReadPosition(); | 1155 invocation->position_ = reader->ReadPosition(); |
| 1184 invocation->target_ = Constructor::Cast(Reference::ReadMemberFrom(reader)); | 1156 invocation->target_reference_ = Reference::ReadMemberFrom(reader); |
| 1185 invocation->arguments_ = Arguments::ReadFrom(reader); | 1157 invocation->arguments_ = Arguments::ReadFrom(reader); |
| 1186 return invocation; | 1158 return invocation; |
| 1187 } | 1159 } |
| 1188 | 1160 |
| 1189 | 1161 |
| 1190 Not* Not::ReadFrom(Reader* reader) { | 1162 Not* Not::ReadFrom(Reader* reader) { |
| 1191 TRACE_READ_OFFSET(); | 1163 TRACE_READ_OFFSET(); |
| 1192 Not* n = new Not(); | 1164 Not* n = new Not(); |
| 1193 n->expression_ = Expression::ReadFrom(reader); | 1165 n->expression_ = Expression::ReadFrom(reader); |
| 1194 return n; | 1166 return n; |
| (...skipping 509 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1704 decl->variable_ = VariableDeclaration::ReadFromImpl(reader); | 1676 decl->variable_ = VariableDeclaration::ReadFromImpl(reader); |
| 1705 VariableScope<ReaderHelper> parameters(reader->helper()); | 1677 VariableScope<ReaderHelper> parameters(reader->helper()); |
| 1706 decl->function_ = FunctionNode::ReadFrom(reader); | 1678 decl->function_ = FunctionNode::ReadFrom(reader); |
| 1707 return decl; | 1679 return decl; |
| 1708 } | 1680 } |
| 1709 | 1681 |
| 1710 | 1682 |
| 1711 Name* Name::ReadFrom(Reader* reader) { | 1683 Name* Name::ReadFrom(Reader* reader) { |
| 1712 String* string = Reference::ReadStringFrom(reader); | 1684 String* string = Reference::ReadStringFrom(reader); |
| 1713 if (string->size() >= 1 && string->buffer()[0] == '_') { | 1685 if (string->size() >= 1 && string->buffer()[0] == '_') { |
| 1714 int lib_index = reader->ReadUInt(); | 1686 CanonicalName* library_reference = reader->ReadCanonicalNameReference(); |
| 1715 Library* library = | 1687 return new Name(string, library_reference); |
| 1716 reader->helper()->program()->libraries().GetOrCreate<Library>( | |
| 1717 lib_index); | |
| 1718 return new Name(string, library); | |
| 1719 } else { | 1688 } else { |
| 1720 return new Name(string, NULL); | 1689 return new Name(string, NULL); |
| 1721 } | 1690 } |
| 1722 } | 1691 } |
| 1723 | 1692 |
| 1724 | 1693 |
| 1725 InferredValue* InferredValue::ReadFrom(Reader* reader) { | 1694 InferredValue* InferredValue::ReadFrom(Reader* reader) { |
| 1726 InferredValue* type = new InferredValue(); | 1695 InferredValue* type = new InferredValue(); |
| 1727 type->klass_ = Reference::ReadClassFrom(reader, true); | 1696 type->klass_reference_ = Reference::ReadClassFrom(reader, true); |
| 1728 type->kind_ = static_cast<BaseClassKind>(reader->ReadByte()); | 1697 type->kind_ = static_cast<BaseClassKind>(reader->ReadByte()); |
| 1729 type->value_bits_ = reader->ReadByte(); | 1698 type->value_bits_ = reader->ReadByte(); |
| 1730 return type; | 1699 return type; |
| 1731 } | 1700 } |
| 1732 | 1701 |
| 1733 | 1702 |
| 1734 DartType* DartType::ReadFrom(Reader* reader) { | 1703 DartType* DartType::ReadFrom(Reader* reader) { |
| 1735 TRACE_READ_OFFSET(); | 1704 TRACE_READ_OFFSET(); |
| 1736 Tag tag = reader->ReadTag(); | 1705 Tag tag = reader->ReadTag(); |
| 1737 switch (tag) { | 1706 switch (tag) { |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1772 | 1741 |
| 1773 | 1742 |
| 1774 VoidType* VoidType::ReadFrom(Reader* reader) { | 1743 VoidType* VoidType::ReadFrom(Reader* reader) { |
| 1775 TRACE_READ_OFFSET(); | 1744 TRACE_READ_OFFSET(); |
| 1776 return new VoidType(); | 1745 return new VoidType(); |
| 1777 } | 1746 } |
| 1778 | 1747 |
| 1779 | 1748 |
| 1780 InterfaceType* InterfaceType::ReadFrom(Reader* reader) { | 1749 InterfaceType* InterfaceType::ReadFrom(Reader* reader) { |
| 1781 TRACE_READ_OFFSET(); | 1750 TRACE_READ_OFFSET(); |
| 1782 Class* klass = Reference::ReadClassFrom(reader); | 1751 CanonicalName* klass_name = Reference::ReadClassFrom(reader); |
| 1783 InterfaceType* type = new InterfaceType(klass); | 1752 InterfaceType* type = new InterfaceType(klass_name); |
| 1784 type->type_arguments().ReadFromStatic<DartType>(reader); | 1753 type->type_arguments().ReadFromStatic<DartType>(reader); |
| 1785 return type; | 1754 return type; |
| 1786 } | 1755 } |
| 1787 | 1756 |
| 1788 | 1757 |
| 1789 InterfaceType* InterfaceType::ReadFrom(Reader* reader, | 1758 InterfaceType* InterfaceType::ReadFrom(Reader* reader, |
| 1790 bool _without_type_arguments_) { | 1759 bool _without_type_arguments_) { |
| 1791 TRACE_READ_OFFSET(); | 1760 TRACE_READ_OFFSET(); |
| 1792 Class* klass = Reference::ReadClassFrom(reader); | 1761 CanonicalName* klass_name = Reference::ReadClassFrom(reader); |
| 1793 InterfaceType* type = new InterfaceType(klass); | 1762 InterfaceType* type = new InterfaceType(klass_name); |
| 1794 ASSERT(_without_type_arguments_); | 1763 ASSERT(_without_type_arguments_); |
| 1795 return type; | 1764 return type; |
| 1796 } | 1765 } |
| 1797 | 1766 |
| 1798 | 1767 |
| 1799 FunctionType* FunctionType::ReadFrom(Reader* reader) { | 1768 FunctionType* FunctionType::ReadFrom(Reader* reader) { |
| 1800 TRACE_READ_OFFSET(); | 1769 TRACE_READ_OFFSET(); |
| 1801 FunctionType* type = new FunctionType(); | 1770 FunctionType* type = new FunctionType(); |
| 1802 TypeParameterScope<ReaderHelper> scope(reader->helper()); | 1771 TypeParameterScope<ReaderHelper> scope(reader->helper()); |
| 1803 type->type_parameters().ReadFrom(reader); | 1772 type->type_parameters().ReadFrom(reader); |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 1828 return type; | 1797 return type; |
| 1829 } | 1798 } |
| 1830 | 1799 |
| 1831 | 1800 |
| 1832 Program* Program::ReadFrom(Reader* reader) { | 1801 Program* Program::ReadFrom(Reader* reader) { |
| 1833 TRACE_READ_OFFSET(); | 1802 TRACE_READ_OFFSET(); |
| 1834 uint32_t magic = reader->ReadUInt32(); | 1803 uint32_t magic = reader->ReadUInt32(); |
| 1835 if (magic != kMagicProgramFile) FATAL("Invalid magic identifier"); | 1804 if (magic != kMagicProgramFile) FATAL("Invalid magic identifier"); |
| 1836 | 1805 |
| 1837 Program* program = new Program(); | 1806 Program* program = new Program(); |
| 1807 program->canonical_name_root_ = CanonicalName::NewRoot(); | |
| 1838 reader->helper()->set_program(program); | 1808 reader->helper()->set_program(program); |
| 1839 | 1809 |
| 1840 program->string_table_.ReadFrom(reader); | 1810 program->string_table_.ReadFrom(reader); |
| 1841 program->source_uri_table_.ReadFrom(reader); | 1811 program->source_uri_table_.ReadFrom(reader); |
| 1842 program->source_table_.ReadFrom(reader); | 1812 program->source_table_.ReadFrom(reader); |
| 1843 | 1813 |
| 1814 int canonical_names = reader->ReadUInt(); | |
| 1815 reader->helper()->SetCanonicalNameCount(canonical_names); | |
| 1816 for (int i = 0; i < canonical_names; ++i) { | |
|
kustermann
2017/02/03 11:48:20
nit: vm convention is to use intptr_t instead of i
asgerf
2017/02/03 12:47:38
Done.
| |
| 1817 int biased_parent_index = reader->ReadUInt(); | |
| 1818 CanonicalName* parent; | |
| 1819 if (biased_parent_index != 0) { | |
| 1820 parent = reader->helper()->GetCanonicalName(biased_parent_index - 1); | |
| 1821 } else { | |
| 1822 parent = program->canonical_name_root(); | |
| 1823 } | |
|
kustermann
2017/02/03 11:48:20
You can
reader->helper()->SetCanonicalNameCount(
asgerf
2017/02/03 12:47:38
I just tried it, but it didn't really work out tha
| |
| 1824 ASSERT(parent != NULL); | |
| 1825 int name_index = reader->ReadUInt(); | |
| 1826 String* name = program->string_table().strings()[name_index]; | |
| 1827 CanonicalName* canonical_name = parent->AddChild(name); | |
| 1828 reader->helper()->SetCanonicalName(i, canonical_name); | |
| 1829 } | |
| 1830 | |
| 1844 int libraries = reader->ReadUInt(); | 1831 int libraries = reader->ReadUInt(); |
| 1845 program->libraries().EnsureInitialized(libraries); | 1832 program->libraries().EnsureInitialized(libraries); |
| 1846 for (int i = 0; i < libraries; i++) { | 1833 for (int i = 0; i < libraries; i++) { |
| 1847 program->libraries().GetOrCreate<Library>(i)->ReadFrom(reader); | 1834 program->libraries().GetOrCreate<Library>(i)->ReadFrom(reader); |
| 1848 } | 1835 } |
| 1849 | 1836 |
| 1850 program->main_method_ = Procedure::Cast(Reference::ReadMemberFrom(reader)); | 1837 program->main_method_reference_ = Reference::ReadMemberFrom(reader); |
| 1838 | |
| 1839 #ifdef DEBUG | |
| 1840 for (int i = 0; i < canonical_names; ++i) { | |
|
kustermann
2017/02/03 11:48:20
nit: vm convention is to use intptr_t instead of i
asgerf
2017/02/03 12:47:38
Done.
| |
| 1841 CanonicalName* name = reader->helper()->GetCanonicalName(i); | |
| 1842 if (name->is_referenced() && name->definition() == NULL) { | |
| 1843 FATAL("Missing definition for canonical name"); | |
| 1844 } | |
| 1845 } | |
| 1846 #endif | |
| 1851 | 1847 |
| 1852 return program; | 1848 return program; |
| 1853 } | 1849 } |
| 1854 | 1850 |
| 1855 | 1851 |
| 1856 FunctionNode* FunctionNode::ReadFrom(Reader* reader) { | 1852 FunctionNode* FunctionNode::ReadFrom(Reader* reader) { |
| 1857 TRACE_READ_OFFSET(); | 1853 TRACE_READ_OFFSET(); |
| 1858 TypeParameterScope<ReaderHelper> scope(reader->helper()); | 1854 TypeParameterScope<ReaderHelper> scope(reader->helper()); |
| 1859 | 1855 |
| 1860 FunctionNode* function = new FunctionNode(); | 1856 FunctionNode* function = new FunctionNode(); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1892 | 1888 |
| 1893 kernel::Program* ReadPrecompiledKernelFromBuffer(const uint8_t* buffer, | 1889 kernel::Program* ReadPrecompiledKernelFromBuffer(const uint8_t* buffer, |
| 1894 intptr_t buffer_length) { | 1890 intptr_t buffer_length) { |
| 1895 kernel::Reader reader(buffer, buffer_length); | 1891 kernel::Reader reader(buffer, buffer_length); |
| 1896 return kernel::Program::ReadFrom(&reader); | 1892 return kernel::Program::ReadFrom(&reader); |
| 1897 } | 1893 } |
| 1898 | 1894 |
| 1899 | 1895 |
| 1900 } // namespace dart | 1896 } // namespace dart |
| 1901 #endif // !defined(DART_PRECOMPILED_RUNTIME) | 1897 #endif // !defined(DART_PRECOMPILED_RUNTIME) |
| OLD | NEW |