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

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

Issue 2792333002: Add Kernel AST nodes for Vector and Closure primitives in VM (Closed)
Patch Set: Created 3 years, 8 months 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
« runtime/vm/kernel.h ('K') | « runtime/vm/kernel_binary.h ('k') | no next file » | 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 "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
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
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
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
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
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)
OLDNEW
« runtime/vm/kernel.h ('K') | « runtime/vm/kernel_binary.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698