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

Side by Side Diff: runtime/vm/kernel_binary.cc

Issue 2782913003: Revert "Remove definitions from Kernel canonical names." (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/vm/kernel.cc ('k') | runtime/vm/kernel_reader.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 #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 476 matching lines...) Expand 10 before | Expand all | Expand 10 after
487 ReaderHelper* helper() { return &builder_; } 487 ReaderHelper* helper() { return &builder_; }
488 488
489 CanonicalName* ReadCanonicalNameReference() { 489 CanonicalName* ReadCanonicalNameReference() {
490 int index = ReadUInt(); 490 int index = ReadUInt();
491 if (index == 0) return NULL; 491 if (index == 0) return NULL;
492 CanonicalName* name = builder_.GetCanonicalName(index - 1); 492 CanonicalName* name = builder_.GetCanonicalName(index - 1);
493 ASSERT(name != NULL); 493 ASSERT(name != NULL);
494 return name; 494 return name;
495 } 495 }
496 496
497 CanonicalName* ReadDefiningCanonicalNameReference(LinkedNode* node_to_link) {
498 CanonicalName* name = ReadCanonicalNameReference();
499 ASSERT(name != NULL);
500 name->BindTo(node_to_link);
501 return name;
502 }
503
497 intptr_t offset() { return offset_; } 504 intptr_t offset() { return offset_; }
498 505
499 private: 506 private:
500 const uint8_t* buffer_; 507 const uint8_t* buffer_;
501 intptr_t size_; 508 intptr_t size_;
502 intptr_t offset_; 509 intptr_t offset_;
503 ReaderHelper builder_; 510 ReaderHelper builder_;
504 TokenPosition max_position_; 511 TokenPosition max_position_;
505 TokenPosition min_position_; 512 TokenPosition min_position_;
506 intptr_t current_script_id_; 513 intptr_t current_script_id_;
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
673 line_starts_[i] = line_starts; 680 line_starts_[i] = line_starts;
674 } 681 }
675 } 682 }
676 683
677 684
678 Library* Library::ReadFrom(Reader* reader) { 685 Library* Library::ReadFrom(Reader* reader) {
679 TRACE_READ_OFFSET(); 686 TRACE_READ_OFFSET();
680 int flags = reader->ReadFlags(); 687 int flags = reader->ReadFlags();
681 ASSERT(flags == 0); // external libraries not supported 688 ASSERT(flags == 0); // external libraries not supported
682 689
683 canonical_name_ = reader->ReadCanonicalNameReference(); 690 CanonicalName* canonical_name =
691 reader->ReadDefiningCanonicalNameReference(this);
692
684 name_ = Reference::ReadStringFrom(reader); 693 name_ = Reference::ReadStringFrom(reader);
685 import_uri_ = canonical_name_->name(); 694 import_uri_ = canonical_name->name();
686 source_uri_index_ = reader->ReadUInt(); 695 source_uri_index_ = reader->ReadUInt();
687 reader->set_current_script_id(source_uri_index_); 696 reader->set_current_script_id(source_uri_index_);
688 697
689 int num_imports = reader->ReadUInt(); 698 int num_imports = reader->ReadUInt();
690 if (num_imports != 0) { 699 if (num_imports != 0) {
691 FATAL("Deferred imports not implemented in VM"); 700 FATAL("Deferred imports not implemented in VM");
692 } 701 }
693 int num_classes = reader->ReadUInt(); 702 int num_classes = reader->ReadUInt();
694 classes().EnsureInitialized(num_classes); 703 classes().EnsureInitialized(num_classes);
695 for (intptr_t i = 0; i < num_classes; i++) { 704 for (intptr_t i = 0; i < num_classes; i++) {
696 Tag tag = reader->ReadTag(); 705 Tag tag = reader->ReadTag();
697 ASSERT(tag == kClass); 706 ASSERT(tag == kClass);
698 NormalClass* klass = classes().GetOrCreate<NormalClass>(i, this); 707 NormalClass* klass = classes().GetOrCreate<NormalClass>(i, this);
699 klass->ReadFrom(reader); 708 klass->ReadFrom(reader);
700 } 709 }
701 710
702 fields().ReadFrom<Field>(reader, this); 711 fields().ReadFrom<Field>(reader, this);
703 procedures().ReadFrom<Procedure>(reader, this); 712 procedures().ReadFrom<Procedure>(reader, this);
704 return this; 713 return this;
705 } 714 }
706 715
707 716
708 Class* Class::ReadFrom(Reader* reader) { 717 Class* Class::ReadFrom(Reader* reader) {
709 TRACE_READ_OFFSET(); 718 TRACE_READ_OFFSET();
710 719
711 canonical_name_ = reader->ReadCanonicalNameReference(); 720 reader->ReadDefiningCanonicalNameReference(this);
712 position_ = reader->ReadPosition(false); 721 position_ = reader->ReadPosition(false);
713 is_abstract_ = reader->ReadBool(); 722 is_abstract_ = reader->ReadBool();
714 name_ = Reference::ReadStringFrom(reader); 723 name_ = Reference::ReadStringFrom(reader);
715 source_uri_index_ = reader->ReadUInt(); 724 source_uri_index_ = reader->ReadUInt();
716 reader->set_current_script_id(source_uri_index_); 725 reader->set_current_script_id(source_uri_index_);
717 reader->record_token_position(position_); 726 reader->record_token_position(position_);
718 annotations_.ReadFromStatic<Expression>(reader); 727 annotations_.ReadFromStatic<Expression>(reader);
719 728
720 return this; 729 return this;
721 } 730 }
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
793 return reader->helper()->program()->string_table().strings()[index]; 802 return reader->helper()->program()->string_table().strings()[index];
794 } 803 }
795 804
796 805
797 Field* Field::ReadFrom(Reader* reader) { 806 Field* Field::ReadFrom(Reader* reader) {
798 TRACE_READ_OFFSET(); 807 TRACE_READ_OFFSET();
799 kernel_offset_ = reader->offset(); // Notice the ReadTag() below. 808 kernel_offset_ = reader->offset(); // Notice the ReadTag() below.
800 Tag tag = reader->ReadTag(); 809 Tag tag = reader->ReadTag();
801 ASSERT(tag == kField); 810 ASSERT(tag == kField);
802 811
803 canonical_name_ = reader->ReadCanonicalNameReference(); 812 reader->ReadDefiningCanonicalNameReference(this);
804 position_ = reader->ReadPosition(false); 813 position_ = reader->ReadPosition(false);
805 end_position_ = reader->ReadPosition(false); 814 end_position_ = reader->ReadPosition(false);
806 flags_ = reader->ReadFlags(); 815 flags_ = reader->ReadFlags();
807 name_ = Name::ReadFrom(reader); 816 name_ = Name::ReadFrom(reader);
808 source_uri_index_ = reader->ReadUInt(); 817 source_uri_index_ = reader->ReadUInt();
809 reader->set_current_script_id(source_uri_index_); 818 reader->set_current_script_id(source_uri_index_);
810 reader->record_token_position(position_); 819 reader->record_token_position(position_);
811 reader->record_token_position(end_position_); 820 reader->record_token_position(end_position_);
812 annotations_.ReadFromStatic<Expression>(reader); 821 annotations_.ReadFromStatic<Expression>(reader);
813 type_ = DartType::ReadFrom(reader); 822 type_ = DartType::ReadFrom(reader);
814 initializer_ = reader->ReadOptional<Expression>(); 823 initializer_ = reader->ReadOptional<Expression>();
815 return this; 824 return this;
816 } 825 }
817 826
818 827
819 Constructor* Constructor::ReadFrom(Reader* reader) { 828 Constructor* Constructor::ReadFrom(Reader* reader) {
820 TRACE_READ_OFFSET(); 829 TRACE_READ_OFFSET();
821 Tag tag = reader->ReadTag(); 830 Tag tag = reader->ReadTag();
822 ASSERT(tag == kConstructor); 831 ASSERT(tag == kConstructor);
823 832
824 canonical_name_ = reader->ReadCanonicalNameReference(); 833 reader->ReadDefiningCanonicalNameReference(this);
825 VariableScope<ReaderHelper> parameters(reader->helper()); 834 VariableScope<ReaderHelper> parameters(reader->helper());
826 position_ = reader->ReadPosition(); 835 position_ = reader->ReadPosition();
827 end_position_ = reader->ReadPosition(); 836 end_position_ = reader->ReadPosition();
828 flags_ = reader->ReadFlags(); 837 flags_ = reader->ReadFlags();
829 name_ = Name::ReadFrom(reader); 838 name_ = Name::ReadFrom(reader);
830 annotations_.ReadFromStatic<Expression>(reader); 839 annotations_.ReadFromStatic<Expression>(reader);
831 function_ = FunctionNode::ReadFrom(reader); 840 function_ = FunctionNode::ReadFrom(reader);
832 initializers_.ReadFromStatic<Initializer>(reader); 841 initializers_.ReadFromStatic<Initializer>(reader);
833 return this; 842 return this;
834 } 843 }
835 844
836 845
837 Procedure* Procedure::ReadFrom(Reader* reader) { 846 Procedure* Procedure::ReadFrom(Reader* reader) {
838 TRACE_READ_OFFSET(); 847 TRACE_READ_OFFSET();
839 Tag tag = reader->ReadTag(); 848 Tag tag = reader->ReadTag();
840 ASSERT(tag == kProcedure); 849 ASSERT(tag == kProcedure);
841 850
842 canonical_name_ = reader->ReadCanonicalNameReference(); 851 reader->ReadDefiningCanonicalNameReference(this);
843 VariableScope<ReaderHelper> parameters(reader->helper()); 852 VariableScope<ReaderHelper> parameters(reader->helper());
844 position_ = reader->ReadPosition(false); 853 position_ = reader->ReadPosition(false);
845 end_position_ = reader->ReadPosition(false); 854 end_position_ = reader->ReadPosition(false);
846 kind_ = static_cast<ProcedureKind>(reader->ReadByte()); 855 kind_ = static_cast<ProcedureKind>(reader->ReadByte());
847 flags_ = reader->ReadFlags(); 856 flags_ = reader->ReadFlags();
848 name_ = Name::ReadFrom(reader); 857 name_ = Name::ReadFrom(reader);
849 source_uri_index_ = reader->ReadUInt(); 858 source_uri_index_ = reader->ReadUInt();
850 reader->set_current_script_id(source_uri_index_); 859 reader->set_current_script_id(source_uri_index_);
851 reader->record_token_position(position_); 860 reader->record_token_position(position_);
852 reader->record_token_position(end_position_); 861 reader->record_token_position(end_position_);
(...skipping 1021 matching lines...) Expand 10 before | Expand all | Expand 10 after
1874 } 1883 }
1875 1884
1876 int libraries = reader->ReadUInt(); 1885 int libraries = reader->ReadUInt();
1877 program->libraries().EnsureInitialized(libraries); 1886 program->libraries().EnsureInitialized(libraries);
1878 for (intptr_t i = 0; i < libraries; i++) { 1887 for (intptr_t i = 0; i < libraries; i++) {
1879 program->libraries().GetOrCreate<Library>(i)->ReadFrom(reader); 1888 program->libraries().GetOrCreate<Library>(i)->ReadFrom(reader);
1880 } 1889 }
1881 1890
1882 program->main_method_reference_ = Reference::ReadMemberFrom(reader); 1891 program->main_method_reference_ = Reference::ReadMemberFrom(reader);
1883 1892
1893 #ifdef DEBUG
1894 for (intptr_t i = 0; i < canonical_names; ++i) {
1895 CanonicalName* name = reader->helper()->GetCanonicalName(i);
1896 if (name->is_referenced() && name->definition() == NULL) {
1897 FATAL("Missing definition for canonical name");
1898 }
1899 }
1900 #endif
1901
1884 return program; 1902 return program;
1885 } 1903 }
1886 1904
1887 1905
1888 FunctionNode* FunctionNode::ReadFrom(Reader* reader) { 1906 FunctionNode* FunctionNode::ReadFrom(Reader* reader) {
1889 TRACE_READ_OFFSET(); 1907 TRACE_READ_OFFSET();
1890 TypeParameterScope<ReaderHelper> scope(reader->helper()); 1908 TypeParameterScope<ReaderHelper> scope(reader->helper());
1891 1909
1892 FunctionNode* function = new FunctionNode(); 1910 FunctionNode* function = new FunctionNode();
1893 function->kernel_offset_ = reader->offset(); // FunctionNode has no tag. 1911 function->kernel_offset_ = reader->offset(); // FunctionNode has no tag.
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1925 1943
1926 kernel::Program* ReadPrecompiledKernelFromBuffer(const uint8_t* buffer, 1944 kernel::Program* ReadPrecompiledKernelFromBuffer(const uint8_t* buffer,
1927 intptr_t buffer_length) { 1945 intptr_t buffer_length) {
1928 kernel::Reader reader(buffer, buffer_length); 1946 kernel::Reader reader(buffer, buffer_length);
1929 return kernel::Program::ReadFrom(&reader); 1947 return kernel::Program::ReadFrom(&reader);
1930 } 1948 }
1931 1949
1932 1950
1933 } // namespace dart 1951 } // namespace dart
1934 #endif // !defined(DART_PRECOMPILED_RUNTIME) 1952 #endif // !defined(DART_PRECOMPILED_RUNTIME)
OLDNEW
« no previous file with comments | « runtime/vm/kernel.cc ('k') | runtime/vm/kernel_reader.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698