| 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 <map> | 5 #include <map> |
| 6 #include <set> | 6 #include <set> |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "vm/kernel_to_il.h" | 9 #include "vm/kernel_to_il.h" |
| 10 | 10 |
| (...skipping 4638 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4649 instructions = DebugStepCheck(node->position()) + instructions; | 4649 instructions = DebugStepCheck(node->position()) + instructions; |
| 4650 } | 4650 } |
| 4651 instructions += CheckVariableTypeInCheckedMode(node->variable()); | 4651 instructions += CheckVariableTypeInCheckedMode(node->variable()); |
| 4652 instructions += | 4652 instructions += |
| 4653 StoreLocal(node->position(), LookupVariable(node->variable())); | 4653 StoreLocal(node->position(), LookupVariable(node->variable())); |
| 4654 fragment_ = instructions; | 4654 fragment_ = instructions; |
| 4655 } | 4655 } |
| 4656 | 4656 |
| 4657 | 4657 |
| 4658 void FlowGraphBuilder::VisitStaticGet(StaticGet* node) { | 4658 void FlowGraphBuilder::VisitStaticGet(StaticGet* node) { |
| 4659 CanonicalName* target = node->target(); | 4659 fragment_ = streaming_flow_graph_builder_->BuildAt(node->kernel_offset()); |
| 4660 if (target->IsField()) { | |
| 4661 const dart::Field& field = | |
| 4662 dart::Field::ZoneHandle(Z, H.LookupFieldByKernelField(target)); | |
| 4663 if (field.is_const()) { | |
| 4664 fragment_ = Constant(constant_evaluator_.EvaluateExpression(node)); | |
| 4665 } else { | |
| 4666 const dart::Class& owner = dart::Class::Handle(Z, field.Owner()); | |
| 4667 const dart::String& getter_name = H.DartGetterName(target); | |
| 4668 const Function& getter = | |
| 4669 Function::ZoneHandle(Z, owner.LookupStaticFunction(getter_name)); | |
| 4670 if (getter.IsNull() || !field.has_initializer()) { | |
| 4671 Fragment instructions = Constant(field); | |
| 4672 fragment_ = instructions + LoadStaticField(); | |
| 4673 } else { | |
| 4674 fragment_ = StaticCall(node->position(), getter, 0); | |
| 4675 } | |
| 4676 } | |
| 4677 } else { | |
| 4678 const Function& function = | |
| 4679 Function::ZoneHandle(Z, H.LookupStaticMethodByKernelProcedure(target)); | |
| 4680 | |
| 4681 if (target->IsGetter()) { | |
| 4682 fragment_ = StaticCall(node->position(), function, 0); | |
| 4683 } else if (target->IsMethod()) { | |
| 4684 fragment_ = Constant(constant_evaluator_.EvaluateExpression(node)); | |
| 4685 } else { | |
| 4686 UNIMPLEMENTED(); | |
| 4687 } | |
| 4688 } | |
| 4689 } | 4660 } |
| 4690 | 4661 |
| 4691 | 4662 |
| 4692 void FlowGraphBuilder::VisitStaticSet(StaticSet* node) { | 4663 void FlowGraphBuilder::VisitStaticSet(StaticSet* node) { |
| 4693 CanonicalName* target = node->target(); | 4664 CanonicalName* target = node->target(); |
| 4694 if (target->IsField()) { | 4665 if (target->IsField()) { |
| 4695 const dart::Field& field = | 4666 const dart::Field& field = |
| 4696 dart::Field::ZoneHandle(Z, H.LookupFieldByKernelField(target)); | 4667 dart::Field::ZoneHandle(Z, H.LookupFieldByKernelField(target)); |
| 4697 const AbstractType& dst_type = AbstractType::ZoneHandle(Z, field.type()); | 4668 const AbstractType& dst_type = AbstractType::ZoneHandle(Z, field.type()); |
| 4698 Fragment instructions = TranslateExpression(node->expression()); | 4669 Fragment instructions = TranslateExpression(node->expression()); |
| (...skipping 1794 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6493 thread->clear_sticky_error(); | 6464 thread->clear_sticky_error(); |
| 6494 return error.raw(); | 6465 return error.raw(); |
| 6495 } | 6466 } |
| 6496 } | 6467 } |
| 6497 | 6468 |
| 6498 | 6469 |
| 6499 } // namespace kernel | 6470 } // namespace kernel |
| 6500 } // namespace dart | 6471 } // namespace dart |
| 6501 | 6472 |
| 6502 #endif // !defined(DART_PRECOMPILED_RUNTIME) | 6473 #endif // !defined(DART_PRECOMPILED_RUNTIME) |
| OLD | NEW |