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

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

Issue 2517953002: Revert "Merge of source position information from kernel-sdk." (Closed)
Patch Set: 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
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
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
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
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
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
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
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
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
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
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
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)
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