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); |
| 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); |
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) { |
| 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 } |
| 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) { |
| 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 |