[pypy-svn] r17829 - pypy/dist/pypy/objspace/flow
arigo at codespeak.net
arigo at codespeak.net
Sat Sep 24 17:12:19 CEST 2005
Author: arigo
Date: Sat Sep 24 17:12:16 2005
New Revision: 17829
Modified:
pypy/dist/pypy/objspace/flow/model.py
Log:
Speed up Variable.rename().
Modified: pypy/dist/pypy/objspace/flow/model.py
==============================================================================
--- pypy/dist/pypy/objspace/flow/model.py (original)
+++ pypy/dist/pypy/objspace/flow/model.py Sat Sep 24 17:12:16 2005
@@ -5,6 +5,7 @@
# a discussion in Berlin, 4th of october 2003
from __future__ import generators
from pypy.tool.uid import Hashable
+from pypy.tool.sourcetools import PY_IDENTIFIER
"""
memory size before and after introduction of __slots__
@@ -217,7 +218,7 @@
name = property(name)
def renamed(self):
- return isinstance(self._name, str)
+ return type(self._name) is not int
renamed = property(renamed)
def __init__(self, name=None):
@@ -237,19 +238,23 @@
return '%s' % self.name
def rename(self, name):
- if self.renamed:
+ my_number = self._name
+ if type(my_number) is not int: # don't rename several times
return
- if isinstance(name, Variable):
- if not name.renamed:
+ if type(name) is not str:
+ #assert isinstance(name, Variable) -- disabled for speed reasons
+ name = name._name
+ if type(name) is int: # the other Variable wasn't renamed either
return
- name = name.name[:name.name.rfind('_')]
- # remove strange characters in the name
- name = ''.join([c for c in name if c.isalnum() or c == '_'])
- if not name:
- return
- if '0' <= name[0] <= '9':
- name = '_' + name
- self._name = name + '_' + self.name[1:]
+ name = name[:name.rfind('_')]
+ else:
+ # remove strange characters in the name
+ name = name.translate(PY_IDENTIFIER)
+ if not name:
+ return
+ if name[0] <= '9': # skipped the '0' <= which is always true
+ name = '_' + name
+ self._name = '%s_%d' % (name, my_number)
def __reduce_ex__(self, *args):
if hasattr(self, 'concretetype'):
More information about the Pypy-commit
mailing list