| 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 | 4 |
| 5 #include "vm/kernel_binary_flowgraph.h" | 5 #include "vm/kernel_binary_flowgraph.h" |
| 6 | 6 |
| 7 #include "vm/object_store.h" | 7 #include "vm/object_store.h" |
| 8 | 8 |
| 9 #if !defined(DART_PRECOMPILED_RUNTIME) | 9 #if !defined(DART_PRECOMPILED_RUNTIME) |
| 10 | 10 |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 207 | 207 |
| 208 | 208 |
| 209 Fragment StreamingFlowGraphBuilder::BuildAt(intptr_t kernel_offset) { | 209 Fragment StreamingFlowGraphBuilder::BuildAt(intptr_t kernel_offset) { |
| 210 SetOffset(kernel_offset); | 210 SetOffset(kernel_offset); |
| 211 | 211 |
| 212 uint8_t payload = 0; | 212 uint8_t payload = 0; |
| 213 Tag tag = ReadTag(&payload); | 213 Tag tag = ReadTag(&payload); |
| 214 switch (tag) { | 214 switch (tag) { |
| 215 case kInvalidExpression: | 215 case kInvalidExpression: |
| 216 return BuildInvalidExpression(); | 216 return BuildInvalidExpression(); |
| 217 // case kVariableGet: | 217 case kVariableGet: |
| 218 // return VariableGet::ReadFrom(reader_); | 218 return BuildVariableGet(); |
| 219 // case kSpecializedVariableGet: | 219 case kSpecializedVariableGet: |
| 220 // return VariableGet::ReadFrom(reader_, payload); | 220 return BuildVariableGet(payload); |
| 221 // case kVariableSet: | 221 // case kVariableSet: |
| 222 // return VariableSet::ReadFrom(reader_); | 222 // return VariableSet::ReadFrom(reader_); |
| 223 // case kSpecializedVariableSet: | 223 // case kSpecializedVariableSet: |
| 224 // return VariableSet::ReadFrom(reader_, payload); | 224 // return VariableSet::ReadFrom(reader_, payload); |
| 225 // case kPropertyGet: | 225 // case kPropertyGet: |
| 226 // return PropertyGet::ReadFrom(reader_); | 226 // return PropertyGet::ReadFrom(reader_); |
| 227 // case kPropertySet: | 227 // case kPropertySet: |
| 228 // return PropertySet::ReadFrom(reader_); | 228 // return PropertySet::ReadFrom(reader_); |
| 229 // case kDirectPropertyGet: | 229 // case kDirectPropertyGet: |
| 230 // return DirectPropertyGet::ReadFrom(reader_); | 230 // return DirectPropertyGet::ReadFrom(reader_); |
| (...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 476 intptr_t savedOffset = ReaderOffset(); | 476 intptr_t savedOffset = ReaderOffset(); |
| 477 | 477 |
| 478 SetOffset(GetStringTableOffset(str_index)); | 478 SetOffset(GetStringTableOffset(str_index)); |
| 479 uint32_t bytes = ReadUInt(); | 479 uint32_t bytes = ReadUInt(); |
| 480 const uint8_t* data = &reader_->buffer()[ReaderOffset()]; | 480 const uint8_t* data = &reader_->buffer()[ReaderOffset()]; |
| 481 | 481 |
| 482 SetOffset(savedOffset); | 482 SetOffset(savedOffset); |
| 483 return new String(data, bytes); | 483 return new String(data, bytes); |
| 484 } | 484 } |
| 485 | 485 |
| 486 dart::LocalVariable* StreamingFlowGraphBuilder::LookupVariable( |
| 487 intptr_t kernel_offset) { |
| 488 return flow_graph_builder_->LookupVariable(kernel_offset); |
| 489 } |
| 490 |
| 486 Fragment StreamingFlowGraphBuilder::DebugStepCheck(TokenPosition position) { | 491 Fragment StreamingFlowGraphBuilder::DebugStepCheck(TokenPosition position) { |
| 487 return flow_graph_builder_->DebugStepCheck(position); | 492 return flow_graph_builder_->DebugStepCheck(position); |
| 488 } | 493 } |
| 489 | 494 |
| 490 Fragment StreamingFlowGraphBuilder::LoadLocal(LocalVariable* variable) { | 495 Fragment StreamingFlowGraphBuilder::LoadLocal(LocalVariable* variable) { |
| 491 return flow_graph_builder_->LoadLocal(variable); | 496 return flow_graph_builder_->LoadLocal(variable); |
| 492 } | 497 } |
| 493 | 498 |
| 494 Fragment StreamingFlowGraphBuilder::PushArgument() { | 499 Fragment StreamingFlowGraphBuilder::PushArgument() { |
| 495 return flow_graph_builder_->PushArgument(); | 500 return flow_graph_builder_->PushArgument(); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 522 return flow_graph_builder_->StaticCall(position, target, argument_count); | 527 return flow_graph_builder_->StaticCall(position, target, argument_count); |
| 523 } | 528 } |
| 524 | 529 |
| 525 Fragment StreamingFlowGraphBuilder::BuildInvalidExpression() { | 530 Fragment StreamingFlowGraphBuilder::BuildInvalidExpression() { |
| 526 // The frontend will take care of emitting normal errors (like | 531 // The frontend will take care of emitting normal errors (like |
| 527 // [NoSuchMethodError]s) and only emit [InvalidExpression]s in very special | 532 // [NoSuchMethodError]s) and only emit [InvalidExpression]s in very special |
| 528 // situations (e.g. an invalid annotation). | 533 // situations (e.g. an invalid annotation). |
| 529 return ThrowNoSuchMethodError(); | 534 return ThrowNoSuchMethodError(); |
| 530 } | 535 } |
| 531 | 536 |
| 537 Fragment StreamingFlowGraphBuilder::BuildVariableGet() { |
| 538 ReadPosition(); |
| 539 intptr_t variable_kernel_position = ReadUInt(); |
| 540 ReadUInt(); // Variable index. |
| 541 |
| 542 // TODO(jensj): This is actually a "reader->ReadOptional<DartType>();". |
| 543 // Optional type below: Not currently implemented. |
| 544 Tag tag = ReadTag(); |
| 545 if (tag != kNothing) { |
| 546 UNIMPLEMENTED(); |
| 547 } |
| 548 |
| 549 return LoadLocal(LookupVariable(variable_kernel_position)); |
| 550 } |
| 551 |
| 552 Fragment StreamingFlowGraphBuilder::BuildVariableGet(uint8_t payload) { |
| 553 ReadPosition(); |
| 554 intptr_t variable_kernel_position = ReadUInt(); |
| 555 return LoadLocal(LookupVariable(variable_kernel_position)); |
| 556 } |
| 557 |
| 532 Fragment StreamingFlowGraphBuilder::BuildStaticGet() { | 558 Fragment StreamingFlowGraphBuilder::BuildStaticGet() { |
| 533 intptr_t saved_offset = ReaderOffset() - 1; // Include the tag. | 559 intptr_t saved_offset = ReaderOffset() - 1; // Include the tag. |
| 534 TokenPosition position = ReadPosition(); | 560 TokenPosition position = ReadPosition(); |
| 535 int canonical_name_index = ReadUInt(); | 561 int canonical_name_index = ReadUInt(); |
| 536 CanonicalName* target = GetCanonicalName(canonical_name_index); | 562 CanonicalName* target = GetCanonicalName(canonical_name_index); |
| 537 | 563 |
| 538 if (target->IsField()) { | 564 if (target->IsField()) { |
| 539 const dart::Field& field = | 565 const dart::Field& field = |
| 540 dart::Field::ZoneHandle(Z, H.LookupFieldByKernelField(target)); | 566 dart::Field::ZoneHandle(Z, H.LookupFieldByKernelField(target)); |
| 541 if (field.is_const()) { | 567 if (field.is_const()) { |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 621 } | 647 } |
| 622 | 648 |
| 623 Fragment StreamingFlowGraphBuilder::BuildNullLiteral() { | 649 Fragment StreamingFlowGraphBuilder::BuildNullLiteral() { |
| 624 return Constant(Instance::ZoneHandle(Z, Instance::null())); | 650 return Constant(Instance::ZoneHandle(Z, Instance::null())); |
| 625 } | 651 } |
| 626 | 652 |
| 627 } // namespace kernel | 653 } // namespace kernel |
| 628 } // namespace dart | 654 } // namespace dart |
| 629 | 655 |
| 630 #endif // !defined(DART_PRECOMPILED_RUNTIME) | 656 #endif // !defined(DART_PRECOMPILED_RUNTIME) |
| OLD | NEW |