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

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: Fixes according to the review comments 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
« no previous file with comments | « 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 485 matching lines...) Expand 10 before | Expand all | Expand 10 after
496 case kMapLiteral: 496 case kMapLiteral:
497 return MapLiteral::ReadFrom(reader, false); 497 return MapLiteral::ReadFrom(reader, false);
498 case kConstMapLiteral: 498 case kConstMapLiteral:
499 return MapLiteral::ReadFrom(reader, true); 499 return MapLiteral::ReadFrom(reader, true);
500 case kAwaitExpression: 500 case kAwaitExpression:
501 return AwaitExpression::ReadFrom(reader); 501 return AwaitExpression::ReadFrom(reader);
502 case kFunctionExpression: 502 case kFunctionExpression:
503 return FunctionExpression::ReadFrom(reader); 503 return FunctionExpression::ReadFrom(reader);
504 case kLet: 504 case kLet:
505 return Let::ReadFrom(reader); 505 return Let::ReadFrom(reader);
506 case kVectorCreation:
507 return VectorCreation::ReadFrom(reader);
508 case kVectorGet:
509 return VectorGet::ReadFrom(reader);
510 case kVectorSet:
511 return VectorSet::ReadFrom(reader);
512 case kVectorCopy:
513 return VectorCopy::ReadFrom(reader);
514 case kClosureCreation:
515 return ClosureCreation::ReadFrom(reader);
506 case kBigIntLiteral: 516 case kBigIntLiteral:
507 return BigintLiteral::ReadFrom(reader); 517 return BigintLiteral::ReadFrom(reader);
508 case kStringLiteral: 518 case kStringLiteral:
509 return StringLiteral::ReadFrom(reader); 519 return StringLiteral::ReadFrom(reader);
510 case kSpecialIntLiteral: 520 case kSpecialIntLiteral:
511 return IntLiteral::ReadFrom(reader, payload); 521 return IntLiteral::ReadFrom(reader, payload);
512 case kNegativeIntLiteral: 522 case kNegativeIntLiteral:
513 return IntLiteral::ReadFrom(reader, true); 523 return IntLiteral::ReadFrom(reader, true);
514 case kPositiveIntLiteral: 524 case kPositiveIntLiteral:
515 return IntLiteral::ReadFrom(reader, false); 525 return IntLiteral::ReadFrom(reader, false);
(...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after
950 let->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. 960 let->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte.
951 let->variable_ = VariableDeclaration::ReadFromImpl(reader, false); 961 let->variable_ = VariableDeclaration::ReadFromImpl(reader, false);
952 let->body_ = Expression::ReadFrom(reader); 962 let->body_ = Expression::ReadFrom(reader);
953 let->position_ = reader->min_position(); 963 let->position_ = reader->min_position();
954 let->end_position_ = reader->max_position(); 964 let->end_position_ = reader->max_position();
955 965
956 return let; 966 return let;
957 } 967 }
958 968
959 969
970 VectorCreation* VectorCreation::ReadFrom(Reader* reader) {
971 TRACE_READ_OFFSET();
972 PositionScope scope(reader);
Kevin Millikin (Google) 2017/04/05 08:34:27 We don't this scoped helper object here, or below.
Dmitry Stefantsov 2017/04/05 13:59:09 Done.
973
974 VectorCreation* vector_creation = new VectorCreation();
975 vector_creation->kernel_offset_ =
976 reader->offset() - 1; // -1 to include tag byte.
977 vector_creation->value_ = static_cast<intptr_t>(reader->ReadUInt());
Kevin Millikin (Google) 2017/04/05 08:34:27 We don't need a static_cast here, or below, becaus
Dmitry Stefantsov 2017/04/05 13:59:09 Got it. Thanks! Fixed.
978
979 return vector_creation;
980 }
981
982
983 VectorGet* VectorGet::ReadFrom(Reader* reader) {
984 TRACE_READ_OFFSET();
985 PositionScope scope(reader);
986
987 VectorGet* vector_get = new VectorGet();
988 vector_get->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte.
989 vector_get->vector_expression_ = Expression::ReadFrom(reader);
990 vector_get->index_ = static_cast<intptr_t>(reader->ReadUInt());
991
992 return vector_get;
993 }
994
995
996 VectorSet* VectorSet::ReadFrom(Reader* reader) {
997 TRACE_READ_OFFSET();
998 PositionScope scope(reader);
999
1000 VectorSet* vector_set = new VectorSet();
1001 vector_set->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte.
1002 vector_set->vector_expression_ = Expression::ReadFrom(reader);
1003 vector_set->index_ = static_cast<intptr_t>(reader->ReadUInt());
1004 vector_set->value_ = Expression::ReadFrom(reader);
1005
1006 return vector_set;
1007 }
1008
1009
1010 VectorCopy* VectorCopy::ReadFrom(Reader* reader) {
1011 TRACE_READ_OFFSET();
1012 PositionScope scope(reader);
1013
1014 VectorCopy* vector_copy = new VectorCopy();
1015 vector_copy->kernel_offset_ =
1016 reader->offset() - 1; // -1 to include tag byte.
1017 vector_copy->vector_expression_ = Expression::ReadFrom(reader);
1018
1019 return vector_copy;
1020 }
1021
1022
1023 ClosureCreation* ClosureCreation::ReadFrom(Reader* reader) {
1024 TRACE_READ_OFFSET();
1025 PositionScope scope(reader);
1026
1027 ClosureCreation* closure_creation = new ClosureCreation();
1028 closure_creation->kernel_offset_ =
1029 reader->offset() - 1; // to include tag byte.
1030 closure_creation->top_level_function_reference_ =
1031 Reference::ReadMemberFrom(reader);
1032 closure_creation->context_vector_ = Expression::ReadFrom(reader);
1033 closure_creation->function_type_ =
1034 FunctionType::Cast(DartType::ReadFrom(reader));
1035
1036 return closure_creation;
1037 }
1038
1039
960 Statement* Statement::ReadFrom(Reader* reader) { 1040 Statement* Statement::ReadFrom(Reader* reader) {
961 TRACE_READ_OFFSET(); 1041 TRACE_READ_OFFSET();
962 Tag tag = reader->ReadTag(); 1042 Tag tag = reader->ReadTag();
963 switch (tag) { 1043 switch (tag) {
964 case kInvalidStatement: 1044 case kInvalidStatement:
965 return InvalidStatement::ReadFrom(reader); 1045 return InvalidStatement::ReadFrom(reader);
966 case kExpressionStatement: 1046 case kExpressionStatement:
967 return ExpressionStatement::ReadFrom(reader); 1047 return ExpressionStatement::ReadFrom(reader);
968 case kBlock: 1048 case kBlock:
969 return Block::ReadFromImpl(reader); 1049 return Block::ReadFromImpl(reader);
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after
1312 case kInterfaceType: 1392 case kInterfaceType:
1313 return InterfaceType::ReadFrom(reader); 1393 return InterfaceType::ReadFrom(reader);
1314 case kSimpleInterfaceType: 1394 case kSimpleInterfaceType:
1315 return InterfaceType::ReadFrom(reader, true); 1395 return InterfaceType::ReadFrom(reader, true);
1316 case kFunctionType: 1396 case kFunctionType:
1317 return FunctionType::ReadFrom(reader); 1397 return FunctionType::ReadFrom(reader);
1318 case kSimpleFunctionType: 1398 case kSimpleFunctionType:
1319 return FunctionType::ReadFrom(reader, true); 1399 return FunctionType::ReadFrom(reader, true);
1320 case kTypeParameterType: 1400 case kTypeParameterType:
1321 return TypeParameterType::ReadFrom(reader); 1401 return TypeParameterType::ReadFrom(reader);
1402 case kVectorType:
1403 return VectorType::ReadFrom(reader);
1322 default: 1404 default:
1323 UNREACHABLE(); 1405 UNREACHABLE();
1324 } 1406 }
1325 UNREACHABLE(); 1407 UNREACHABLE();
1326 return NULL; 1408 return NULL;
1327 } 1409 }
1328 1410
1329 1411
1330 InvalidType* InvalidType::ReadFrom(Reader* reader) { 1412 InvalidType* InvalidType::ReadFrom(Reader* reader) {
1331 TRACE_READ_OFFSET(); 1413 TRACE_READ_OFFSET();
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
1390 1472
1391 TypeParameterType* TypeParameterType::ReadFrom(Reader* reader) { 1473 TypeParameterType* TypeParameterType::ReadFrom(Reader* reader) {
1392 TRACE_READ_OFFSET(); 1474 TRACE_READ_OFFSET();
1393 TypeParameterType* type = new TypeParameterType(); 1475 TypeParameterType* type = new TypeParameterType();
1394 type->parameter_ = 1476 type->parameter_ =
1395 reader->helper()->type_parameters().Lookup(reader->ReadUInt()); 1477 reader->helper()->type_parameters().Lookup(reader->ReadUInt());
1396 return type; 1478 return type;
1397 } 1479 }
1398 1480
1399 1481
1482 VectorType* VectorType::ReadFrom(Reader* reader) {
1483 TRACE_READ_OFFSET();
1484 VectorType* type = new VectorType();
1485 return type;
1486 }
1487
1488
1400 Program* Program::ReadFrom(Reader* reader) { 1489 Program* Program::ReadFrom(Reader* reader) {
1401 TRACE_READ_OFFSET(); 1490 TRACE_READ_OFFSET();
1402 uint32_t magic = reader->ReadUInt32(); 1491 uint32_t magic = reader->ReadUInt32();
1403 if (magic != kMagicProgramFile) FATAL("Invalid magic identifier"); 1492 if (magic != kMagicProgramFile) FATAL("Invalid magic identifier");
1404 1493
1405 Program* program = new Program(); 1494 Program* program = new Program();
1406 program->canonical_name_root_ = CanonicalName::NewRoot(); 1495 program->canonical_name_root_ = CanonicalName::NewRoot();
1407 reader->helper()->set_program(program); 1496 reader->helper()->set_program(program);
1408 1497
1409 program->string_table_.ReadFrom(reader); 1498 program->string_table_.ReadFrom(reader);
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
1479 1568
1480 kernel::Program* ReadPrecompiledKernelFromBuffer(const uint8_t* buffer, 1569 kernel::Program* ReadPrecompiledKernelFromBuffer(const uint8_t* buffer,
1481 intptr_t buffer_length) { 1570 intptr_t buffer_length) {
1482 kernel::Reader reader(buffer, buffer_length); 1571 kernel::Reader reader(buffer, buffer_length);
1483 return kernel::Program::ReadFrom(&reader); 1572 return kernel::Program::ReadFrom(&reader);
1484 } 1573 }
1485 1574
1486 1575
1487 } // namespace dart 1576 } // namespace dart
1488 #endif // !defined(DART_PRECOMPILED_RUNTIME) 1577 #endif // !defined(DART_PRECOMPILED_RUNTIME)
OLDNEW
« no previous file with comments | « runtime/vm/kernel_binary.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698