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

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

Issue 2512653002: Merge of source position information from kernel-sdk. (Closed)
Patch Set: Changed how GetTokenLocation was called back to original to fix failing failing tests. Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/vm/kernel.h ('k') | runtime/vm/kernel_reader.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 #if !defined(DART_PRECOMPILED_RUNTIME) 4 #if !defined(DART_PRECOMPILED_RUNTIME)
5 5
6 #include <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
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
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
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
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
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
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
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
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
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
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
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)
OLDNEW
« no previous file with comments | « runtime/vm/kernel.h ('k') | runtime/vm/kernel_reader.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698