[pypy-svn] r8471 - pypy/dist/pypy/objspace/flow

odie at codespeak.net odie at codespeak.net
Sat Jan 22 17:16:49 CET 2005


Author: odie
Date: Sat Jan 22 17:16:49 2005
New Revision: 8471

Modified:
   pypy/dist/pypy/objspace/flow/flowcontext.py
   pypy/dist/pypy/objspace/flow/model.py
Log:
Propagate variable names to improve readability.

Modified: pypy/dist/pypy/objspace/flow/flowcontext.py
==============================================================================
--- pypy/dist/pypy/objspace/flow/flowcontext.py	(original)
+++ pypy/dist/pypy/objspace/flow/flowcontext.py	Sat Jan 22 17:16:49 2005
@@ -111,6 +111,10 @@
             return
         next_instr = frame.next_instr
         self.crnt_offset = next_instr # save offset for opcode
+        varnames = frame.code.getvarnames()
+        for name, w_value in zip(varnames, frame.getfastscope()):
+            if isinstance(w_value, Variable):
+                w_value.rename(name)
         if next_instr in self.joinpoints:
             currentstate = FrameState(frame)
             # can 'currentstate' be merged with one of the blocks that
@@ -223,6 +227,6 @@
             if isinstance(node, EggBlock):
                 mapping = {}
                 for a in node.inputargs:
-                    mapping[a] = Variable()
+                    mapping[a] = Variable(a)
                 node.renamevariables(mapping)
         traverse(fixegg, self.graph)

Modified: pypy/dist/pypy/objspace/flow/model.py
==============================================================================
--- pypy/dist/pypy/objspace/flow/model.py	(original)
+++ pypy/dist/pypy/objspace/flow/model.py	Sat Jan 22 17:16:49 2005
@@ -118,15 +118,31 @@
 class Variable:
     counter = 0
     instances = {}
+    renamed = False
+
     def __init__(self, name=None):
-        if name is None:
-            name = 'v%d' % Variable.counter
-            Variable.counter += 1
-        self.name = name
-        Variable.instances[name] = self
+        self.name = 'v%d' % Variable.counter
+        Variable.instances[self.name] = self
+        Variable.counter += 1
+        if name is not None:
+            self.rename(name)
+
     def __repr__(self):
         return '%s' % self.name
 
+    def rename(self, name):
+        if self.renamed:
+            return
+        if isinstance(name, Variable):
+            if not name.renamed:
+                return
+            name = name.name[:name.name.rfind('_')]
+        del Variable.instances[self.name]
+        self.renamed = True
+        self.name = name + '_' + self.name[1:]
+        Variable.instances[self.name] = self
+
+
 class Constant:
     def __init__(self, value):
         self.value = value     # a concrete value



More information about the Pypy-commit mailing list