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