[pypy-svn] r25745 - in pypy/dist/pypy: rpython/memory translator/backendopt translator/c
pedronis at codespeak.net
pedronis at codespeak.net
Wed Apr 12 23:19:06 CEST 2006
Author: pedronis
Date: Wed Apr 12 23:19:04 2006
New Revision: 25745
Modified:
pypy/dist/pypy/rpython/memory/gctransform.py
pypy/dist/pypy/translator/backendopt/inline.py
pypy/dist/pypy/translator/backendopt/support.py
pypy/dist/pypy/translator/c/exceptiontransform.py
Log:
avoid to leak variables in annotator.bindings for backendopts and gc/exc tranforms
Modified: pypy/dist/pypy/rpython/memory/gctransform.py
==============================================================================
--- pypy/dist/pypy/rpython/memory/gctransform.py (original)
+++ pypy/dist/pypy/rpython/memory/gctransform.py Wed Apr 12 23:19:04 2006
@@ -82,6 +82,7 @@
else:
insert_empty_block(None, link, newops)
+ self.links_to_split = None
v = Variable('vanishing_exc_value')
v.concretetype = self.get_lltype_of_exception_value()
graph.exc_cleanup = (v, self.pop_alive(v))
Modified: pypy/dist/pypy/translator/backendopt/inline.py
==============================================================================
--- pypy/dist/pypy/translator/backendopt/inline.py (original)
+++ pypy/dist/pypy/translator/backendopt/inline.py Wed Apr 12 23:19:04 2006
@@ -183,13 +183,13 @@
if isinstance(var, Constant):
return var
if var not in self.varmap:
- self.varmap[var] = copyvar(self.translator, var)
+ self.varmap[var] = copyvar(None, var)
return self.varmap[var]
def passon_vars(self, cache_key):
if cache_key in self._passon_vars:
return self._passon_vars[cache_key]
- result = [copyvar(self.translator, var)
+ result = [copyvar(None, var)
for var in self.original_passon_vars]
self._passon_vars[cache_key] = result
return result
@@ -312,13 +312,12 @@
exc_match.concretetype = typeOf(exc_match.value)
blocks = []
for i, link in enumerate(afterblock.exits[1:]):
- etype = copyvar(self.translator, copiedexceptblock.inputargs[0])
- evalue = copyvar(self.translator, copiedexceptblock.inputargs[1])
+ etype = copyvar(None, copiedexceptblock.inputargs[0])
+ evalue = copyvar(None, copiedexceptblock.inputargs[1])
passon_vars = self.passon_vars(i)
block = Block([etype, evalue] + passon_vars)
res = Variable()
res.concretetype = Bool
- self.translator.annotator.bindings[res] = annmodel.SomeBool()
cexitcase = Constant(link.llexitcase)
cexitcase.concretetype = typeOf(cexitcase.value)
args = [exc_match, etype, cexitcase]
@@ -350,8 +349,7 @@
def do_inline(self, block, index_operation):
- splitlink = split_block_with_keepalive(
- self.translator, block, index_operation)
+ splitlink = split_block_with_keepalive(block, index_operation)
afterblock = splitlink.target
# these variables have to be passed along all the links in the inlined
# graph because the original function needs them in the blocks after
@@ -360,7 +358,8 @@
# this copy is created with the method passon_vars
self.original_passon_vars = [arg for arg in block.exits[0].args
if isinstance(arg, Variable)]
- assert afterblock.operations[0] is self.op
+ assert afterblock.operations[0].opname is self.op.opname
+ self.op = afterblock.operations[0]
#vars that need to be passed through the blocks of the inlined function
linktoinlined = splitlink
copiedstartblock = self.copy_block(self.graph_to_inline.startblock)
Modified: pypy/dist/pypy/translator/backendopt/support.py
==============================================================================
--- pypy/dist/pypy/translator/backendopt/support.py (original)
+++ pypy/dist/pypy/translator/backendopt/support.py Wed Apr 12 23:19:04 2006
@@ -62,9 +62,9 @@
keepalive_ops.append(SpaceOperation('keepalive', [v], v_keepalive))
return keepalive_ops
-def split_block_with_keepalive(translator, block, index_operation,
+def split_block_with_keepalive(block, index_operation,
keep_alive_op_args=True):
- splitlink = split_block(translator, block, index_operation)
+ splitlink = split_block(None, block, index_operation)
afterblock = splitlink.target
conservative_keepalives = needs_conservative_livevar_calculation(block)
if conservative_keepalives:
@@ -78,7 +78,7 @@
newvar = afterblock.inputargs[index]
except ValueError:
splitlink.args.append(var)
- newvar = copyvar(translator, var)
+ newvar = copyvar(None, var)
afterblock.inputargs.append(newvar)
keep_alive_vars[i] = newvar
elif keep_alive_op_args and afterblock.operations:
@@ -88,8 +88,8 @@
keep_alive_vars = []
if afterblock.exitswitch == c_last_exception:
for link in afterblock.exits:
- betweenblock = insert_empty_block(translator, link)
- fresh_vars = [copyvar(translator, var) for var in keep_alive_vars]
+ betweenblock = insert_empty_block(None, link)
+ fresh_vars = [copyvar(None, var) for var in keep_alive_vars]
betweenblock.inputargs.extend(fresh_vars)
link.args.extend(keep_alive_vars)
betweenblock.operations = generate_keepalive(fresh_vars)
Modified: pypy/dist/pypy/translator/c/exceptiontransform.py
==============================================================================
--- pypy/dist/pypy/translator/c/exceptiontransform.py (original)
+++ pypy/dist/pypy/translator/c/exceptiontransform.py Wed Apr 12 23:19:04 2006
@@ -152,8 +152,7 @@
if not self.raise_analyzer.can_raise(op):
continue
- splitlink = support.split_block_with_keepalive(
- self.translator, block, i+1, False)
+ splitlink = support.split_block_with_keepalive(block, i+1, False)
afterblock = splitlink.target
if lastblock is block:
lastblock = afterblock
More information about the Pypy-commit
mailing list