[pypy-svn] r30135 - in pypy/dist/pypy/translator/cli: . test
antocuni at codespeak.net
antocuni at codespeak.net
Mon Jul 17 17:41:05 CEST 2006
Author: antocuni
Date: Mon Jul 17 17:40:59 2006
New Revision: 30135
Modified:
pypy/dist/pypy/translator/cli/class_.py
pypy/dist/pypy/translator/cli/database.py
pypy/dist/pypy/translator/cli/test/test_class.py
Log:
Make sure to use unique names for classes in the same namespace.
Modified: pypy/dist/pypy/translator/cli/class_.py
==============================================================================
--- pypy/dist/pypy/translator/cli/class_.py (original)
+++ pypy/dist/pypy/translator/cli/class_.py Mon Jul 17 17:40:59 2006
@@ -7,7 +7,8 @@
self.db = db
self.cts = db.type_system_class(db)
self.classdef = classdef
- self.namespace, self.name = self.cts.split_class_name(classdef._name)
+ self.namespace, name = self.cts.split_class_name(classdef._name)
+ self.name = self.db.get_unique_class_name(self.namespace, name)
def dependencies(self):
if not self.is_root(self.classdef):
Modified: pypy/dist/pypy/translator/cli/database.py
==============================================================================
--- pypy/dist/pypy/translator/cli/database.py (original)
+++ pypy/dist/pypy/translator/cli/database.py Mon Jul 17 17:40:59 2006
@@ -36,6 +36,7 @@
self.type_system_class = type_system_class
self.cts = type_system_class(self)
self.classes = {} # classdef --> class_name
+ self.classnames = set() # (namespace, name)
self.functions = {} # graph --> function_name
self.methods = {} # graph --> method_name
self.consts = {} # value --> AbstractConst
@@ -82,6 +83,12 @@
# XXX: graph name are not guaranteed to be unique
return self.functions.get(graph, None)
+ def get_unique_class_name(self, namespace, name):
+ while (namespace, name) in self.classnames:
+ name += '_'
+ self.classnames.add((namespace, name))
+ return name
+
def class_name(self, classdef):
return self.classes.get(classdef, None)
Modified: pypy/dist/pypy/translator/cli/test/test_class.py
==============================================================================
--- pypy/dist/pypy/translator/cli/test/test_class.py (original)
+++ pypy/dist/pypy/translator/cli/test/test_class.py Mon Jul 17 17:40:59 2006
@@ -21,6 +21,18 @@
return call(a, x) + call(b, x)
assert self.interpret(fn, [0]) == 3
+ def test_same_name(self):
+ class A:
+ pass
+ B=A
+ class A:
+ pass
+ assert A is not B
+ assert A.__name__ == B.__name__
+ def fn():
+ obj1 = A()
+ obj2 = B()
+ self.interpret(fn, [])
class TestCliSpecialCase(CliTest, BaseTestRspecialcase):
pass
More information about the Pypy-commit
mailing list