| 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 |