[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