[pypy-svn] r66319 - pypy/branch/parser-compiler/pypy/interpreter/astcompiler

benjamin at codespeak.net benjamin at codespeak.net
Fri Jul 17 20:35:28 CEST 2009


Author: benjamin
Date: Fri Jul 17 20:35:27 2009
New Revision: 66319

Modified:
   pypy/branch/parser-compiler/pypy/interpreter/astcompiler/codegen.py
   pypy/branch/parser-compiler/pypy/interpreter/astcompiler/symtable.py
Log:
generate temporary variables on a scope by scope basis

Modified: pypy/branch/parser-compiler/pypy/interpreter/astcompiler/codegen.py
==============================================================================
--- pypy/branch/parser-compiler/pypy/interpreter/astcompiler/codegen.py	(original)
+++ pypy/branch/parser-compiler/pypy/interpreter/astcompiler/codegen.py	Fri Jul 17 20:35:27 2009
@@ -125,6 +125,7 @@
     def current_temporary_name(self):
         name = "_[%i]" % (self.temporary_name_counter,)
         self.temporary_name_counter += 1
+        assert self.scope.lookup(name) != symtable.SCOPE_UNKNOWN
         return name
 
     def sub_scope(self, kind, name, node):

Modified: pypy/branch/parser-compiler/pypy/interpreter/astcompiler/symtable.py
==============================================================================
--- pypy/branch/parser-compiler/pypy/interpreter/astcompiler/symtable.py	(original)
+++ pypy/branch/parser-compiler/pypy/interpreter/astcompiler/symtable.py	Fri Jul 17 20:35:27 2009
@@ -36,6 +36,7 @@
         self.varnames = []
         self.children = []
         self.free_vars = []
+        self.temp_name_counter = 1
         self.has_exec = False
         self.has_free = False
         self.child_has_free = False
@@ -47,6 +48,10 @@
     def lookup_role(self, name):
         return self.roles.get(self.mangle(name), SYM_BLANK)
 
+    def new_temporary_name(self):
+        self.note_symbol("_[%i]" % (self.temp_name_counter,), SYM_ASSIGNED)
+        self.temp_name_counter += 1
+
     def note_symbol(self, identifier, role):
         mangled = self.mangle(identifier)
         new_role = role
@@ -279,7 +284,6 @@
         self.scopes = {}
         self.scope = None
         self.stack = []
-        self.tmp_name_counter = 1
         top = ModuleScope(module)
         self.globs = top.roles
         self.push_scope(top)
@@ -314,10 +318,6 @@
         name = ".%i" % (pos,)
         self.note_symbol(name, SYM_PARAM)
 
-    def new_temporary_name(self):
-        self.note_symbol("_[%i]" % (self.tmp_name_counter,), SYM_ASSIGNED)
-        self.tmp_name_counter += 1
-
     def note_symbol(self, identifier, role):
         mangled = self.scope.note_symbol(identifier, role)
         if role & SYM_GLOBAL:
@@ -407,13 +407,13 @@
         self.pop_scope()
 
     def visit_ListComp(self, lc):
-        self.new_temporary_name()
+        self.scope.new_temporary_name()
         ast.GenericASTVisitor.visit_ListComp(self, lc)
 
     def visit_With(self, wih):
-        self.new_temporary_name()
+        self.scope.new_temporary_name()
         if wih.optional_vars:
-            self.new_temporary_name()
+            self.scope.new_temporary_name()
         ast.GenericASTVisitor.visit_With(self, wih)
 
     def visit_arguments(self, arguments):



More information about the Pypy-commit mailing list