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

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

Issue 2781893004: Remove definitions from Kernel canonical names. (Closed)
Patch Set: Update test expectations. 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
504 intptr_t offset() { return offset_; } 497 intptr_t offset() { return offset_; }
505 498
506 private: 499 private:
507 const uint8_t* buffer_; 500 const uint8_t* buffer_;
508 intptr_t size_; 501 intptr_t size_;
509 intptr_t offset_; 502 intptr_t offset_;
510 ReaderHelper builder_; 503 ReaderHelper builder_;
511 TokenPosition max_position_; 504 TokenPosition max_position_;
512 TokenPosition min_position_; 505 TokenPosition min_position_;
513 intptr_t current_script_id_; 506 intptr_t current_script_id_;
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
680 line_starts_[i] = line_starts; 673 line_starts_[i] = line_starts;
681 } 674 }
682 } 675 }
683 676
684 677
685 Library* Library::ReadFrom(Reader* reader) { 678 Library* Library::ReadFrom(Reader* reader) {
686 TRACE_READ_OFFSET(); 679 TRACE_READ_OFFSET();
687 int flags = reader->ReadFlags(); 680 int flags = reader->ReadFlags();
688 ASSERT(flags == 0); // external libraries not supported 681 ASSERT(flags == 0); // external libraries not supported
689 682
690 CanonicalName* canonical_name = 683 canonical_name_ = reader->ReadCanonicalNameReference();
691 reader->ReadDefiningCanonicalNameReference(this);
692
693 name_ = Reference::ReadStringFrom(reader); 684 name_ = Reference::ReadStringFrom(reader);
694 import_uri_ = canonical_name->name(); 685 import_uri_ = canonical_name_->name();
695 source_uri_index_ = reader->ReadUInt(); 686 source_uri_index_ = reader->ReadUInt();
696 reader->set_current_script_id(source_uri_index_); 687 reader->set_current_script_id(source_uri_index_);
697 688
698 int num_imports = reader->ReadUInt(); 689 int num_imports = reader->ReadUInt();
699 if (num_imports != 0) { 690 if (num_imports != 0) {
700 FATAL("Deferred imports not implemented in VM"); 691 FATAL("Deferred imports not implemented in VM");
701 } 692 }
702 int num_classes = reader->ReadUInt(); 693 int num_classes = reader->ReadUInt();
703 classes().EnsureInitialized(num_classes); 694 classes().EnsureInitialized(num_classes);
704 for (intptr_t i = 0; i < num_classes; i++) { 695 for (intptr_t i = 0; i < num_classes; i++) {
705 Tag tag = reader->ReadTag(); 696 Tag tag = reader->ReadTag();
706 ASSERT(tag == kClass); 697 ASSERT(tag == kClass);
707 NormalClass* klass = classes().GetOrCreate<NormalClass>(i, this); 698 NormalClass* klass = classes().GetOrCreate<NormalClass>(i, this);
708 klass->ReadFrom(reader); 699 klass->ReadFrom(reader);
709 } 700 }
710 701
711 fields().ReadFrom<Field>(reader, this); 702 fields().ReadFrom<Field>(reader, this);
712 procedures().ReadFrom<Procedure>(reader, this); 703 procedures().ReadFrom<Procedure>(reader, this);
713 return this; 704 return this;
714 } 705 }
715 706
716 707
717 Class* Class::ReadFrom(Reader* reader) { 708 Class* Class::ReadFrom(Reader* reader) {
718 TRACE_READ_OFFSET(); 709 TRACE_READ_OFFSET();
719 710
720 reader->ReadDefiningCanonicalNameReference(this); 711 canonical_name_ = reader->ReadCanonicalNameReference();
721 position_ = reader->ReadPosition(false); 712 position_ = reader->ReadPosition(false);
722 is_abstract_ = reader->ReadBool(); 713 is_abstract_ = reader->ReadBool();
723 name_ = Reference::ReadStringFrom(reader); 714 name_ = Reference::ReadStringFrom(reader);
724 source_uri_index_ = reader->ReadUInt(); 715 source_uri_index_ = reader->ReadUInt();
725 reader->set_current_script_id(source_uri_index_); 716 reader->set_current_script_id(source_uri_index_);
726 reader->record_token_position(position_); 717 reader->record_token_position(position_);
727 annotations_.ReadFromStatic<Expression>(reader); 718 annotations_.ReadFromStatic<Expression>(reader);
728 719
729 return this; 720 return this;
730 } 721 }
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
802 return reader->helper()->program()->string_table().strings()[index]; 793 return reader->helper()->program()->string_table().strings()[index];
803 } 794 }
804 795
805 796
806 Field* Field::ReadFrom(Reader* reader) { 797 Field* Field::ReadFrom(Reader* reader) {
807 TRACE_READ_OFFSET(); 798 TRACE_READ_OFFSET();
808 kernel_offset_ = reader->offset(); // Notice the ReadTag() below. 799 kernel_offset_ = reader->offset(); // Notice the ReadTag() below.
809 Tag tag = reader->ReadTag(); 800 Tag tag = reader->ReadTag();
810 ASSERT(tag == kField); 801 ASSERT(tag == kField);
811 802
812 reader->ReadDefiningCanonicalNameReference(this); 803 canonical_name_ = reader->ReadCanonicalNameReference();
813 position_ = reader->ReadPosition(false); 804 position_ = reader->ReadPosition(false);
814 end_position_ = reader->ReadPosition(false); 805 end_position_ = reader->ReadPosition(false);
815 flags_ = reader->ReadFlags(); 806 flags_ = reader->ReadFlags();
816 name_ = Name::ReadFrom(reader); 807 name_ = Name::ReadFrom(reader);
817 source_uri_index_ = reader->ReadUInt(); 808 source_uri_index_ = reader->ReadUInt();
818 reader->set_current_script_id(source_uri_index_); 809 reader->set_current_script_id(source_uri_index_);
819 reader->record_token_position(position_); 810 reader->record_token_position(position_);
820 reader->record_token_position(end_position_); 811 reader->record_token_position(end_position_);
821 annotations_.ReadFromStatic<Expression>(reader); 812 annotations_.ReadFromStatic<Expression>(reader);
822 type_ = DartType::ReadFrom(reader); 813 type_ = DartType::ReadFrom(reader);
823 initializer_ = reader->ReadOptional<Expression>(); 814 initializer_ = reader->ReadOptional<Expression>();
824 return this; 815 return this;
825 } 816 }
826 817
827 818
828 Constructor* Constructor::ReadFrom(Reader* reader) { 819 Constructor* Constructor::ReadFrom(Reader* reader) {
829 TRACE_READ_OFFSET(); 820 TRACE_READ_OFFSET();
830 Tag tag = reader->ReadTag(); 821 Tag tag = reader->ReadTag();
831 ASSERT(tag == kConstructor); 822 ASSERT(tag == kConstructor);
832 823
833 reader->ReadDefiningCanonicalNameReference(this); 824 canonical_name_ = reader->ReadCanonicalNameReference();
834 VariableScope<ReaderHelper> parameters(reader->helper()); 825 VariableScope<ReaderHelper> parameters(reader->helper());
835 position_ = reader->ReadPosition(); 826 position_ = reader->ReadPosition();
836 end_position_ = reader->ReadPosition(); 827 end_position_ = reader->ReadPosition();
837 flags_ = reader->ReadFlags(); 828 flags_ = reader->ReadFlags();
838 name_ = Name::ReadFrom(reader); 829 name_ = Name::ReadFrom(reader);
839 annotations_.ReadFromStatic<Expression>(reader); 830 annotations_.ReadFromStatic<Expression>(reader);
840 function_ = FunctionNode::ReadFrom(reader); 831 function_ = FunctionNode::ReadFrom(reader);
841 initializers_.ReadFromStatic<Initializer>(reader); 832 initializers_.ReadFromStatic<Initializer>(reader);
842 return this; 833 return this;
843 } 834 }
844 835
845 836
846 Procedure* Procedure::ReadFrom(Reader* reader) { 837 Procedure* Procedure::ReadFrom(Reader* reader) {
847 TRACE_READ_OFFSET(); 838 TRACE_READ_OFFSET();
848 Tag tag = reader->ReadTag(); 839 Tag tag = reader->ReadTag();
849 ASSERT(tag == kProcedure); 840 ASSERT(tag == kProcedure);
850 841
851 reader->ReadDefiningCanonicalNameReference(this); 842 canonical_name_ = reader->ReadCanonicalNameReference();
852 VariableScope<ReaderHelper> parameters(reader->helper()); 843 VariableScope<ReaderHelper> parameters(reader->helper());
853 position_ = reader->ReadPosition(false); 844 position_ = reader->ReadPosition(false);
854 end_position_ = reader->ReadPosition(false); 845 end_position_ = reader->ReadPosition(false);
855 kind_ = static_cast<ProcedureKind>(reader->ReadByte()); 846 kind_ = static_cast<ProcedureKind>(reader->ReadByte());
856 flags_ = reader->ReadFlags(); 847 flags_ = reader->ReadFlags();
857 name_ = Name::ReadFrom(reader); 848 name_ = Name::ReadFrom(reader);
858 source_uri_index_ = reader->ReadUInt(); 849 source_uri_index_ = reader->ReadUInt();
859 reader->set_current_script_id(source_uri_index_); 850 reader->set_current_script_id(source_uri_index_);
860 reader->record_token_position(position_); 851 reader->record_token_position(position_);
861 reader->record_token_position(end_position_); 852 reader->record_token_position(end_position_);
(...skipping 1021 matching lines...) Expand 10 before | Expand all | Expand 10 after
1883 } 1874 }
1884 1875
1885 int libraries = reader->ReadUInt(); 1876 int libraries = reader->ReadUInt();
1886 program->libraries().EnsureInitialized(libraries); 1877 program->libraries().EnsureInitialized(libraries);
1887 for (intptr_t i = 0; i < libraries; i++) { 1878 for (intptr_t i = 0; i < libraries; i++) {
1888 program->libraries().GetOrCreate<Library>(i)->ReadFrom(reader); 1879 program->libraries().GetOrCreate<Library>(i)->ReadFrom(reader);
1889 } 1880 }
1890 1881
1891 program->main_method_reference_ = Reference::ReadMemberFrom(reader); 1882 program->main_method_reference_ = Reference::ReadMemberFrom(reader);
1892 1883
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
1902 return program; 1884 return program;
1903 } 1885 }
1904 1886
1905 1887
1906 FunctionNode* FunctionNode::ReadFrom(Reader* reader) { 1888 FunctionNode* FunctionNode::ReadFrom(Reader* reader) {
1907 TRACE_READ_OFFSET(); 1889 TRACE_READ_OFFSET();
1908 TypeParameterScope<ReaderHelper> scope(reader->helper()); 1890 TypeParameterScope<ReaderHelper> scope(reader->helper());
1909 1891
1910 FunctionNode* function = new FunctionNode(); 1892 FunctionNode* function = new FunctionNode();
1911 function->kernel_offset_ = reader->offset(); // FunctionNode has no tag. 1893 function->kernel_offset_ = reader->offset(); // FunctionNode has no tag.
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1943 1925
1944 kernel::Program* ReadPrecompiledKernelFromBuffer(const uint8_t* buffer, 1926 kernel::Program* ReadPrecompiledKernelFromBuffer(const uint8_t* buffer,
1945 intptr_t buffer_length) { 1927 intptr_t buffer_length) {
1946 kernel::Reader reader(buffer, buffer_length); 1928 kernel::Reader reader(buffer, buffer_length);
1947 return kernel::Program::ReadFrom(&reader); 1929 return kernel::Program::ReadFrom(&reader);
1948 } 1930 }
1949 1931
1950 1932
1951 } // namespace dart 1933 } // namespace dart
1952 #endif // !defined(DART_PRECOMPILED_RUNTIME) 1934 #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