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 464 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
475 case kMapLiteral: | 475 case kMapLiteral: |
476 return MapLiteral::ReadFrom(reader, false); | 476 return MapLiteral::ReadFrom(reader, false); |
477 case kConstMapLiteral: | 477 case kConstMapLiteral: |
478 return MapLiteral::ReadFrom(reader, true); | 478 return MapLiteral::ReadFrom(reader, true); |
479 case kAwaitExpression: | 479 case kAwaitExpression: |
480 return AwaitExpression::ReadFrom(reader); | 480 return AwaitExpression::ReadFrom(reader); |
481 case kFunctionExpression: | 481 case kFunctionExpression: |
482 return FunctionExpression::ReadFrom(reader); | 482 return FunctionExpression::ReadFrom(reader); |
483 case kLet: | 483 case kLet: |
484 return Let::ReadFrom(reader); | 484 return Let::ReadFrom(reader); |
| 485 case kVectorCreation: |
| 486 return VectorCreation::ReadFrom(reader); |
| 487 case kVectorGet: |
| 488 return VectorGet::ReadFrom(reader); |
| 489 case kVectorSet: |
| 490 return VectorSet::ReadFrom(reader); |
| 491 case kVectorCopy: |
| 492 return VectorCopy::ReadFrom(reader); |
| 493 case kClosureCreation: |
| 494 return ClosureCreation::ReadFrom(reader); |
485 case kBigIntLiteral: | 495 case kBigIntLiteral: |
486 return BigintLiteral::ReadFrom(reader); | 496 return BigintLiteral::ReadFrom(reader); |
487 case kStringLiteral: | 497 case kStringLiteral: |
488 return StringLiteral::ReadFrom(reader); | 498 return StringLiteral::ReadFrom(reader); |
489 case kSpecialIntLiteral: | 499 case kSpecialIntLiteral: |
490 return IntLiteral::ReadFrom(reader, payload); | 500 return IntLiteral::ReadFrom(reader, payload); |
491 case kNegativeIntLiteral: | 501 case kNegativeIntLiteral: |
492 return IntLiteral::ReadFrom(reader, true); | 502 return IntLiteral::ReadFrom(reader, true); |
493 case kPositiveIntLiteral: | 503 case kPositiveIntLiteral: |
494 return IntLiteral::ReadFrom(reader, false); | 504 return IntLiteral::ReadFrom(reader, false); |
(...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
929 let->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 939 let->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
930 let->variable_ = VariableDeclaration::ReadFromImpl(reader, false); | 940 let->variable_ = VariableDeclaration::ReadFromImpl(reader, false); |
931 let->body_ = Expression::ReadFrom(reader); | 941 let->body_ = Expression::ReadFrom(reader); |
932 let->position_ = reader->min_position(); | 942 let->position_ = reader->min_position(); |
933 let->end_position_ = reader->max_position(); | 943 let->end_position_ = reader->max_position(); |
934 | 944 |
935 return let; | 945 return let; |
936 } | 946 } |
937 | 947 |
938 | 948 |
| 949 VectorCreation* VectorCreation::ReadFrom(Reader* reader) { |
| 950 TRACE_READ_OFFSET(); |
| 951 PositionScope scope(reader); |
| 952 |
| 953 VectorCreation* vector_creation = new VectorCreation(); |
| 954 vector_creation->kernel_offset_ = |
| 955 reader->offset() - 1; // -1 to include tag byte. |
| 956 vector_creation->value_ = static_cast<int64_t>(reader->ReadUInt()); |
| 957 vector_creation->position_ = reader->min_position(); |
| 958 vector_creation->end_position_ = reader->max_position(); |
| 959 |
| 960 return vector_creation; |
| 961 } |
| 962 |
| 963 |
| 964 VectorGet* VectorGet::ReadFrom(Reader* reader) { |
| 965 TRACE_READ_OFFSET(); |
| 966 PositionScope scope(reader); |
| 967 |
| 968 VectorGet* vector_get = new VectorGet(); |
| 969 vector_get->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
| 970 vector_get->vector_expression_ = Expression::ReadFrom(reader); |
| 971 vector_get->index_ = static_cast<int64_t>(reader->ReadUInt()); |
| 972 vector_get->position_ = reader->min_position(); |
| 973 vector_get->end_position_ = reader->max_position(); |
| 974 |
| 975 return vector_get; |
| 976 } |
| 977 |
| 978 |
| 979 VectorSet* VectorSet::ReadFrom(Reader* reader) { |
| 980 TRACE_READ_OFFSET(); |
| 981 PositionScope scope(reader); |
| 982 |
| 983 VectorSet* vector_set = new VectorSet(); |
| 984 vector_set->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
| 985 vector_set->vector_expression_ = Expression::ReadFrom(reader); |
| 986 vector_set->index_ = static_cast<int64_t>(reader->ReadUInt()); |
| 987 vector_set->value_ = Expression::ReadFrom(reader); |
| 988 vector_set->position_ = reader->min_position(); |
| 989 vector_set->end_position_ = reader->max_position(); |
| 990 |
| 991 return vector_set; |
| 992 } |
| 993 |
| 994 |
| 995 VectorCopy* VectorCopy::ReadFrom(Reader* reader) { |
| 996 TRACE_READ_OFFSET(); |
| 997 PositionScope scope(reader); |
| 998 |
| 999 VectorCopy* vector_copy = new VectorCopy(); |
| 1000 vector_copy->kernel_offset_ = |
| 1001 reader->offset() - 1; // -1 to include tag byte. |
| 1002 vector_copy->vector_expression_ = Expression::ReadFrom(reader); |
| 1003 vector_copy->position_ = reader->min_position(); |
| 1004 vector_copy->end_position_ = reader->max_position(); |
| 1005 |
| 1006 return vector_copy; |
| 1007 } |
| 1008 |
| 1009 |
| 1010 ClosureCreation* ClosureCreation::ReadFrom(Reader* reader) { |
| 1011 TRACE_READ_OFFSET(); |
| 1012 PositionScope scope(reader); |
| 1013 |
| 1014 ClosureCreation* closure_creation = new ClosureCreation(); |
| 1015 closure_creation->kernel_offset_ = |
| 1016 reader->offset() - 1; // to include tag byte. |
| 1017 closure_creation->top_level_function_reference_ = |
| 1018 Reference::ReadMemberFrom(reader); |
| 1019 closure_creation->context_vector_ = Expression::ReadFrom(reader); |
| 1020 closure_creation->function_type_ = |
| 1021 FunctionType::Cast(DartType::ReadFrom(reader)); |
| 1022 closure_creation->position_ = reader->min_position(); |
| 1023 closure_creation->end_position_ = reader->max_position(); |
| 1024 |
| 1025 return closure_creation; |
| 1026 } |
| 1027 |
| 1028 |
939 Statement* Statement::ReadFrom(Reader* reader) { | 1029 Statement* Statement::ReadFrom(Reader* reader) { |
940 TRACE_READ_OFFSET(); | 1030 TRACE_READ_OFFSET(); |
941 Tag tag = reader->ReadTag(); | 1031 Tag tag = reader->ReadTag(); |
942 switch (tag) { | 1032 switch (tag) { |
943 case kInvalidStatement: | 1033 case kInvalidStatement: |
944 return InvalidStatement::ReadFrom(reader); | 1034 return InvalidStatement::ReadFrom(reader); |
945 case kExpressionStatement: | 1035 case kExpressionStatement: |
946 return ExpressionStatement::ReadFrom(reader); | 1036 return ExpressionStatement::ReadFrom(reader); |
947 case kBlock: | 1037 case kBlock: |
948 return Block::ReadFromImpl(reader); | 1038 return Block::ReadFromImpl(reader); |
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1291 case kInterfaceType: | 1381 case kInterfaceType: |
1292 return InterfaceType::ReadFrom(reader); | 1382 return InterfaceType::ReadFrom(reader); |
1293 case kSimpleInterfaceType: | 1383 case kSimpleInterfaceType: |
1294 return InterfaceType::ReadFrom(reader, true); | 1384 return InterfaceType::ReadFrom(reader, true); |
1295 case kFunctionType: | 1385 case kFunctionType: |
1296 return FunctionType::ReadFrom(reader); | 1386 return FunctionType::ReadFrom(reader); |
1297 case kSimpleFunctionType: | 1387 case kSimpleFunctionType: |
1298 return FunctionType::ReadFrom(reader, true); | 1388 return FunctionType::ReadFrom(reader, true); |
1299 case kTypeParameterType: | 1389 case kTypeParameterType: |
1300 return TypeParameterType::ReadFrom(reader); | 1390 return TypeParameterType::ReadFrom(reader); |
| 1391 case kVectorType: |
| 1392 return VectorType::ReadFrom(reader); |
1301 default: | 1393 default: |
1302 UNREACHABLE(); | 1394 UNREACHABLE(); |
1303 } | 1395 } |
1304 UNREACHABLE(); | 1396 UNREACHABLE(); |
1305 return NULL; | 1397 return NULL; |
1306 } | 1398 } |
1307 | 1399 |
1308 | 1400 |
1309 InvalidType* InvalidType::ReadFrom(Reader* reader) { | 1401 InvalidType* InvalidType::ReadFrom(Reader* reader) { |
1310 TRACE_READ_OFFSET(); | 1402 TRACE_READ_OFFSET(); |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1369 | 1461 |
1370 TypeParameterType* TypeParameterType::ReadFrom(Reader* reader) { | 1462 TypeParameterType* TypeParameterType::ReadFrom(Reader* reader) { |
1371 TRACE_READ_OFFSET(); | 1463 TRACE_READ_OFFSET(); |
1372 TypeParameterType* type = new TypeParameterType(); | 1464 TypeParameterType* type = new TypeParameterType(); |
1373 type->parameter_ = | 1465 type->parameter_ = |
1374 reader->helper()->type_parameters().Lookup(reader->ReadUInt()); | 1466 reader->helper()->type_parameters().Lookup(reader->ReadUInt()); |
1375 return type; | 1467 return type; |
1376 } | 1468 } |
1377 | 1469 |
1378 | 1470 |
| 1471 VectorType* VectorType::ReadFrom(Reader* reader) { |
| 1472 TRACE_READ_OFFSET(); |
| 1473 VectorType* type = new VectorType(); |
| 1474 return type; |
| 1475 } |
| 1476 |
| 1477 |
1379 Program* Program::ReadFrom(Reader* reader) { | 1478 Program* Program::ReadFrom(Reader* reader) { |
1380 TRACE_READ_OFFSET(); | 1479 TRACE_READ_OFFSET(); |
1381 uint32_t magic = reader->ReadUInt32(); | 1480 uint32_t magic = reader->ReadUInt32(); |
1382 if (magic != kMagicProgramFile) FATAL("Invalid magic identifier"); | 1481 if (magic != kMagicProgramFile) FATAL("Invalid magic identifier"); |
1383 | 1482 |
1384 Program* program = new Program(); | 1483 Program* program = new Program(); |
1385 program->canonical_name_root_ = CanonicalName::NewRoot(); | 1484 program->canonical_name_root_ = CanonicalName::NewRoot(); |
1386 reader->helper()->set_program(program); | 1485 reader->helper()->set_program(program); |
1387 | 1486 |
1388 program->string_table_.ReadFrom(reader); | 1487 program->string_table_.ReadFrom(reader); |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1458 | 1557 |
1459 kernel::Program* ReadPrecompiledKernelFromBuffer(const uint8_t* buffer, | 1558 kernel::Program* ReadPrecompiledKernelFromBuffer(const uint8_t* buffer, |
1460 intptr_t buffer_length) { | 1559 intptr_t buffer_length) { |
1461 kernel::Reader reader(buffer, buffer_length); | 1560 kernel::Reader reader(buffer, buffer_length); |
1462 return kernel::Program::ReadFrom(&reader); | 1561 return kernel::Program::ReadFrom(&reader); |
1463 } | 1562 } |
1464 | 1563 |
1465 | 1564 |
1466 } // namespace dart | 1565 } // namespace dart |
1467 #endif // !defined(DART_PRECOMPILED_RUNTIME) | 1566 #endif // !defined(DART_PRECOMPILED_RUNTIME) |
OLD | NEW |