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