[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