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