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 "vm/kernel_binary.h" | 6 #include "vm/kernel_binary.h" |
7 #include "platform/globals.h" | 7 #include "platform/globals.h" |
8 #include "vm/flags.h" | 8 #include "vm/flags.h" |
9 #include "vm/growable_array.h" | 9 #include "vm/growable_array.h" |
10 #include "vm/kernel.h" | 10 #include "vm/kernel.h" |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
89 | 89 |
90 // Read all [TypeParameter]s and their bounds. | 90 // Read all [TypeParameter]s and their bounds. |
91 for (intptr_t i = 0; i < length; i++) { | 91 for (intptr_t i = 0; i < length; i++) { |
92 (*this)[i]->ReadFrom(reader); | 92 (*this)[i]->ReadFrom(reader); |
93 } | 93 } |
94 } | 94 } |
95 | 95 |
96 | 96 |
97 NamedParameter* NamedParameter::ReadFrom(Reader* reader) { | 97 NamedParameter* NamedParameter::ReadFrom(Reader* reader) { |
98 TRACE_READ_OFFSET(); | 98 TRACE_READ_OFFSET(); |
99 intptr_t name_index = reader->ReadUInt(); | 99 StringIndex name_index(reader->ReadUInt()); |
100 DartType* type = DartType::ReadFrom(reader); | 100 DartType* type = DartType::ReadFrom(reader); |
101 return new NamedParameter(name_index, type); | 101 return new NamedParameter(name_index, type); |
102 } | 102 } |
103 | 103 |
104 | 104 |
105 template <typename B, typename S> | 105 template <typename B, typename S> |
106 class DowncastReader { | 106 class DowncastReader { |
107 public: | 107 public: |
108 static S* ReadFrom(Reader* reader) { | 108 static S* ReadFrom(Reader* reader) { |
109 TRACE_READ_OFFSET(); | 109 TRACE_READ_OFFSET(); |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
169 | 169 |
170 | 170 |
171 Library* Library::ReadFrom(Reader* reader) { | 171 Library* Library::ReadFrom(Reader* reader) { |
172 TRACE_READ_OFFSET(); | 172 TRACE_READ_OFFSET(); |
173 int flags = reader->ReadFlags(); | 173 int flags = reader->ReadFlags(); |
174 ASSERT(flags == 0); // external libraries not supported | 174 ASSERT(flags == 0); // external libraries not supported |
175 kernel_data_ = reader->buffer(); | 175 kernel_data_ = reader->buffer(); |
176 kernel_data_size_ = reader->size(); | 176 kernel_data_size_ = reader->size(); |
177 | 177 |
178 canonical_name_ = reader->ReadCanonicalNameReference(); | 178 canonical_name_ = reader->ReadCanonicalNameReference(); |
179 name_index_ = reader->ReadUInt(); | 179 name_index_ = StringIndex(reader->ReadUInt()); |
180 import_uri_index_ = reader->CanonicalNameString(canonical_name_); | 180 import_uri_index_ = reader->CanonicalNameString(canonical_name_); |
181 source_uri_index_ = reader->ReadUInt(); | 181 source_uri_index_ = reader->ReadUInt(); |
182 reader->set_current_script_id(source_uri_index_); | 182 reader->set_current_script_id(source_uri_index_); |
183 | 183 |
184 int num_imports = reader->ReadUInt(); | 184 int num_imports = reader->ReadUInt(); |
185 if (num_imports != 0) { | 185 if (num_imports != 0) { |
186 FATAL("Deferred imports not implemented in VM"); | 186 FATAL("Deferred imports not implemented in VM"); |
187 } | 187 } |
188 int num_typedefs = reader->ReadUInt(); | 188 int num_typedefs = reader->ReadUInt(); |
189 typedefs().EnsureInitialized(num_typedefs); | 189 typedefs().EnsureInitialized(num_typedefs); |
(...skipping 13 matching lines...) Expand all Loading... |
203 procedures().ReadFrom<Procedure>(reader, this); | 203 procedures().ReadFrom<Procedure>(reader, this); |
204 return this; | 204 return this; |
205 } | 205 } |
206 | 206 |
207 | 207 |
208 Typedef* Typedef::ReadFrom(Reader* reader) { | 208 Typedef* Typedef::ReadFrom(Reader* reader) { |
209 TRACE_READ_OFFSET(); | 209 TRACE_READ_OFFSET(); |
210 | 210 |
211 canonical_name_ = reader->ReadCanonicalNameReference(); | 211 canonical_name_ = reader->ReadCanonicalNameReference(); |
212 position_ = reader->ReadPosition(false); | 212 position_ = reader->ReadPosition(false); |
213 name_index_ = reader->ReadUInt(); | 213 name_index_ = StringIndex(reader->ReadUInt()); |
214 source_uri_index_ = reader->ReadUInt(); | 214 source_uri_index_ = reader->ReadUInt(); |
215 type_parameters_.ReadFrom(reader); | 215 type_parameters_.ReadFrom(reader); |
216 type_ = DartType::ReadFrom(reader); | 216 type_ = DartType::ReadFrom(reader); |
217 | 217 |
218 return this; | 218 return this; |
219 } | 219 } |
220 | 220 |
221 | 221 |
222 Class* Class::ReadFrom(Reader* reader) { | 222 Class* Class::ReadFrom(Reader* reader) { |
223 TRACE_READ_OFFSET(); | 223 TRACE_READ_OFFSET(); |
224 | 224 |
225 canonical_name_ = reader->ReadCanonicalNameReference(); | 225 canonical_name_ = reader->ReadCanonicalNameReference(); |
226 position_ = reader->ReadPosition(false); | 226 position_ = reader->ReadPosition(false); |
227 is_abstract_ = reader->ReadBool(); | 227 is_abstract_ = reader->ReadBool(); |
228 name_index_ = reader->ReadUInt(); | 228 name_index_ = StringIndex(reader->ReadUInt()); |
229 source_uri_index_ = reader->ReadUInt(); | 229 source_uri_index_ = reader->ReadUInt(); |
230 reader->set_current_script_id(source_uri_index_); | 230 reader->set_current_script_id(source_uri_index_); |
231 reader->record_token_position(position_); | 231 reader->record_token_position(position_); |
232 annotations_.ReadFromStatic<Expression>(reader); | 232 annotations_.ReadFromStatic<Expression>(reader); |
233 | 233 |
234 return this; | 234 return this; |
235 } | 235 } |
236 | 236 |
237 | 237 |
238 NormalClass* NormalClass::ReadFrom(Reader* reader) { | 238 NormalClass* NormalClass::ReadFrom(Reader* reader) { |
(...skipping 24 matching lines...) Expand all Loading... |
263 type_parameters_.ReadFrom(reader); | 263 type_parameters_.ReadFrom(reader); |
264 first_ = InterfaceType::Cast(DartType::ReadFrom(reader)); | 264 first_ = InterfaceType::Cast(DartType::ReadFrom(reader)); |
265 second_ = InterfaceType::Cast(DartType::ReadFrom(reader)); | 265 second_ = InterfaceType::Cast(DartType::ReadFrom(reader)); |
266 implemented_classes_.ReadFromStatic<DowncastReader<DartType, InterfaceType> >( | 266 implemented_classes_.ReadFromStatic<DowncastReader<DartType, InterfaceType> >( |
267 reader); | 267 reader); |
268 constructors_.ReadFrom<Constructor>(reader, this); | 268 constructors_.ReadFrom<Constructor>(reader, this); |
269 return this; | 269 return this; |
270 } | 270 } |
271 | 271 |
272 | 272 |
273 intptr_t Reference::ReadMemberFrom(Reader* reader, bool allow_null) { | 273 NameIndex Reference::ReadMemberFrom(Reader* reader, bool allow_null) { |
274 TRACE_READ_OFFSET(); | 274 TRACE_READ_OFFSET(); |
275 intptr_t canonical_name = reader->ReadCanonicalNameReference(); | 275 NameIndex canonical_name = reader->ReadCanonicalNameReference(); |
276 if ((canonical_name == -1) && !allow_null) { | 276 if ((canonical_name == -1) && !allow_null) { |
277 FATAL("Expected a valid member reference, but got `null`"); | 277 FATAL("Expected a valid member reference, but got `null`"); |
278 } | 278 } |
279 return canonical_name; | 279 return canonical_name; |
280 } | 280 } |
281 | 281 |
282 | 282 |
283 intptr_t Reference::ReadClassFrom(Reader* reader, bool allow_null) { | 283 NameIndex Reference::ReadClassFrom(Reader* reader, bool allow_null) { |
284 TRACE_READ_OFFSET(); | 284 TRACE_READ_OFFSET(); |
285 intptr_t canonical_name = reader->ReadCanonicalNameReference(); | 285 NameIndex canonical_name = reader->ReadCanonicalNameReference(); |
286 if ((canonical_name == -1) && !allow_null) { | 286 if ((canonical_name == -1) && !allow_null) { |
287 FATAL("Expected a valid class reference, but got `null`"); | 287 FATAL("Expected a valid class reference, but got `null`"); |
288 } | 288 } |
289 return canonical_name; | 289 return canonical_name; |
290 } | 290 } |
291 | 291 |
292 | 292 |
293 intptr_t Reference::ReadTypedefFrom(Reader* reader) { | 293 NameIndex Reference::ReadTypedefFrom(Reader* reader) { |
294 TRACE_READ_OFFSET(); | 294 TRACE_READ_OFFSET(); |
295 intptr_t canonical_name = reader->ReadCanonicalNameReference(); | 295 NameIndex canonical_name = reader->ReadCanonicalNameReference(); |
296 if (canonical_name == -1) { | 296 if (canonical_name == -1) { |
297 FATAL("Expected a valid typedef reference, but got `null`"); | 297 FATAL("Expected a valid typedef reference, but got `null`"); |
298 } | 298 } |
299 return canonical_name; | 299 return canonical_name; |
300 } | 300 } |
301 | 301 |
302 | 302 |
303 Field* Field::ReadFrom(Reader* reader) { | 303 Field* Field::ReadFrom(Reader* reader) { |
304 TRACE_READ_OFFSET(); | 304 TRACE_READ_OFFSET(); |
305 kernel_offset_ = reader->offset(); // Notice the ReadTag() below. | 305 kernel_offset_ = reader->offset(); // Notice the ReadTag() below. |
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
660 Arguments* arguments = new Arguments(); | 660 Arguments* arguments = new Arguments(); |
661 arguments->types().ReadFromStatic<DartType>(reader); | 661 arguments->types().ReadFromStatic<DartType>(reader); |
662 arguments->positional().ReadFromStatic<Expression>(reader); | 662 arguments->positional().ReadFromStatic<Expression>(reader); |
663 arguments->named().ReadFromStatic<NamedExpression>(reader); | 663 arguments->named().ReadFromStatic<NamedExpression>(reader); |
664 return arguments; | 664 return arguments; |
665 } | 665 } |
666 | 666 |
667 | 667 |
668 NamedExpression* NamedExpression::ReadFrom(Reader* reader) { | 668 NamedExpression* NamedExpression::ReadFrom(Reader* reader) { |
669 TRACE_READ_OFFSET(); | 669 TRACE_READ_OFFSET(); |
670 intptr_t name_index = reader->ReadUInt(); | 670 StringIndex name_index(reader->ReadUInt()); |
671 Expression* expression = Expression::ReadFrom(reader); | 671 Expression* expression = Expression::ReadFrom(reader); |
672 return new NamedExpression(name_index, expression); | 672 return new NamedExpression(name_index, expression); |
673 } | 673 } |
674 | 674 |
675 | 675 |
676 MethodInvocation* MethodInvocation::ReadFrom(Reader* reader) { | 676 MethodInvocation* MethodInvocation::ReadFrom(Reader* reader) { |
677 TRACE_READ_OFFSET(); | 677 TRACE_READ_OFFSET(); |
678 MethodInvocation* invocation = new MethodInvocation(); | 678 MethodInvocation* invocation = new MethodInvocation(); |
679 invocation->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 679 invocation->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
680 invocation->position_ = reader->ReadPosition(); | 680 invocation->position_ = reader->ReadPosition(); |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
783 expr->position_ = reader->ReadPosition(); | 783 expr->position_ = reader->ReadPosition(); |
784 expr->operand_ = Expression::ReadFrom(reader); | 784 expr->operand_ = Expression::ReadFrom(reader); |
785 expr->type_ = DartType::ReadFrom(reader); | 785 expr->type_ = DartType::ReadFrom(reader); |
786 return expr; | 786 return expr; |
787 } | 787 } |
788 | 788 |
789 | 789 |
790 StringLiteral* StringLiteral::ReadFrom(Reader* reader) { | 790 StringLiteral* StringLiteral::ReadFrom(Reader* reader) { |
791 TRACE_READ_OFFSET(); | 791 TRACE_READ_OFFSET(); |
792 intptr_t offset = reader->offset() - 1; // -1 to include tag byte. | 792 intptr_t offset = reader->offset() - 1; // -1 to include tag byte. |
793 StringLiteral* lit = new StringLiteral(reader->ReadUInt()); | 793 StringLiteral* lit = new StringLiteral(StringIndex(reader->ReadUInt())); |
794 lit->kernel_offset_ = offset; | 794 lit->kernel_offset_ = offset; |
795 return lit; | 795 return lit; |
796 } | 796 } |
797 | 797 |
798 | 798 |
799 BigintLiteral* BigintLiteral::ReadFrom(Reader* reader) { | 799 BigintLiteral* BigintLiteral::ReadFrom(Reader* reader) { |
800 TRACE_READ_OFFSET(); | 800 TRACE_READ_OFFSET(); |
801 intptr_t offset = reader->offset() - 1; // -1 to include tag byte. | 801 intptr_t offset = reader->offset() - 1; // -1 to include tag byte. |
802 BigintLiteral* lit = new BigintLiteral(reader->ReadUInt()); | 802 BigintLiteral* lit = new BigintLiteral(StringIndex(reader->ReadUInt())); |
803 lit->kernel_offset_ = offset; | 803 lit->kernel_offset_ = offset; |
804 return lit; | 804 return lit; |
805 } | 805 } |
806 | 806 |
807 | 807 |
808 IntLiteral* IntLiteral::ReadFrom(Reader* reader, bool is_negative) { | 808 IntLiteral* IntLiteral::ReadFrom(Reader* reader, bool is_negative) { |
809 TRACE_READ_OFFSET(); | 809 TRACE_READ_OFFSET(); |
810 IntLiteral* literal = new IntLiteral(); | 810 IntLiteral* literal = new IntLiteral(); |
811 literal->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 811 literal->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
812 literal->value_ = is_negative ? -static_cast<int64_t>(reader->ReadUInt()) | 812 literal->value_ = is_negative ? -static_cast<int64_t>(reader->ReadUInt()) |
813 : reader->ReadUInt(); | 813 : reader->ReadUInt(); |
814 return literal; | 814 return literal; |
815 } | 815 } |
816 | 816 |
817 | 817 |
818 IntLiteral* IntLiteral::ReadFrom(Reader* reader, uint8_t payload) { | 818 IntLiteral* IntLiteral::ReadFrom(Reader* reader, uint8_t payload) { |
819 TRACE_READ_OFFSET(); | 819 TRACE_READ_OFFSET(); |
820 IntLiteral* literal = new IntLiteral(); | 820 IntLiteral* literal = new IntLiteral(); |
821 literal->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 821 literal->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
822 literal->value_ = static_cast<int32_t>(payload) - SpecializedIntLiteralBias; | 822 literal->value_ = static_cast<int32_t>(payload) - SpecializedIntLiteralBias; |
823 return literal; | 823 return literal; |
824 } | 824 } |
825 | 825 |
826 | 826 |
827 DoubleLiteral* DoubleLiteral::ReadFrom(Reader* reader) { | 827 DoubleLiteral* DoubleLiteral::ReadFrom(Reader* reader) { |
828 TRACE_READ_OFFSET(); | 828 TRACE_READ_OFFSET(); |
829 DoubleLiteral* literal = new DoubleLiteral(); | 829 DoubleLiteral* literal = new DoubleLiteral(); |
830 literal->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 830 literal->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
831 literal->value_index_ = reader->ReadUInt(); | 831 literal->value_index_ = StringIndex(reader->ReadUInt()); |
832 return literal; | 832 return literal; |
833 } | 833 } |
834 | 834 |
835 | 835 |
836 BoolLiteral* BoolLiteral::ReadFrom(Reader* reader, bool value) { | 836 BoolLiteral* BoolLiteral::ReadFrom(Reader* reader, bool value) { |
837 TRACE_READ_OFFSET(); | 837 TRACE_READ_OFFSET(); |
838 BoolLiteral* lit = new BoolLiteral(); | 838 BoolLiteral* lit = new BoolLiteral(); |
839 lit->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 839 lit->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
840 lit->value_ = value; | 840 lit->value_ = value; |
841 return lit; | 841 return lit; |
842 } | 842 } |
843 | 843 |
844 | 844 |
845 NullLiteral* NullLiteral::ReadFrom(Reader* reader) { | 845 NullLiteral* NullLiteral::ReadFrom(Reader* reader) { |
846 TRACE_READ_OFFSET(); | 846 TRACE_READ_OFFSET(); |
847 NullLiteral* lit = new NullLiteral(); | 847 NullLiteral* lit = new NullLiteral(); |
848 lit->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 848 lit->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
849 return lit; | 849 return lit; |
850 } | 850 } |
851 | 851 |
852 | 852 |
853 SymbolLiteral* SymbolLiteral::ReadFrom(Reader* reader) { | 853 SymbolLiteral* SymbolLiteral::ReadFrom(Reader* reader) { |
854 TRACE_READ_OFFSET(); | 854 TRACE_READ_OFFSET(); |
855 SymbolLiteral* lit = new SymbolLiteral(); | 855 SymbolLiteral* lit = new SymbolLiteral(); |
856 lit->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 856 lit->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
857 lit->value_index_ = reader->ReadUInt(); | 857 lit->value_index_ = StringIndex(reader->ReadUInt()); |
858 return lit; | 858 return lit; |
859 } | 859 } |
860 | 860 |
861 | 861 |
862 TypeLiteral* TypeLiteral::ReadFrom(Reader* reader) { | 862 TypeLiteral* TypeLiteral::ReadFrom(Reader* reader) { |
863 TRACE_READ_OFFSET(); | 863 TRACE_READ_OFFSET(); |
864 TypeLiteral* literal = new TypeLiteral(); | 864 TypeLiteral* literal = new TypeLiteral(); |
865 literal->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 865 literal->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
866 literal->type_ = DartType::ReadFrom(reader); | 866 literal->type_ = DartType::ReadFrom(reader); |
867 return literal; | 867 return literal; |
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1325 bool read_tag) { | 1325 bool read_tag) { |
1326 TRACE_READ_OFFSET(); | 1326 TRACE_READ_OFFSET(); |
1327 PositionScope scope(reader); | 1327 PositionScope scope(reader); |
1328 | 1328 |
1329 VariableDeclaration* decl = new VariableDeclaration(); | 1329 VariableDeclaration* decl = new VariableDeclaration(); |
1330 // -1 or -0 depending on whether there's a tag or not. | 1330 // -1 or -0 depending on whether there's a tag or not. |
1331 decl->kernel_offset_ = reader->offset() - (read_tag ? 1 : 0); | 1331 decl->kernel_offset_ = reader->offset() - (read_tag ? 1 : 0); |
1332 decl->position_ = reader->ReadPosition(); | 1332 decl->position_ = reader->ReadPosition(); |
1333 decl->equals_position_ = reader->ReadPosition(); | 1333 decl->equals_position_ = reader->ReadPosition(); |
1334 decl->flags_ = reader->ReadFlags(); | 1334 decl->flags_ = reader->ReadFlags(); |
1335 decl->name_index_ = reader->ReadUInt(); | 1335 decl->name_index_ = StringIndex(reader->ReadUInt()); |
1336 decl->type_ = DartType::ReadFrom(reader); | 1336 decl->type_ = DartType::ReadFrom(reader); |
1337 decl->initializer_ = reader->ReadOptional<Expression>(); | 1337 decl->initializer_ = reader->ReadOptional<Expression>(); |
1338 | 1338 |
1339 // Go to next token position so it ends *after* the last potentially | 1339 // Go to next token position so it ends *after* the last potentially |
1340 // debuggable position in the initializer. | 1340 // debuggable position in the initializer. |
1341 TokenPosition position = reader->max_position(); | 1341 TokenPosition position = reader->max_position(); |
1342 if (position.IsReal()) position.Next(); | 1342 if (position.IsReal()) position.Next(); |
1343 decl->end_position_ = position; | 1343 decl->end_position_ = position; |
1344 reader->helper()->variables().Push(decl); | 1344 reader->helper()->variables().Push(decl); |
1345 | 1345 |
1346 return decl; | 1346 return decl; |
1347 } | 1347 } |
1348 | 1348 |
1349 | 1349 |
1350 FunctionDeclaration* FunctionDeclaration::ReadFrom(Reader* reader) { | 1350 FunctionDeclaration* FunctionDeclaration::ReadFrom(Reader* reader) { |
1351 TRACE_READ_OFFSET(); | 1351 TRACE_READ_OFFSET(); |
1352 FunctionDeclaration* decl = new FunctionDeclaration(); | 1352 FunctionDeclaration* decl = new FunctionDeclaration(); |
1353 decl->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 1353 decl->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
1354 decl->position_ = reader->ReadPosition(); | 1354 decl->position_ = reader->ReadPosition(); |
1355 decl->variable_ = VariableDeclaration::ReadFromImpl(reader, false); | 1355 decl->variable_ = VariableDeclaration::ReadFromImpl(reader, false); |
1356 VariableScope<ReaderHelper> parameters(reader->helper()); | 1356 VariableScope<ReaderHelper> parameters(reader->helper()); |
1357 decl->function_ = FunctionNode::ReadFrom(reader); | 1357 decl->function_ = FunctionNode::ReadFrom(reader); |
1358 return decl; | 1358 return decl; |
1359 } | 1359 } |
1360 | 1360 |
1361 | 1361 |
1362 Name* Name::ReadFrom(Reader* reader) { | 1362 Name* Name::ReadFrom(Reader* reader) { |
1363 intptr_t name_index = reader->ReadUInt(); | 1363 StringIndex name_index(reader->ReadUInt()); |
1364 if ((reader->StringLength(name_index) >= 1) && | 1364 if ((reader->StringLength(name_index) >= 1) && |
1365 (reader->CharacterAt(name_index, 0) == '_')) { | 1365 (reader->CharacterAt(name_index, 0) == '_')) { |
1366 intptr_t library_reference = reader->ReadCanonicalNameReference(); | 1366 intptr_t library_reference = reader->ReadCanonicalNameReference(); |
1367 return new Name(name_index, library_reference); | 1367 return new Name(name_index, library_reference); |
1368 } else { | 1368 } else { |
1369 return new Name(name_index, NULL); | 1369 return new Name(name_index, NULL); |
1370 } | 1370 } |
1371 } | 1371 } |
1372 | 1372 |
1373 | 1373 |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1416 | 1416 |
1417 | 1417 |
1418 VoidType* VoidType::ReadFrom(Reader* reader) { | 1418 VoidType* VoidType::ReadFrom(Reader* reader) { |
1419 TRACE_READ_OFFSET(); | 1419 TRACE_READ_OFFSET(); |
1420 return new VoidType(); | 1420 return new VoidType(); |
1421 } | 1421 } |
1422 | 1422 |
1423 | 1423 |
1424 InterfaceType* InterfaceType::ReadFrom(Reader* reader) { | 1424 InterfaceType* InterfaceType::ReadFrom(Reader* reader) { |
1425 TRACE_READ_OFFSET(); | 1425 TRACE_READ_OFFSET(); |
1426 intptr_t klass_name = Reference::ReadClassFrom(reader); | 1426 NameIndex klass_name = Reference::ReadClassFrom(reader); |
1427 InterfaceType* type = new InterfaceType(klass_name); | 1427 InterfaceType* type = new InterfaceType(klass_name); |
1428 type->type_arguments().ReadFromStatic<DartType>(reader); | 1428 type->type_arguments().ReadFromStatic<DartType>(reader); |
1429 return type; | 1429 return type; |
1430 } | 1430 } |
1431 | 1431 |
1432 | 1432 |
1433 InterfaceType* InterfaceType::ReadFrom(Reader* reader, | 1433 InterfaceType* InterfaceType::ReadFrom(Reader* reader, |
1434 bool _without_type_arguments_) { | 1434 bool _without_type_arguments_) { |
1435 TRACE_READ_OFFSET(); | 1435 TRACE_READ_OFFSET(); |
1436 intptr_t klass_name = Reference::ReadClassFrom(reader); | 1436 NameIndex klass_name = Reference::ReadClassFrom(reader); |
1437 InterfaceType* type = new InterfaceType(klass_name); | 1437 InterfaceType* type = new InterfaceType(klass_name); |
1438 ASSERT(_without_type_arguments_); | 1438 ASSERT(_without_type_arguments_); |
1439 return type; | 1439 return type; |
1440 } | 1440 } |
1441 | 1441 |
1442 | 1442 |
1443 TypedefType* TypedefType::ReadFrom(Reader* reader) { | 1443 TypedefType* TypedefType::ReadFrom(Reader* reader) { |
1444 TRACE_READ_OFFSET(); | 1444 TRACE_READ_OFFSET(); |
1445 intptr_t typedef_name = Reference::ReadTypedefFrom(reader); | 1445 NameIndex typedef_name = Reference::ReadTypedefFrom(reader); |
1446 TypedefType* type = new TypedefType(typedef_name); | 1446 TypedefType* type = new TypedefType(typedef_name); |
1447 type->type_arguments().ReadFromStatic<DartType>(reader); | 1447 type->type_arguments().ReadFromStatic<DartType>(reader); |
1448 return type; | 1448 return type; |
1449 } | 1449 } |
1450 | 1450 |
1451 | 1451 |
1452 FunctionType* FunctionType::ReadFrom(Reader* reader) { | 1452 FunctionType* FunctionType::ReadFrom(Reader* reader) { |
1453 TRACE_READ_OFFSET(); | 1453 TRACE_READ_OFFSET(); |
1454 FunctionType* type = new FunctionType(); | 1454 FunctionType* type = new FunctionType(); |
1455 TypeParameterScope<ReaderHelper> scope(reader->helper()); | 1455 TypeParameterScope<ReaderHelper> scope(reader->helper()); |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1511 // Skip the UTF-8 encoded strings. | 1511 // Skip the UTF-8 encoded strings. |
1512 reader->MarkStringDataOffset(); | 1512 reader->MarkStringDataOffset(); |
1513 reader->Consume(offset); | 1513 reader->Consume(offset); |
1514 | 1514 |
1515 program->source_table_.ReadFrom(reader); | 1515 program->source_table_.ReadFrom(reader); |
1516 | 1516 |
1517 // Deserialize the canonical name table to give fast access to canonical names | 1517 // Deserialize the canonical name table to give fast access to canonical names |
1518 // during deserialization. | 1518 // during deserialization. |
1519 program->name_table_offset_ = reader->offset(); | 1519 program->name_table_offset_ = reader->offset(); |
1520 intptr_t name_count = reader->ReadUInt(); | 1520 intptr_t name_count = reader->ReadUInt(); |
1521 reader->canonical_name_parents_ = new intptr_t[name_count]; | 1521 reader->canonical_name_parents_ = new NameIndex[name_count]; |
1522 reader->canonical_name_strings_ = new intptr_t[name_count]; | 1522 reader->canonical_name_strings_ = new StringIndex[name_count]; |
1523 for (int i = 0; i < name_count; ++i) { | 1523 for (int i = 0; i < name_count; ++i) { |
1524 // The parent name index is biased: 0 is the root name and otherwise N+1 is | 1524 // The parent name index is biased: 0 is the root name and otherwise N+1 is |
1525 // the Nth name. | 1525 // the Nth name. |
1526 reader->canonical_name_parents_[i] = reader->ReadUInt() - 1; | 1526 reader->canonical_name_parents_[i] = reader->ReadCanonicalNameReference(); |
1527 reader->canonical_name_strings_[i] = reader->ReadUInt(); | 1527 reader->canonical_name_strings_[i] = StringIndex(reader->ReadUInt()); |
1528 } | 1528 } |
1529 | 1529 |
1530 int libraries = reader->ReadUInt(); | 1530 int libraries = reader->ReadUInt(); |
1531 program->libraries().EnsureInitialized(libraries); | 1531 program->libraries().EnsureInitialized(libraries); |
1532 for (intptr_t i = 0; i < libraries; i++) { | 1532 for (intptr_t i = 0; i < libraries; i++) { |
1533 program->libraries().GetOrCreate<Library>(i)->ReadFrom(reader); | 1533 program->libraries().GetOrCreate<Library>(i)->ReadFrom(reader); |
1534 } | 1534 } |
1535 | 1535 |
1536 program->main_method_reference_ = | 1536 program->main_method_reference_ = |
1537 Reference::ReadMemberFrom(reader, /*allow_null=*/true); | 1537 Reference::ReadMemberFrom(reader, /*allow_null=*/true); |
(...skipping 24 matching lines...) Expand all Loading... |
1562 LabelScope<ReaderHelper, BlockStack<LabeledStatement> > labels( | 1562 LabelScope<ReaderHelper, BlockStack<LabeledStatement> > labels( |
1563 reader->helper()); | 1563 reader->helper()); |
1564 VariableScope<ReaderHelper> vars(reader->helper()); | 1564 VariableScope<ReaderHelper> vars(reader->helper()); |
1565 function->body_ = reader->ReadOptional<Statement>(); | 1565 function->body_ = reader->ReadOptional<Statement>(); |
1566 return function; | 1566 return function; |
1567 } | 1567 } |
1568 | 1568 |
1569 | 1569 |
1570 TypeParameter* TypeParameter::ReadFrom(Reader* reader) { | 1570 TypeParameter* TypeParameter::ReadFrom(Reader* reader) { |
1571 TRACE_READ_OFFSET(); | 1571 TRACE_READ_OFFSET(); |
1572 name_index_ = reader->ReadUInt(); | 1572 name_index_ = StringIndex(reader->ReadUInt()); |
1573 bound_ = DartType::ReadFrom(reader); | 1573 bound_ = DartType::ReadFrom(reader); |
1574 return this; | 1574 return this; |
1575 } | 1575 } |
1576 | 1576 |
1577 | 1577 |
1578 } // namespace kernel | 1578 } // namespace kernel |
1579 | 1579 |
1580 | 1580 |
1581 kernel::Program* ReadPrecompiledKernelFromBuffer(const uint8_t* buffer, | 1581 kernel::Program* ReadPrecompiledKernelFromBuffer(const uint8_t* buffer, |
1582 intptr_t buffer_length) { | 1582 intptr_t buffer_length) { |
1583 kernel::Reader reader(buffer, buffer_length); | 1583 kernel::Reader reader(buffer, buffer_length); |
1584 return kernel::Program::ReadFrom(&reader); | 1584 return kernel::Program::ReadFrom(&reader); |
1585 } | 1585 } |
1586 | 1586 |
1587 | 1587 |
1588 } // namespace dart | 1588 } // namespace dart |
1589 #endif // !defined(DART_PRECOMPILED_RUNTIME) | 1589 #endif // !defined(DART_PRECOMPILED_RUNTIME) |
OLD | NEW |