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 <map> | 6 #include <map> |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "platform/globals.h" | 9 #include "platform/globals.h" |
10 #include "vm/flags.h" | 10 #include "vm/flags.h" |
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
348 // 11... | 348 // 11... |
349 ASSERT(offset_ + 4 <= size_); | 349 ASSERT(offset_ + 4 <= size_); |
350 uint32_t value = ((byte0 & ~0xc0) << 24) | (buffer_[offset_ + 1] << 16) | | 350 uint32_t value = ((byte0 & ~0xc0) << 24) | (buffer_[offset_ + 1] << 16) | |
351 (buffer_[offset_ + 2] << 8) | | 351 (buffer_[offset_ + 2] << 8) | |
352 (buffer_[offset_ + 3] << 0); | 352 (buffer_[offset_ + 3] << 0); |
353 offset_ += 4; | 353 offset_ += 4; |
354 return value; | 354 return value; |
355 } | 355 } |
356 } | 356 } |
357 | 357 |
358 TokenPosition ReadPosition() { | |
359 intptr_t value = ReadUInt(); | |
360 // Position is saved as unsigned, | |
361 // but actually ranges from -1 and up (thus the -1) | |
362 return TokenPosition(value - 1); | |
363 } | |
364 | |
365 intptr_t ReadListLength() { return ReadUInt(); } | 358 intptr_t ReadListLength() { return ReadUInt(); } |
366 | 359 |
367 uint8_t ReadByte() { return buffer_[offset_++]; } | 360 uint8_t ReadByte() { return buffer_[offset_++]; } |
368 | 361 |
369 bool ReadBool() { return (ReadByte() & 1) == 1; } | 362 bool ReadBool() { return (ReadByte() & 1) == 1; } |
370 | 363 |
371 word ReadFlags() { return ReadByte(); } | 364 word ReadFlags() { return ReadByte(); } |
372 | 365 |
373 Tag ReadTag(uint8_t* payload = NULL) { | 366 Tag ReadTag(uint8_t* payload = NULL) { |
374 uint8_t byte = ReadByte(); | 367 uint8_t byte = ReadByte(); |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
550 void WriteTag(Tag tag, uint8_t payload) { | 543 void WriteTag(Tag tag, uint8_t payload) { |
551 ASSERT((payload & ~kSpecializedPayloadMask) == 0); | 544 ASSERT((payload & ~kSpecializedPayloadMask) == 0); |
552 WriteByte(kSpecializedTagHighBit | static_cast<uint8_t>(tag) | payload); | 545 WriteByte(kSpecializedTagHighBit | static_cast<uint8_t>(tag) | payload); |
553 } | 546 } |
554 | 547 |
555 void WriteBytes(uint8_t* bytes, int length) { | 548 void WriteBytes(uint8_t* bytes, int length) { |
556 out_->WriteBytes(bytes, length); | 549 out_->WriteBytes(bytes, length); |
557 offset_ += length; | 550 offset_ += length; |
558 } | 551 } |
559 | 552 |
560 void WritePosition(TokenPosition position) { | |
561 intptr_t value = position.value() + 1; | |
562 WriteUInt(value); | |
563 } | |
564 | |
565 template <typename T> | 553 template <typename T> |
566 void WriteOptional(T* object) { | 554 void WriteOptional(T* object) { |
567 if (object == NULL) { | 555 if (object == NULL) { |
568 WriteTag(kNothing); | 556 WriteTag(kNothing); |
569 } else { | 557 } else { |
570 WriteTag(kSomething); | 558 WriteTag(kSomething); |
571 object->WriteTo(this); | 559 object->WriteTo(this); |
572 } | 560 } |
573 } | 561 } |
574 | 562 |
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
799 strings_.WriteToStatic<StringImpl>(writer); | 787 strings_.WriteToStatic<StringImpl>(writer); |
800 | 788 |
801 // Build up the "String* -> index" table. | 789 // Build up the "String* -> index" table. |
802 WriterHelper* helper = writer->helper(); | 790 WriterHelper* helper = writer->helper(); |
803 for (int i = 0; i < strings_.length(); i++) { | 791 for (int i = 0; i < strings_.length(); i++) { |
804 helper->strings().Push(strings_[i]); | 792 helper->strings().Push(strings_[i]); |
805 } | 793 } |
806 } | 794 } |
807 | 795 |
808 | 796 |
809 void LineStartingTable::ReadFrom(Reader* reader) { | 797 void LineStartingTable::ReadFrom(Reader* reader, intptr_t length) { |
810 size_ = reader->helper()->program()->source_uri_table().strings().length(); | 798 size_ = length; |
811 values_ = new intptr_t*[size_]; | 799 values_ = new intptr_t*[size_]; |
812 for (intptr_t i = 0; i < size_; ++i) { | 800 for (intptr_t i = 0; i < size_; ++i) { |
813 intptr_t line_count = reader->ReadUInt(); | 801 intptr_t line_count = reader->ReadUInt(); |
814 intptr_t* line_starts = new intptr_t[line_count + 1]; | 802 intptr_t* line_starts = new intptr_t[line_count + 1]; |
815 line_starts[0] = line_count; | 803 line_starts[0] = line_count; |
816 intptr_t previous_line_start = 0; | 804 intptr_t previous_line_start = 0; |
817 for (intptr_t j = 0; j < line_count; ++j) { | 805 for (intptr_t j = 0; j < line_count; ++j) { |
818 intptr_t line_start = reader->ReadUInt() + previous_line_start; | 806 intptr_t lineStart = reader->ReadUInt() + previous_line_start; |
819 line_starts[j + 1] = line_start; | 807 line_starts[j + 1] = lineStart; |
820 previous_line_start = line_start; | 808 previous_line_start = lineStart; |
821 } | 809 } |
822 values_[i] = line_starts; | 810 values_[i] = line_starts; |
823 } | 811 } |
824 } | 812 } |
825 | 813 |
826 | 814 |
827 void LineStartingTable::WriteTo(Writer* writer) { | 815 void LineStartingTable::WriteTo(Writer* writer) { |
828 for (intptr_t i = 0; i < size_; ++i) { | 816 for (intptr_t i = 0; i < size_; ++i) { |
829 intptr_t* line_starts = values_[i]; | 817 intptr_t* line_starts = values_[i]; |
830 intptr_t line_count = line_starts[0]; | 818 intptr_t line_count = line_starts[0]; |
831 writer->WriteUInt(line_count); | 819 writer->WriteUInt(line_count); |
832 | 820 |
833 intptr_t previous_line_start = 0; | 821 intptr_t previous_line_start = 0; |
834 for (intptr_t j = 0; j < line_count; ++j) { | 822 for (intptr_t j = 0; j < line_count; ++j) { |
835 intptr_t line_start = line_starts[j + 1]; | 823 intptr_t line_start = line_starts[j + 1]; |
836 writer->WriteUInt(line_start - previous_line_start); | 824 writer->WriteUInt(line_start - previous_line_start); |
837 previous_line_start = line_start; | 825 previous_line_start = line_start; |
838 } | 826 } |
839 } | 827 } |
840 } | 828 } |
841 | 829 |
842 | 830 |
843 Library* Library::ReadFrom(Reader* reader) { | 831 Library* Library::ReadFrom(Reader* reader) { |
844 TRACE_READ_OFFSET(); | 832 TRACE_READ_OFFSET(); |
845 int flags = reader->ReadFlags(); | 833 int flags = reader->ReadFlags(); |
846 ASSERT(flags == 0); // external libraries not supported | 834 ASSERT(flags == 0); // external libraries not supported |
847 name_ = Reference::ReadStringFrom(reader); | 835 name_ = Reference::ReadStringFrom(reader); |
848 import_uri_ = Reference::ReadStringFrom(reader); | 836 import_uri_ = Reference::ReadStringFrom(reader); |
849 source_uri_index_ = reader->ReadUInt(); | 837 reader->ReadUInt(); |
850 | 838 |
851 int num_classes = reader->ReadUInt(); | 839 int num_classes = reader->ReadUInt(); |
852 classes().EnsureInitialized(num_classes); | 840 classes().EnsureInitialized(num_classes); |
853 for (int i = 0; i < num_classes; i++) { | 841 for (int i = 0; i < num_classes; i++) { |
854 Tag tag = reader->ReadTag(); | 842 Tag tag = reader->ReadTag(); |
855 if (tag == kNormalClass) { | 843 if (tag == kNormalClass) { |
856 NormalClass* klass = classes().GetOrCreate<NormalClass>(i, this); | 844 NormalClass* klass = classes().GetOrCreate<NormalClass>(i, this); |
857 klass->ReadFrom(reader); | 845 klass->ReadFrom(reader); |
858 } else { | 846 } else { |
859 ASSERT(tag == kMixinClass); | 847 ASSERT(tag == kMixinClass); |
860 MixinClass* klass = classes().GetOrCreate<MixinClass>(i, this); | 848 MixinClass* klass = classes().GetOrCreate<MixinClass>(i, this); |
861 klass->ReadFrom(reader); | 849 klass->ReadFrom(reader); |
862 } | 850 } |
863 } | 851 } |
864 | 852 |
865 fields().ReadFrom<Field>(reader, this); | 853 fields().ReadFrom<Field>(reader, this); |
866 procedures().ReadFrom<Procedure>(reader, this); | 854 procedures().ReadFrom<Procedure>(reader, this); |
867 return this; | 855 return this; |
868 } | 856 } |
869 | 857 |
870 | 858 |
871 void Library::WriteTo(Writer* writer) { | 859 void Library::WriteTo(Writer* writer) { |
872 TRACE_WRITE_OFFSET(); | 860 TRACE_WRITE_OFFSET(); |
873 name_->WriteTo(writer); | 861 name_->WriteTo(writer); |
874 import_uri_->WriteTo(writer); | 862 import_uri_->WriteTo(writer); |
875 writer->WriteUInt(source_uri_index_); | 863 writer->WriteUInt(0); |
876 | 864 |
877 writer->WriteUInt(classes_.length()); | 865 writer->WriteUInt(classes_.length()); |
878 for (int i = 0; i < classes_.length(); i++) { | 866 for (int i = 0; i < classes_.length(); i++) { |
879 Class* klass = classes_[i]; | 867 Class* klass = classes_[i]; |
880 if (klass->IsNormalClass()) { | 868 if (klass->IsNormalClass()) { |
881 writer->WriteTag(kNormalClass); | 869 writer->WriteTag(kNormalClass); |
882 NormalClass::Cast(klass)->WriteTo(writer); | 870 NormalClass::Cast(klass)->WriteTo(writer); |
883 } else { | 871 } else { |
884 writer->WriteTag(kMixinClass); | 872 writer->WriteTag(kMixinClass); |
885 MixinClass::Cast(klass)->WriteTo(writer); | 873 MixinClass::Cast(klass)->WriteTo(writer); |
886 } | 874 } |
887 } | 875 } |
888 fields().WriteTo(writer); | 876 fields().WriteTo(writer); |
889 procedures().WriteTo(writer); | 877 procedures().WriteTo(writer); |
890 } | 878 } |
891 | 879 |
892 | 880 |
893 Class* Class::ReadFrom(Reader* reader) { | 881 Class* Class::ReadFrom(Reader* reader) { |
894 TRACE_READ_OFFSET(); | 882 TRACE_READ_OFFSET(); |
895 | 883 |
896 is_abstract_ = reader->ReadBool(); | 884 is_abstract_ = reader->ReadBool(); |
897 name_ = Reference::ReadStringFrom(reader); | 885 name_ = Reference::ReadStringFrom(reader); |
898 source_uri_index_ = reader->ReadUInt(); | 886 reader->ReadUInt(); |
899 annotations_.ReadFromStatic<Expression>(reader); | 887 annotations_.ReadFromStatic<Expression>(reader); |
900 | 888 |
901 return this; | 889 return this; |
902 } | 890 } |
903 | 891 |
904 | 892 |
905 void Class::WriteTo(Writer* writer) { | 893 void Class::WriteTo(Writer* writer) { |
906 TRACE_WRITE_OFFSET(); | 894 TRACE_WRITE_OFFSET(); |
907 writer->WriteBool(is_abstract_); | 895 writer->WriteBool(is_abstract_); |
908 name_->WriteTo(writer); | 896 name_->WriteTo(writer); |
909 writer->WriteUInt(source_uri_index_); | 897 writer->WriteUInt(0); |
910 annotations_.WriteTo(writer); | 898 annotations_.WriteTo(writer); |
911 } | 899 } |
912 | 900 |
913 | 901 |
914 NormalClass* NormalClass::ReadFrom(Reader* reader) { | 902 NormalClass* NormalClass::ReadFrom(Reader* reader) { |
915 TRACE_READ_OFFSET(); | 903 TRACE_READ_OFFSET(); |
916 Class::ReadFrom(reader); | 904 Class::ReadFrom(reader); |
917 TypeParameterScope<ReaderHelper> scope(reader->helper()); | 905 TypeParameterScope<ReaderHelper> scope(reader->helper()); |
918 | 906 |
919 type_parameters_.ReadFrom(reader); | 907 type_parameters_.ReadFrom(reader); |
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1133 int index = writer->helper()->strings().Lookup(string); | 1121 int index = writer->helper()->strings().Lookup(string); |
1134 writer->WriteUInt(index); | 1122 writer->WriteUInt(index); |
1135 } | 1123 } |
1136 | 1124 |
1137 | 1125 |
1138 Field* Field::ReadFrom(Reader* reader) { | 1126 Field* Field::ReadFrom(Reader* reader) { |
1139 TRACE_READ_OFFSET(); | 1127 TRACE_READ_OFFSET(); |
1140 Tag tag = reader->ReadTag(); | 1128 Tag tag = reader->ReadTag(); |
1141 ASSERT(tag == kField); | 1129 ASSERT(tag == kField); |
1142 | 1130 |
1143 position_ = reader->ReadPosition(); | 1131 reader->ReadUInt(); |
1144 flags_ = reader->ReadFlags(); | 1132 flags_ = reader->ReadFlags(); |
1145 name_ = Name::ReadFrom(reader); | 1133 name_ = Name::ReadFrom(reader); |
1146 source_uri_index_ = reader->ReadUInt(); | 1134 reader->ReadUInt(); |
1147 annotations_.ReadFromStatic<Expression>(reader); | 1135 annotations_.ReadFromStatic<Expression>(reader); |
1148 type_ = DartType::ReadFrom(reader); | 1136 type_ = DartType::ReadFrom(reader); |
1149 inferred_value_ = reader->ReadOptional<InferredValue>(); | 1137 inferred_value_ = reader->ReadOptional<InferredValue>(); |
1150 initializer_ = reader->ReadOptional<Expression>(); | 1138 initializer_ = reader->ReadOptional<Expression>(); |
1151 return this; | 1139 return this; |
1152 } | 1140 } |
1153 | 1141 |
1154 | 1142 |
1155 void Field::WriteTo(Writer* writer) { | 1143 void Field::WriteTo(Writer* writer) { |
1156 TRACE_WRITE_OFFSET(); | 1144 TRACE_WRITE_OFFSET(); |
1157 writer->WriteTag(kField); | 1145 writer->WriteTag(kField); |
1158 writer->WritePosition(position_); | 1146 writer->WriteUInt(0); |
1159 writer->WriteFlags(flags_); | 1147 writer->WriteFlags(flags_); |
1160 name_->WriteTo(writer); | 1148 name_->WriteTo(writer); |
1161 writer->WriteUInt(source_uri_index_); | 1149 writer->WriteUInt(0); |
1162 annotations_.WriteTo(writer); | 1150 annotations_.WriteTo(writer); |
1163 type_->WriteTo(writer); | 1151 type_->WriteTo(writer); |
1164 writer->WriteOptional<InferredValue>(inferred_value_); | 1152 writer->WriteOptional<InferredValue>(inferred_value_); |
1165 writer->WriteOptional<Expression>(initializer_); | 1153 writer->WriteOptional<Expression>(initializer_); |
1166 } | 1154 } |
1167 | 1155 |
1168 | 1156 |
1169 Constructor* Constructor::ReadFrom(Reader* reader) { | 1157 Constructor* Constructor::ReadFrom(Reader* reader) { |
1170 TRACE_READ_OFFSET(); | 1158 TRACE_READ_OFFSET(); |
1171 Tag tag = reader->ReadTag(); | 1159 Tag tag = reader->ReadTag(); |
(...skipping 24 matching lines...) Expand all Loading... |
1196 | 1184 |
1197 Procedure* Procedure::ReadFrom(Reader* reader) { | 1185 Procedure* Procedure::ReadFrom(Reader* reader) { |
1198 TRACE_READ_OFFSET(); | 1186 TRACE_READ_OFFSET(); |
1199 Tag tag = reader->ReadTag(); | 1187 Tag tag = reader->ReadTag(); |
1200 ASSERT(tag == kProcedure); | 1188 ASSERT(tag == kProcedure); |
1201 | 1189 |
1202 VariableScope<ReaderHelper> parameters(reader->helper()); | 1190 VariableScope<ReaderHelper> parameters(reader->helper()); |
1203 kind_ = static_cast<ProcedureKind>(reader->ReadByte()); | 1191 kind_ = static_cast<ProcedureKind>(reader->ReadByte()); |
1204 flags_ = reader->ReadFlags(); | 1192 flags_ = reader->ReadFlags(); |
1205 name_ = Name::ReadFrom(reader); | 1193 name_ = Name::ReadFrom(reader); |
1206 source_uri_index_ = reader->ReadUInt(); | 1194 reader->ReadUInt(); |
1207 annotations_.ReadFromStatic<Expression>(reader); | 1195 annotations_.ReadFromStatic<Expression>(reader); |
1208 function_ = reader->ReadOptional<FunctionNode>(); | 1196 function_ = reader->ReadOptional<FunctionNode>(); |
1209 return this; | 1197 return this; |
1210 } | 1198 } |
1211 | 1199 |
1212 | 1200 |
1213 void Procedure::WriteTo(Writer* writer) { | 1201 void Procedure::WriteTo(Writer* writer) { |
1214 TRACE_WRITE_OFFSET(); | 1202 TRACE_WRITE_OFFSET(); |
1215 writer->WriteTag(kProcedure); | 1203 writer->WriteTag(kProcedure); |
1216 | 1204 |
1217 VariableScope<WriterHelper> parameters(writer->helper()); | 1205 VariableScope<WriterHelper> parameters(writer->helper()); |
1218 writer->WriteByte(kind_); | 1206 writer->WriteByte(kind_); |
1219 writer->WriteFlags(flags_); | 1207 writer->WriteFlags(flags_); |
1220 name_->WriteTo(writer); | 1208 name_->WriteTo(writer); |
1221 writer->WriteUInt(source_uri_index_); | 1209 writer->WriteUInt(0); |
1222 annotations_.WriteTo(writer); | 1210 annotations_.WriteTo(writer); |
1223 writer->WriteOptional<FunctionNode>(function_); | 1211 writer->WriteOptional<FunctionNode>(function_); |
1224 } | 1212 } |
1225 | 1213 |
1226 | 1214 |
1227 Initializer* Initializer::ReadFrom(Reader* reader) { | 1215 Initializer* Initializer::ReadFrom(Reader* reader) { |
1228 TRACE_READ_OFFSET(); | 1216 TRACE_READ_OFFSET(); |
1229 Tag tag = reader->ReadTag(); | 1217 Tag tag = reader->ReadTag(); |
1230 switch (tag) { | 1218 switch (tag) { |
1231 case kInvalidInitializer: | 1219 case kInvalidInitializer: |
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1494 writer->WriteTag(kVariableSet); | 1482 writer->WriteTag(kVariableSet); |
1495 writer->WriteUInt(index); | 1483 writer->WriteUInt(index); |
1496 } | 1484 } |
1497 expression_->WriteTo(writer); | 1485 expression_->WriteTo(writer); |
1498 } | 1486 } |
1499 | 1487 |
1500 | 1488 |
1501 PropertyGet* PropertyGet::ReadFrom(Reader* reader) { | 1489 PropertyGet* PropertyGet::ReadFrom(Reader* reader) { |
1502 TRACE_READ_OFFSET(); | 1490 TRACE_READ_OFFSET(); |
1503 PropertyGet* get = new PropertyGet(); | 1491 PropertyGet* get = new PropertyGet(); |
1504 get->position_ = reader->ReadPosition(); | 1492 reader->ReadUInt(); |
1505 get->receiver_ = Expression::ReadFrom(reader); | 1493 get->receiver_ = Expression::ReadFrom(reader); |
1506 get->name_ = Name::ReadFrom(reader); | 1494 get->name_ = Name::ReadFrom(reader); |
1507 get->interfaceTarget_ = Reference::ReadMemberFrom(reader, true); | 1495 get->interfaceTarget_ = Reference::ReadMemberFrom(reader, true); |
1508 return get; | 1496 return get; |
1509 } | 1497 } |
1510 | 1498 |
1511 | 1499 |
1512 void PropertyGet::WriteTo(Writer* writer) { | 1500 void PropertyGet::WriteTo(Writer* writer) { |
1513 TRACE_WRITE_OFFSET(); | 1501 TRACE_WRITE_OFFSET(); |
1514 writer->WriteTag(kPropertyGet); | 1502 writer->WriteTag(kPropertyGet); |
1515 writer->WritePosition(position_); | 1503 writer->WriteUInt(0); |
1516 receiver_->WriteTo(writer); | 1504 receiver_->WriteTo(writer); |
1517 name_->WriteTo(writer); | 1505 name_->WriteTo(writer); |
1518 Reference::WriteMemberTo(writer, interfaceTarget_, true); | 1506 Reference::WriteMemberTo(writer, interfaceTarget_, true); |
1519 } | 1507 } |
1520 | 1508 |
1521 | 1509 |
1522 PropertySet* PropertySet::ReadFrom(Reader* reader) { | 1510 PropertySet* PropertySet::ReadFrom(Reader* reader) { |
1523 TRACE_READ_OFFSET(); | 1511 TRACE_READ_OFFSET(); |
1524 PropertySet* set = new PropertySet(); | 1512 PropertySet* set = new PropertySet(); |
1525 set->position_ = reader->ReadPosition(); | 1513 reader->ReadUInt(); |
1526 set->receiver_ = Expression::ReadFrom(reader); | 1514 set->receiver_ = Expression::ReadFrom(reader); |
1527 set->name_ = Name::ReadFrom(reader); | 1515 set->name_ = Name::ReadFrom(reader); |
1528 set->value_ = Expression::ReadFrom(reader); | 1516 set->value_ = Expression::ReadFrom(reader); |
1529 set->interfaceTarget_ = Reference::ReadMemberFrom(reader, true); | 1517 set->interfaceTarget_ = Reference::ReadMemberFrom(reader, true); |
1530 return set; | 1518 return set; |
1531 } | 1519 } |
1532 | 1520 |
1533 | 1521 |
1534 void PropertySet::WriteTo(Writer* writer) { | 1522 void PropertySet::WriteTo(Writer* writer) { |
1535 TRACE_WRITE_OFFSET(); | 1523 TRACE_WRITE_OFFSET(); |
1536 writer->WriteTag(kPropertySet); | 1524 writer->WriteTag(kPropertySet); |
1537 writer->WritePosition(position_); | 1525 writer->WriteUInt(0); |
1538 receiver_->WriteTo(writer); | 1526 receiver_->WriteTo(writer); |
1539 name_->WriteTo(writer); | 1527 name_->WriteTo(writer); |
1540 value_->WriteTo(writer); | 1528 value_->WriteTo(writer); |
1541 Reference::WriteMemberTo(writer, interfaceTarget_, true); | 1529 Reference::WriteMemberTo(writer, interfaceTarget_, true); |
1542 } | 1530 } |
1543 | 1531 |
1544 | 1532 |
1545 DirectPropertyGet* DirectPropertyGet::ReadFrom(Reader* reader) { | 1533 DirectPropertyGet* DirectPropertyGet::ReadFrom(Reader* reader) { |
1546 TRACE_READ_OFFSET(); | 1534 TRACE_READ_OFFSET(); |
1547 DirectPropertyGet* get = new DirectPropertyGet(); | 1535 DirectPropertyGet* get = new DirectPropertyGet(); |
(...skipping 26 matching lines...) Expand all Loading... |
1574 writer->WriteTag(kDirectPropertySet); | 1562 writer->WriteTag(kDirectPropertySet); |
1575 receiver_->WriteTo(writer); | 1563 receiver_->WriteTo(writer); |
1576 Reference::WriteMemberTo(writer, target_); | 1564 Reference::WriteMemberTo(writer, target_); |
1577 value_->WriteTo(writer); | 1565 value_->WriteTo(writer); |
1578 } | 1566 } |
1579 | 1567 |
1580 | 1568 |
1581 StaticGet* StaticGet::ReadFrom(Reader* reader) { | 1569 StaticGet* StaticGet::ReadFrom(Reader* reader) { |
1582 TRACE_READ_OFFSET(); | 1570 TRACE_READ_OFFSET(); |
1583 StaticGet* get = new StaticGet(); | 1571 StaticGet* get = new StaticGet(); |
1584 get->position_ = reader->ReadPosition(); | 1572 reader->ReadUInt(); |
1585 get->target_ = Reference::ReadMemberFrom(reader); | 1573 get->target_ = Reference::ReadMemberFrom(reader); |
1586 return get; | 1574 return get; |
1587 } | 1575 } |
1588 | 1576 |
1589 | 1577 |
1590 void StaticGet::WriteTo(Writer* writer) { | 1578 void StaticGet::WriteTo(Writer* writer) { |
1591 TRACE_WRITE_OFFSET(); | 1579 TRACE_WRITE_OFFSET(); |
1592 writer->WriteTag(kStaticGet); | 1580 writer->WriteTag(kStaticGet); |
1593 writer->WritePosition(position_); | 1581 writer->WriteUInt(0); |
1594 Reference::WriteMemberTo(writer, target_); | 1582 Reference::WriteMemberTo(writer, target_); |
1595 } | 1583 } |
1596 | 1584 |
1597 | 1585 |
1598 StaticSet* StaticSet::ReadFrom(Reader* reader) { | 1586 StaticSet* StaticSet::ReadFrom(Reader* reader) { |
1599 TRACE_READ_OFFSET(); | 1587 TRACE_READ_OFFSET(); |
1600 StaticSet* set = new StaticSet(); | 1588 StaticSet* set = new StaticSet(); |
1601 set->target_ = Reference::ReadMemberFrom(reader); | 1589 set->target_ = Reference::ReadMemberFrom(reader); |
1602 set->expression_ = Expression::ReadFrom(reader); | 1590 set->expression_ = Expression::ReadFrom(reader); |
1603 return set; | 1591 return set; |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1641 void NamedExpression::WriteTo(Writer* writer) { | 1629 void NamedExpression::WriteTo(Writer* writer) { |
1642 TRACE_WRITE_OFFSET(); | 1630 TRACE_WRITE_OFFSET(); |
1643 name_->WriteTo(writer); | 1631 name_->WriteTo(writer); |
1644 expression_->WriteTo(writer); | 1632 expression_->WriteTo(writer); |
1645 } | 1633 } |
1646 | 1634 |
1647 | 1635 |
1648 MethodInvocation* MethodInvocation::ReadFrom(Reader* reader) { | 1636 MethodInvocation* MethodInvocation::ReadFrom(Reader* reader) { |
1649 TRACE_READ_OFFSET(); | 1637 TRACE_READ_OFFSET(); |
1650 MethodInvocation* invocation = new MethodInvocation(); | 1638 MethodInvocation* invocation = new MethodInvocation(); |
1651 invocation->position_ = reader->ReadPosition(); | 1639 reader->ReadUInt(); |
1652 invocation->receiver_ = Expression::ReadFrom(reader); | 1640 invocation->receiver_ = Expression::ReadFrom(reader); |
1653 invocation->name_ = Name::ReadFrom(reader); | 1641 invocation->name_ = Name::ReadFrom(reader); |
1654 invocation->arguments_ = Arguments::ReadFrom(reader); | 1642 invocation->arguments_ = Arguments::ReadFrom(reader); |
1655 invocation->interfaceTarget_ = Reference::ReadMemberFrom(reader, true); | 1643 invocation->interfaceTarget_ = Reference::ReadMemberFrom(reader, true); |
1656 return invocation; | 1644 return invocation; |
1657 } | 1645 } |
1658 | 1646 |
1659 | 1647 |
1660 void MethodInvocation::WriteTo(Writer* writer) { | 1648 void MethodInvocation::WriteTo(Writer* writer) { |
1661 TRACE_WRITE_OFFSET(); | 1649 TRACE_WRITE_OFFSET(); |
1662 writer->WriteTag(kMethodInvocation); | 1650 writer->WriteTag(kMethodInvocation); |
1663 writer->WritePosition(position_); | 1651 writer->WriteUInt(0); |
1664 receiver_->WriteTo(writer); | 1652 receiver_->WriteTo(writer); |
1665 name_->WriteTo(writer); | 1653 name_->WriteTo(writer); |
1666 arguments_->WriteTo(writer); | 1654 arguments_->WriteTo(writer); |
1667 Reference::WriteMemberTo(writer, interfaceTarget_, true); | 1655 Reference::WriteMemberTo(writer, interfaceTarget_, true); |
1668 } | 1656 } |
1669 | 1657 |
1670 | 1658 |
1671 DirectMethodInvocation* DirectMethodInvocation::ReadFrom(Reader* reader) { | 1659 DirectMethodInvocation* DirectMethodInvocation::ReadFrom(Reader* reader) { |
1672 TRACE_READ_OFFSET(); | 1660 TRACE_READ_OFFSET(); |
1673 DirectMethodInvocation* invocation = new DirectMethodInvocation(); | 1661 DirectMethodInvocation* invocation = new DirectMethodInvocation(); |
1674 invocation->receiver_ = Expression::ReadFrom(reader); | 1662 invocation->receiver_ = Expression::ReadFrom(reader); |
1675 invocation->target_ = Procedure::Cast(Reference::ReadMemberFrom(reader)); | 1663 invocation->target_ = Procedure::Cast(Reference::ReadMemberFrom(reader)); |
1676 invocation->arguments_ = Arguments::ReadFrom(reader); | 1664 invocation->arguments_ = Arguments::ReadFrom(reader); |
1677 return invocation; | 1665 return invocation; |
1678 } | 1666 } |
1679 | 1667 |
1680 | 1668 |
1681 void DirectMethodInvocation::WriteTo(Writer* writer) { | 1669 void DirectMethodInvocation::WriteTo(Writer* writer) { |
1682 TRACE_WRITE_OFFSET(); | 1670 TRACE_WRITE_OFFSET(); |
1683 writer->WriteTag(kDirectMethodInvocation); | 1671 writer->WriteTag(kDirectMethodInvocation); |
1684 receiver_->WriteTo(writer); | 1672 receiver_->WriteTo(writer); |
1685 Reference::WriteMemberTo(writer, target_); | 1673 Reference::WriteMemberTo(writer, target_); |
1686 arguments_->WriteTo(writer); | 1674 arguments_->WriteTo(writer); |
1687 } | 1675 } |
1688 | 1676 |
1689 | 1677 |
1690 StaticInvocation* StaticInvocation::ReadFrom(Reader* reader, bool is_const) { | 1678 StaticInvocation* StaticInvocation::ReadFrom(Reader* reader, bool is_const) { |
1691 TRACE_READ_OFFSET(); | 1679 TRACE_READ_OFFSET(); |
1692 StaticInvocation* invocation = new StaticInvocation(); | 1680 |
1693 invocation->is_const_ = is_const; | 1681 reader->ReadUInt(); |
1694 invocation->position_ = reader->ReadPosition(); | 1682 Member* member = Reference::ReadMemberFrom(reader); |
1695 invocation->procedure_ = Procedure::Cast(Reference::ReadMemberFrom(reader)); | 1683 Arguments* args = Arguments::ReadFrom(reader); |
1696 invocation->arguments_ = Arguments::ReadFrom(reader); | 1684 |
1697 return invocation; | 1685 return new StaticInvocation(Procedure::Cast(member), args, is_const); |
1698 } | 1686 } |
1699 | 1687 |
1700 | 1688 |
1701 void StaticInvocation::WriteTo(Writer* writer) { | 1689 void StaticInvocation::WriteTo(Writer* writer) { |
1702 TRACE_WRITE_OFFSET(); | 1690 TRACE_WRITE_OFFSET(); |
1703 writer->WriteTag(is_const_ ? kConstStaticInvocation : kStaticInvocation); | 1691 writer->WriteTag(is_const_ ? kConstStaticInvocation : kStaticInvocation); |
1704 writer->WritePosition(position_); | 1692 writer->WriteUInt(0); |
1705 Reference::WriteMemberTo(writer, procedure_); | 1693 Reference::WriteMemberTo(writer, procedure_); |
1706 arguments_->WriteTo(writer); | 1694 arguments_->WriteTo(writer); |
1707 } | 1695 } |
1708 | 1696 |
1709 | 1697 |
1710 ConstructorInvocation* ConstructorInvocation::ReadFrom(Reader* reader, | 1698 ConstructorInvocation* ConstructorInvocation::ReadFrom(Reader* reader, |
1711 bool is_const) { | 1699 bool is_const) { |
1712 TRACE_READ_OFFSET(); | 1700 TRACE_READ_OFFSET(); |
1713 ConstructorInvocation* invocation = new ConstructorInvocation(); | 1701 ConstructorInvocation* invocation = new ConstructorInvocation(); |
1714 invocation->is_const_ = is_const; | 1702 invocation->is_const_ = is_const; |
1715 invocation->position_ = reader->ReadPosition(); | 1703 reader->ReadUInt(); |
1716 invocation->target_ = Constructor::Cast(Reference::ReadMemberFrom(reader)); | 1704 invocation->target_ = Constructor::Cast(Reference::ReadMemberFrom(reader)); |
1717 invocation->arguments_ = Arguments::ReadFrom(reader); | 1705 invocation->arguments_ = Arguments::ReadFrom(reader); |
1718 return invocation; | 1706 return invocation; |
1719 } | 1707 } |
1720 | 1708 |
1721 | 1709 |
1722 void ConstructorInvocation::WriteTo(Writer* writer) { | 1710 void ConstructorInvocation::WriteTo(Writer* writer) { |
1723 TRACE_WRITE_OFFSET(); | 1711 TRACE_WRITE_OFFSET(); |
1724 writer->WriteTag(is_const_ ? kConstConstructorInvocation | 1712 writer->WriteTag(is_const_ ? kConstConstructorInvocation |
1725 : kConstructorInvocation); | 1713 : kConstructorInvocation); |
1726 writer->WritePosition(position_); | 1714 writer->WriteUInt(0); |
1727 Reference::WriteMemberTo(writer, target_); | 1715 Reference::WriteMemberTo(writer, target_); |
1728 arguments_->WriteTo(writer); | 1716 arguments_->WriteTo(writer); |
1729 } | 1717 } |
1730 | 1718 |
1731 | 1719 |
1732 Not* Not::ReadFrom(Reader* reader) { | 1720 Not* Not::ReadFrom(Reader* reader) { |
1733 TRACE_READ_OFFSET(); | 1721 TRACE_READ_OFFSET(); |
1734 Not* n = new Not(); | 1722 Not* n = new Not(); |
1735 n->expression_ = Expression::ReadFrom(reader); | 1723 n->expression_ = Expression::ReadFrom(reader); |
1736 return n; | 1724 return n; |
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1979 | 1967 |
1980 void Rethrow::WriteTo(Writer* writer) { | 1968 void Rethrow::WriteTo(Writer* writer) { |
1981 TRACE_WRITE_OFFSET(); | 1969 TRACE_WRITE_OFFSET(); |
1982 writer->WriteTag(kRethrow); | 1970 writer->WriteTag(kRethrow); |
1983 } | 1971 } |
1984 | 1972 |
1985 | 1973 |
1986 Throw* Throw::ReadFrom(Reader* reader) { | 1974 Throw* Throw::ReadFrom(Reader* reader) { |
1987 TRACE_READ_OFFSET(); | 1975 TRACE_READ_OFFSET(); |
1988 Throw* t = new Throw(); | 1976 Throw* t = new Throw(); |
1989 t->position_ = reader->ReadPosition(); | 1977 reader->ReadUInt(); |
1990 t->expression_ = Expression::ReadFrom(reader); | 1978 t->expression_ = Expression::ReadFrom(reader); |
1991 return t; | 1979 return t; |
1992 } | 1980 } |
1993 | 1981 |
1994 | 1982 |
1995 void Throw::WriteTo(Writer* writer) { | 1983 void Throw::WriteTo(Writer* writer) { |
1996 TRACE_WRITE_OFFSET(); | 1984 TRACE_WRITE_OFFSET(); |
1997 writer->WriteTag(kThrow); | 1985 writer->WriteTag(kThrow); |
1998 writer->WritePosition(position_); | 1986 writer->WriteUInt(0); |
1999 expression_->WriteTo(writer); | 1987 expression_->WriteTo(writer); |
2000 } | 1988 } |
2001 | 1989 |
2002 | 1990 |
2003 ListLiteral* ListLiteral::ReadFrom(Reader* reader, bool is_const) { | 1991 ListLiteral* ListLiteral::ReadFrom(Reader* reader, bool is_const) { |
2004 TRACE_READ_OFFSET(); | 1992 TRACE_READ_OFFSET(); |
2005 ListLiteral* literal = new ListLiteral(); | 1993 ListLiteral* literal = new ListLiteral(); |
2006 literal->is_const_ = is_const; | 1994 literal->is_const_ = is_const; |
2007 literal->type_ = DartType::ReadFrom(reader); | 1995 literal->type_ = DartType::ReadFrom(reader); |
2008 literal->expressions_.ReadFromStatic<Expression>(reader); | 1996 literal->expressions_.ReadFromStatic<Expression>(reader); |
(...skipping 789 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2798 | 2786 |
2799 Program* Program::ReadFrom(Reader* reader) { | 2787 Program* Program::ReadFrom(Reader* reader) { |
2800 TRACE_READ_OFFSET(); | 2788 TRACE_READ_OFFSET(); |
2801 uint32_t magic = reader->ReadUInt32(); | 2789 uint32_t magic = reader->ReadUInt32(); |
2802 if (magic != kMagicProgramFile) FATAL("Invalid magic identifier"); | 2790 if (magic != kMagicProgramFile) FATAL("Invalid magic identifier"); |
2803 | 2791 |
2804 Program* program = new Program(); | 2792 Program* program = new Program(); |
2805 reader->helper()->set_program(program); | 2793 reader->helper()->set_program(program); |
2806 | 2794 |
2807 program->string_table_.ReadFrom(reader); | 2795 program->string_table_.ReadFrom(reader); |
2808 program->source_uri_table_.ReadFrom(reader); | 2796 StringTable dummy1; |
2809 program->line_starting_table_.ReadFrom(reader); | 2797 dummy1.ReadFrom(reader); |
| 2798 LineStartingTable dummy2; |
| 2799 dummy2.ReadFrom(reader, dummy1.strings_.length()); |
2810 | 2800 |
2811 int libraries = reader->ReadUInt(); | 2801 int libraries = reader->ReadUInt(); |
2812 program->libraries().EnsureInitialized(libraries); | 2802 program->libraries().EnsureInitialized(libraries); |
2813 for (int i = 0; i < libraries; i++) { | 2803 for (int i = 0; i < libraries; i++) { |
2814 program->libraries().GetOrCreate<Library>(i)->ReadFrom(reader); | 2804 program->libraries().GetOrCreate<Library>(i)->ReadFrom(reader); |
2815 } | 2805 } |
2816 | 2806 |
2817 program->main_method_ = Procedure::Cast(Reference::ReadMemberFrom(reader)); | 2807 program->main_method_ = Procedure::Cast(Reference::ReadMemberFrom(reader)); |
2818 | 2808 |
2819 return program; | 2809 return program; |
2820 } | 2810 } |
2821 | 2811 |
2822 | 2812 |
2823 void Program::WriteTo(Writer* writer) { | 2813 void Program::WriteTo(Writer* writer) { |
2824 TRACE_WRITE_OFFSET(); | 2814 TRACE_WRITE_OFFSET(); |
2825 | 2815 |
2826 writer->helper()->SetProgram(this); | 2816 writer->helper()->SetProgram(this); |
2827 | 2817 |
2828 writer->WriteUInt32(kMagicProgramFile); | 2818 writer->WriteUInt32(kMagicProgramFile); |
2829 | 2819 |
2830 // NOTE: Currently we don't GC strings and we require that all referenced | 2820 // NOTE: Currently we don't GC strings and we require that all referenced |
2831 // strings in nodes are present in [string_table_]. | 2821 // strings in nodes are present in [string_table_]. |
2832 string_table_.WriteTo(writer); | 2822 string_table_.WriteTo(writer); |
2833 source_uri_table_.WriteTo(writer); | 2823 StringTable dummy1; |
2834 line_starting_table_.WriteTo(writer); | 2824 dummy1.WriteTo(writer); |
| 2825 LineStartingTable dummy2; |
| 2826 dummy2.WriteTo(writer); |
2835 | 2827 |
2836 libraries_.WriteTo(writer); | 2828 libraries_.WriteTo(writer); |
2837 Reference::WriteMemberTo(writer, main_method_); | 2829 Reference::WriteMemberTo(writer, main_method_); |
2838 } | 2830 } |
2839 | 2831 |
2840 | 2832 |
2841 FunctionNode* FunctionNode::ReadFrom(Reader* reader) { | 2833 FunctionNode* FunctionNode::ReadFrom(Reader* reader) { |
2842 TRACE_READ_OFFSET(); | 2834 TRACE_READ_OFFSET(); |
2843 TypeParameterScope<ReaderHelper> scope(reader->helper()); | 2835 TypeParameterScope<ReaderHelper> scope(reader->helper()); |
2844 | 2836 |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2904 void WritePrecompiledKernel(ByteWriter* byte_writer, kernel::Program* program) { | 2896 void WritePrecompiledKernel(ByteWriter* byte_writer, kernel::Program* program) { |
2905 ASSERT(byte_writer != NULL); | 2897 ASSERT(byte_writer != NULL); |
2906 | 2898 |
2907 kernel::Writer writer(byte_writer); | 2899 kernel::Writer writer(byte_writer); |
2908 program->WriteTo(&writer); | 2900 program->WriteTo(&writer); |
2909 } | 2901 } |
2910 | 2902 |
2911 | 2903 |
2912 } // namespace dart | 2904 } // namespace dart |
2913 #endif // !defined(DART_PRECOMPILED_RUNTIME) | 2905 #endif // !defined(DART_PRECOMPILED_RUNTIME) |
OLD | NEW |