# HG changeset patch # User Paul Boddie # Date 1243181527 -7200 # Node ID be4035baf424981183874b6c3ca5e973f37c10d7 # Parent f7698e3444e0b81a48a8134b0ea8ac4756a143e2 Fixed direct invocation locations by recording the body block on each function. diff -r f7698e3444e0 -r be4035baf424 micropython/ast.py --- a/micropython/ast.py Sun May 24 02:29:50 2009 +0200 +++ b/micropython/ast.py Sun May 24 18:12:07 2009 +0200 @@ -599,16 +599,16 @@ # Visiting of the code occurs when get_code is invoked on this node. else: - body_block = self.new_block() - check_block = self.new_block() - # Check frames using the function's details. fn = node.unit nparams = len(fn.positional_names) ndefaults = len(fn.defaults) - self._generateFunctionContextTest(node, check_block, body_block) + fn.body_block = self.new_block() + check_block = self.new_block() + + self._generateFunctionContextTest(node, check_block, fn.body_block) # Check the number of parameters and defaults. @@ -620,7 +620,7 @@ # Produce the body. - self.set_block(body_block) + self.set_block(fn.body_block) extend = ExtendFrame() self.new_op(extend) @@ -676,16 +676,16 @@ # Visiting of the code occurs when get_code is invoked on this node. else: - body_block = self.new_block() - check_block = self.new_block() - # Check frames using the function's details. fn = node.unit nparams = len(fn.positional_names) ndefaults = len(fn.defaults) - self._generateFunctionContextTest(node, check_block, body_block) + fn.body_block = self.new_block() + check_block = self.new_block() + + self._generateFunctionContextTest(node, check_block, fn.body_block) # Check the number of parameters and defaults. @@ -697,7 +697,7 @@ # Produce the body. - self.set_block(body_block) + self.set_block(fn.body_block) extend = ExtendFrame() self.new_op(extend) diff -r f7698e3444e0 -r be4035baf424 micropython/data.py --- a/micropython/data.py Sun May 24 02:29:50 2009 +0200 +++ b/micropython/data.py Sun May 24 18:12:07 2009 +0200 @@ -927,11 +927,12 @@ self.location = None self.code_location = None - self.code_body_location = None # Program-related details. self.blocks = None + self.body_block = None + self.temp_usage = 0 self.local_usage = 0 self.all_local_usage = 0 @@ -948,9 +949,8 @@ def __repr__(self): if self.location is not None: - return "Function(%r, %s, %r, location=%r, code_location=%r, code_body_location=%r)" % ( - self.name, shortrepr(self.parent), self.argnames, self.location, self.code_location, - self.code_body_location + return "Function(%r, %s, %r, location=%r, code_location=%r)" % ( + self.name, shortrepr(self.parent), self.argnames, self.location, self.code_location ) else: return "Function(%r, %s, %r)" % ( @@ -976,7 +976,7 @@ ] def get_direct_invocation_location(self): - return self.code_body_location + return self.body_block.location # Namespace-related methods.