Commit bf259422 authored by Robert Bradshaw's avatar Robert Bradshaw

Fix PersistentNode analyse

parent 91ffc474
......@@ -4037,6 +4037,7 @@ class PersistentNode(ExprNode):
subexprs = ["arg"]
temp_counter = 0
generate_counter = 0
analyse_counter = 0
result_code = None
def __init__(self, arg, uses):
......@@ -4045,13 +4046,15 @@ class PersistentNode(ExprNode):
self.uses = uses
def analyse_types(self, env):
if self.analyse_counter == 0:
self.arg.analyse_types(env)
self.type = self.arg.type
self.result_ctype = self.arg.result_ctype
self.is_temp = 1
self.analyse_counter += 1
def calculate_result_code(self):
return self.arg.result_code
return self.result_code
def generate_evaluation_code(self, code):
if self.generate_counter == 0:
......@@ -4071,12 +4074,15 @@ class PersistentNode(ExprNode):
def allocate_temps(self, env, result=None):
if self.temp_counter == 0:
self.arg.allocate_temps(env)
self.allocate_temp(env, result)
self.arg.release_temp(env)
self.temp_counter += 1
def allocate_temp(self, env, result=None):
if result is None:
self.result_code = env.allocate_temp(self.type)
else:
self.result_code = result
self.arg.release_temp(env)
self.temp_counter += 1
def release_temp(self, env):
if self.temp_counter == self.uses:
......
......@@ -354,6 +354,7 @@ def create_generate_code(context, options, result):
return generate_code
def create_default_pipeline(context, options, result):
from Visitor import PrintTree
from ParseTreeTransforms import WithTransform, NormalizeTree, PostParse
from ParseTreeTransforms import AnalyseDeclarationsTransform, AnalyseExpressionsTransform
from ParseTreeTransforms import CreateClosureClasses, MarkClosureVisitor, DecoratorTransform
......
......@@ -213,6 +213,7 @@ class PrintTree(TreeVisitor):
def __call__(self, tree, phase=None):
print("Parse tree dump at phase '%s'" % phase)
self.visit(tree)
return tree
# Don't do anything about process_list, the defaults gives
# nice-looking name[idx] nodes which will visually appear
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment