Index: runtime/vm/kernel_binary_flowgraph.cc |
diff --git a/runtime/vm/kernel_binary_flowgraph.cc b/runtime/vm/kernel_binary_flowgraph.cc |
index 3fdd7a26aba7510267d8ee8b9e0e6a81561bb2f8..000edc55b485c995654244c0cfd2bfe521015c47 100644 |
--- a/runtime/vm/kernel_binary_flowgraph.cc |
+++ b/runtime/vm/kernel_binary_flowgraph.cc |
@@ -214,10 +214,10 @@ Fragment StreamingFlowGraphBuilder::BuildAt(intptr_t kernel_offset) { |
switch (tag) { |
case kInvalidExpression: |
return BuildInvalidExpression(); |
- // case kVariableGet: |
- // return VariableGet::ReadFrom(reader_); |
- // case kSpecializedVariableGet: |
- // return VariableGet::ReadFrom(reader_, payload); |
+ case kVariableGet: |
+ return BuildVariableGet(); |
+ case kSpecializedVariableGet: |
+ return BuildVariableGet(payload); |
// case kVariableSet: |
// return VariableSet::ReadFrom(reader_); |
// case kSpecializedVariableSet: |
@@ -483,6 +483,11 @@ String* StreamingFlowGraphBuilder::KernelString(intptr_t str_index) { |
return new String(data, bytes); |
} |
+dart::LocalVariable* StreamingFlowGraphBuilder::LookupVariable( |
+ intptr_t kernel_offset) { |
+ return flow_graph_builder_->LookupVariable(kernel_offset); |
+} |
+ |
Fragment StreamingFlowGraphBuilder::DebugStepCheck(TokenPosition position) { |
return flow_graph_builder_->DebugStepCheck(position); |
} |
@@ -529,6 +534,27 @@ Fragment StreamingFlowGraphBuilder::BuildInvalidExpression() { |
return ThrowNoSuchMethodError(); |
} |
+Fragment StreamingFlowGraphBuilder::BuildVariableGet() { |
+ ReadPosition(); |
+ intptr_t variable_kernel_position = ReadUInt(); |
+ ReadUInt(); // Variable index. |
+ |
+ // TODO(jensj): This is actually a "reader->ReadOptional<DartType>();". |
+ // Optional type below: Not currently implemented. |
+ Tag tag = ReadTag(); |
+ if (tag != kNothing) { |
+ UNIMPLEMENTED(); |
+ } |
+ |
+ return LoadLocal(LookupVariable(variable_kernel_position)); |
+} |
+ |
+Fragment StreamingFlowGraphBuilder::BuildVariableGet(uint8_t payload) { |
+ ReadPosition(); |
+ intptr_t variable_kernel_position = ReadUInt(); |
+ return LoadLocal(LookupVariable(variable_kernel_position)); |
+} |
+ |
Fragment StreamingFlowGraphBuilder::BuildStaticGet() { |
intptr_t saved_offset = ReaderOffset() - 1; // Include the tag. |
TokenPosition position = ReadPosition(); |