| 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 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 208 canonical_name_ = reader->ReadCanonicalNameReference(); | 208 canonical_name_ = reader->ReadCanonicalNameReference(); |
| 209 name_ = Reference::ReadStringFrom(reader); | 209 name_ = Reference::ReadStringFrom(reader); |
| 210 import_uri_ = canonical_name_->name(); | 210 import_uri_ = canonical_name_->name(); |
| 211 source_uri_index_ = reader->ReadUInt(); | 211 source_uri_index_ = reader->ReadUInt(); |
| 212 reader->set_current_script_id(source_uri_index_); | 212 reader->set_current_script_id(source_uri_index_); |
| 213 | 213 |
| 214 int num_imports = reader->ReadUInt(); | 214 int num_imports = reader->ReadUInt(); |
| 215 if (num_imports != 0) { | 215 if (num_imports != 0) { |
| 216 FATAL("Deferred imports not implemented in VM"); | 216 FATAL("Deferred imports not implemented in VM"); |
| 217 } | 217 } |
| 218 int num_typedefs = reader->ReadUInt(); | |
| 219 typedefs().EnsureInitialized(num_typedefs); | |
| 220 for (intptr_t i = 0; i < num_typedefs; i++) { | |
| 221 typedefs().GetOrCreate<Typedef>(i, this)->ReadFrom(reader); | |
| 222 } | |
| 223 int num_classes = reader->ReadUInt(); | 218 int num_classes = reader->ReadUInt(); |
| 224 classes().EnsureInitialized(num_classes); | 219 classes().EnsureInitialized(num_classes); |
| 225 for (intptr_t i = 0; i < num_classes; i++) { | 220 for (intptr_t i = 0; i < num_classes; i++) { |
| 226 Tag tag = reader->ReadTag(); | 221 Tag tag = reader->ReadTag(); |
| 227 ASSERT(tag == kClass); | 222 ASSERT(tag == kClass); |
| 228 NormalClass* klass = classes().GetOrCreate<NormalClass>(i, this); | 223 NormalClass* klass = classes().GetOrCreate<NormalClass>(i, this); |
| 229 klass->ReadFrom(reader); | 224 klass->ReadFrom(reader); |
| 230 } | 225 } |
| 231 | 226 |
| 232 fields().ReadFrom<Field>(reader, this); | 227 fields().ReadFrom<Field>(reader, this); |
| 233 procedures().ReadFrom<Procedure>(reader, this); | 228 procedures().ReadFrom<Procedure>(reader, this); |
| 234 return this; | 229 return this; |
| 235 } | 230 } |
| 236 | 231 |
| 237 | 232 |
| 238 Typedef* Typedef::ReadFrom(Reader* reader) { | |
| 239 TRACE_READ_OFFSET(); | |
| 240 | |
| 241 canonical_name_ = reader->ReadCanonicalNameReference(); | |
| 242 position_ = reader->ReadPosition(false); | |
| 243 name_ = Reference::ReadStringFrom(reader); | |
| 244 source_uri_index_ = reader->ReadUInt(); | |
| 245 type_parameters_.ReadFrom(reader); | |
| 246 type_ = DartType::ReadFrom(reader); | |
| 247 | |
| 248 return this; | |
| 249 } | |
| 250 | |
| 251 | |
| 252 Class* Class::ReadFrom(Reader* reader) { | 233 Class* Class::ReadFrom(Reader* reader) { |
| 253 TRACE_READ_OFFSET(); | 234 TRACE_READ_OFFSET(); |
| 254 | 235 |
| 255 canonical_name_ = reader->ReadCanonicalNameReference(); | 236 canonical_name_ = reader->ReadCanonicalNameReference(); |
| 256 position_ = reader->ReadPosition(false); | 237 position_ = reader->ReadPosition(false); |
| 257 is_abstract_ = reader->ReadBool(); | 238 is_abstract_ = reader->ReadBool(); |
| 258 name_ = Reference::ReadStringFrom(reader); | 239 name_ = Reference::ReadStringFrom(reader); |
| 259 source_uri_index_ = reader->ReadUInt(); | 240 source_uri_index_ = reader->ReadUInt(); |
| 260 reader->set_current_script_id(source_uri_index_); | 241 reader->set_current_script_id(source_uri_index_); |
| 261 reader->record_token_position(position_); | 242 reader->record_token_position(position_); |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 325 } | 306 } |
| 326 | 307 |
| 327 if (canonical_name != NULL) { | 308 if (canonical_name != NULL) { |
| 328 canonical_name->set_referenced(true); | 309 canonical_name->set_referenced(true); |
| 329 } | 310 } |
| 330 | 311 |
| 331 return canonical_name; | 312 return canonical_name; |
| 332 } | 313 } |
| 333 | 314 |
| 334 | 315 |
| 335 CanonicalName* Reference::ReadTypedefFrom(Reader* reader) { | |
| 336 TRACE_READ_OFFSET(); | |
| 337 | |
| 338 CanonicalName* canonical_name = reader->ReadCanonicalNameReference(); | |
| 339 if (canonical_name == NULL) { | |
| 340 FATAL("Expected a valid typedef reference, but got `null`"); | |
| 341 } | |
| 342 | |
| 343 canonical_name->set_referenced(true); | |
| 344 | |
| 345 return canonical_name; | |
| 346 } | |
| 347 | |
| 348 | |
| 349 String* Reference::ReadStringFrom(Reader* reader) { | 316 String* Reference::ReadStringFrom(Reader* reader) { |
| 350 int index = reader->ReadUInt(); | 317 int index = reader->ReadUInt(); |
| 351 return reader->helper()->program()->string_table().strings()[index]; | 318 return reader->helper()->program()->string_table().strings()[index]; |
| 352 } | 319 } |
| 353 | 320 |
| 354 | 321 |
| 355 Field* Field::ReadFrom(Reader* reader) { | 322 Field* Field::ReadFrom(Reader* reader) { |
| 356 TRACE_READ_OFFSET(); | 323 TRACE_READ_OFFSET(); |
| 357 kernel_offset_ = reader->offset(); // Notice the ReadTag() below. | 324 kernel_offset_ = reader->offset(); // Notice the ReadTag() below. |
| 358 Tag tag = reader->ReadTag(); | 325 Tag tag = reader->ReadTag(); |
| (...skipping 1078 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1437 case kSimpleInterfaceType: | 1404 case kSimpleInterfaceType: |
| 1438 return InterfaceType::ReadFrom(reader, true); | 1405 return InterfaceType::ReadFrom(reader, true); |
| 1439 case kFunctionType: | 1406 case kFunctionType: |
| 1440 return FunctionType::ReadFrom(reader); | 1407 return FunctionType::ReadFrom(reader); |
| 1441 case kSimpleFunctionType: | 1408 case kSimpleFunctionType: |
| 1442 return FunctionType::ReadFrom(reader, true); | 1409 return FunctionType::ReadFrom(reader, true); |
| 1443 case kTypeParameterType: | 1410 case kTypeParameterType: |
| 1444 return TypeParameterType::ReadFrom(reader); | 1411 return TypeParameterType::ReadFrom(reader); |
| 1445 case kVectorType: | 1412 case kVectorType: |
| 1446 return VectorType::ReadFrom(reader); | 1413 return VectorType::ReadFrom(reader); |
| 1447 case kTypedefType: | |
| 1448 return TypedefType::ReadFrom(reader); | |
| 1449 default: | 1414 default: |
| 1450 UNREACHABLE(); | 1415 UNREACHABLE(); |
| 1451 } | 1416 } |
| 1452 UNREACHABLE(); | 1417 UNREACHABLE(); |
| 1453 return NULL; | 1418 return NULL; |
| 1454 } | 1419 } |
| 1455 | 1420 |
| 1456 | 1421 |
| 1457 InvalidType* InvalidType::ReadFrom(Reader* reader) { | 1422 InvalidType* InvalidType::ReadFrom(Reader* reader) { |
| 1458 TRACE_READ_OFFSET(); | 1423 TRACE_READ_OFFSET(); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 1484 InterfaceType* InterfaceType::ReadFrom(Reader* reader, | 1449 InterfaceType* InterfaceType::ReadFrom(Reader* reader, |
| 1485 bool _without_type_arguments_) { | 1450 bool _without_type_arguments_) { |
| 1486 TRACE_READ_OFFSET(); | 1451 TRACE_READ_OFFSET(); |
| 1487 CanonicalName* klass_name = Reference::ReadClassFrom(reader); | 1452 CanonicalName* klass_name = Reference::ReadClassFrom(reader); |
| 1488 InterfaceType* type = new InterfaceType(klass_name); | 1453 InterfaceType* type = new InterfaceType(klass_name); |
| 1489 ASSERT(_without_type_arguments_); | 1454 ASSERT(_without_type_arguments_); |
| 1490 return type; | 1455 return type; |
| 1491 } | 1456 } |
| 1492 | 1457 |
| 1493 | 1458 |
| 1494 TypedefType* TypedefType::ReadFrom(Reader* reader) { | |
| 1495 TRACE_READ_OFFSET(); | |
| 1496 CanonicalName* typedef_name = Reference::ReadTypedefFrom(reader); | |
| 1497 TypedefType* type = new TypedefType(typedef_name); | |
| 1498 type->type_arguments().ReadFromStatic<DartType>(reader); | |
| 1499 return type; | |
| 1500 } | |
| 1501 | |
| 1502 | |
| 1503 FunctionType* FunctionType::ReadFrom(Reader* reader) { | 1459 FunctionType* FunctionType::ReadFrom(Reader* reader) { |
| 1504 TRACE_READ_OFFSET(); | 1460 TRACE_READ_OFFSET(); |
| 1505 FunctionType* type = new FunctionType(); | 1461 FunctionType* type = new FunctionType(); |
| 1506 TypeParameterScope<ReaderHelper> scope(reader->helper()); | 1462 TypeParameterScope<ReaderHelper> scope(reader->helper()); |
| 1507 type->type_parameters().ReadFrom(reader); | 1463 type->type_parameters().ReadFrom(reader); |
| 1508 type->required_parameter_count_ = reader->ReadUInt(); | 1464 type->required_parameter_count_ = reader->ReadUInt(); |
| 1509 type->positional_parameters().ReadFromStatic<DartType>(reader); | 1465 type->positional_parameters().ReadFromStatic<DartType>(reader); |
| 1510 type->named_parameters().ReadFromStatic<Tuple<String, DartType> >(reader); | 1466 type->named_parameters().ReadFromStatic<Tuple<String, DartType> >(reader); |
| 1511 type->return_type_ = DartType::ReadFrom(reader); | 1467 type->return_type_ = DartType::ReadFrom(reader); |
| 1512 return type; | 1468 return type; |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1624 | 1580 |
| 1625 kernel::Program* ReadPrecompiledKernelFromBuffer(const uint8_t* buffer, | 1581 kernel::Program* ReadPrecompiledKernelFromBuffer(const uint8_t* buffer, |
| 1626 intptr_t buffer_length) { | 1582 intptr_t buffer_length) { |
| 1627 kernel::Reader reader(buffer, buffer_length); | 1583 kernel::Reader reader(buffer, buffer_length); |
| 1628 return kernel::Program::ReadFrom(&reader); | 1584 return kernel::Program::ReadFrom(&reader); |
| 1629 } | 1585 } |
| 1630 | 1586 |
| 1631 | 1587 |
| 1632 } // namespace dart | 1588 } // namespace dart |
| 1633 #endif // !defined(DART_PRECOMPILED_RUNTIME) | 1589 #endif // !defined(DART_PRECOMPILED_RUNTIME) |
| OLD | NEW |