Chromium Code Reviews| Index: runtime/vm/flow_graph_builder.cc |
| =================================================================== |
| --- runtime/vm/flow_graph_builder.cc (revision 4911) |
| +++ runtime/vm/flow_graph_builder.cc (working copy) |
| @@ -548,23 +548,42 @@ |
| void EffectGraphVisitor::VisitLoadInstanceFieldNode( |
| LoadInstanceFieldNode* node) { |
| - Bailout("EffectGraphVisitor::VisitLoadInstanceFieldNode"); |
| + ValueGraphVisitor for_instance(owner(), temp_index()); |
| + node->instance()->Visit(&for_instance); |
| + Append(for_instance); |
| + LoadInstanceFieldComp* load = |
| + new LoadInstanceFieldComp(node, for_instance.value()); |
| + ReturnComputation(load); |
| } |
| void EffectGraphVisitor::VisitStoreInstanceFieldNode( |
| StoreInstanceFieldNode* node) { |
| - Bailout("EffectGraphVisitor::VisitStoreInstanceFieldNode"); |
| + ValueGraphVisitor for_instance(owner(), temp_index()); |
| + node->instance()->Visit(&for_instance); |
| + Append(for_instance); |
| + ValueGraphVisitor for_value(owner(), temp_index()); |
|
Kevin Millikin (Google)
2012/03/05 11:02:41
Second argument should be for_instance.temp_index(
srdjan
2012/03/05 18:35:21
Done.
|
| + node->value()->Visit(&for_value); |
| + Append(for_value); |
| + StoreInstanceFieldComp* store = |
| + new StoreInstanceFieldComp(node, for_instance.value(), for_value.value()); |
| + ReturnComputation(store); |
| } |
| void EffectGraphVisitor::VisitLoadStaticFieldNode(LoadStaticFieldNode* node) { |
| - Bailout("EffectGraphVisitor::VisitLoadStaticFieldNode"); |
| + LoadStaticFieldComp* load = new LoadStaticFieldComp(node->field()); |
| + ReturnComputation(load); |
| } |
| void EffectGraphVisitor::VisitStoreStaticFieldNode(StoreStaticFieldNode* node) { |
| - Bailout("EffectGraphVisitor::VisitStoreStaticFieldNode"); |
| + ValueGraphVisitor for_value(owner(), temp_index()); |
| + node->value()->Visit(&for_value); |
| + Append(for_value); |
| + StoreStaticFieldComp* store = |
| + new StoreStaticFieldComp(node, for_value.value()); |
| + ReturnComputation(store); |
| } |
| @@ -772,6 +791,37 @@ |
| } |
| +void FlowGraphPrinter::VisitLoadInstanceField(LoadInstanceFieldComp* comp) { |
| + OS::Print("LoadInstanceField(%s, ", String::Handle(comp->name()).ToCString()); |
| + comp->instance()->Accept(this); |
| + OS::Print(")"); |
| +} |
| + |
| + |
| +void FlowGraphPrinter::VisitStoreInstanceField(StoreInstanceFieldComp* comp) { |
| + OS::Print("StoreInstanceField(%s, ", |
| + String::Handle(comp->field_name()).ToCString()); |
| + comp->instance()->Accept(this); |
| + OS::Print(", "); |
| + comp->value()->Accept(this); |
| + OS::Print(")"); |
| +} |
| + |
| + |
| +void FlowGraphPrinter::VisitLoadStaticField(LoadStaticFieldComp* comp) { |
| + OS::Print("LoadStaticField(%s)", |
| + String::Handle(comp->field().name()).ToCString()); |
| +} |
| + |
| + |
| +void FlowGraphPrinter::VisitStoreStaticField(StoreStaticFieldComp* comp) { |
| + OS::Print("StoreStaticField(%s, ", |
| + String::Handle(comp->field().name()).ToCString()); |
| + comp->value()->Accept(this); |
| + OS::Print(")"); |
| +} |
| + |
| + |
| void FlowGraphPrinter::VisitStoreIndexed(StoreIndexedComp* comp) { |
| OS::Print("StoreIndexed("); |
| comp->placeholder()->Accept(this); |