|
@@ -365,6 +365,11 @@ class LoweringState(object):
|
|
|
self.load_definition(value.root_node)),
|
|
|
tree_ir.LoadLocalInstruction(local_name))
|
|
|
|
|
|
+ def lower_resolve_local(self, value):
|
|
|
+ """Lowers a 'resolve-local' value."""
|
|
|
+ return tree_ir.LoadLocalInstruction(
|
|
|
+ self.local_name_map.get_local_name(value.variable.node_id))
|
|
|
+
|
|
|
def lower_alloc_root_node(self, value):
|
|
|
"""Lowers an 'alloc-root-node' value."""
|
|
|
local_name = tree_ir.VariableName(self.__get_root_node_name(value))
|
|
@@ -381,12 +386,24 @@ class LoweringState(object):
|
|
|
"""Lowers a 'free-root-node' value."""
|
|
|
return tree_ir.DeleteEdgeInstruction(self.__get_root_edge_name(value.root_node))
|
|
|
|
|
|
+ def lower_load_pointer(self, value):
|
|
|
+ """Lowers a 'load' value."""
|
|
|
+ return bytecode_to_tree.create_access(self.load_definition(value.pointer))
|
|
|
+
|
|
|
+ def lower_store_pointer(self, value):
|
|
|
+ """Lowers a 'store' value."""
|
|
|
+ return bytecode_to_tree.create_assign(
|
|
|
+ self.load_definition(value.pointer), self.load_definition(value.value))
|
|
|
+
|
|
|
value_lowerings = {
|
|
|
cfg_ir.Literal : lower_literal,
|
|
|
cfg_ir.CheckLocalExists : lower_check_local_exists,
|
|
|
cfg_ir.DeclareLocal : lower_declare_local,
|
|
|
+ cfg_ir.ResolveLocal : lower_resolve_local,
|
|
|
cfg_ir.AllocateRootNode : lower_alloc_root_node,
|
|
|
- cfg_ir.DeallocateRootNode : lower_free_root_node
|
|
|
+ cfg_ir.DeallocateRootNode : lower_free_root_node,
|
|
|
+ cfg_ir.LoadPointer : lower_load_pointer,
|
|
|
+ cfg_ir.StoreAtPointer : lower_store_pointer
|
|
|
}
|
|
|
|
|
|
def lower_flow(self, flow):
|