[pypy-svn] r48234 - pypy/dist/pypy/translator/llvm

rxe at codespeak.net rxe at codespeak.net
Thu Nov 1 13:54:03 CET 2007


Author: rxe
Date: Thu Nov  1 13:54:01 2007
New Revision: 48234

Modified:
   pypy/dist/pypy/translator/llvm/buildllvm.py
   pypy/dist/pypy/translator/llvm/genllvm.py
   pypy/dist/pypy/translator/llvm/modwrapper.py
Log:
make the whole way we make entry names and filenames saner and fix issue with names like <lambda> propgating through to filenames

Modified: pypy/dist/pypy/translator/llvm/buildllvm.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/buildllvm.py	(original)
+++ pypy/dist/pypy/translator/llvm/buildllvm.py	Thu Nov  1 13:54:01 2007
@@ -131,7 +131,7 @@
         self.lastdir = py.path.local()
         self.dirpath.chdir()
 
-        return llvmfile.purebasename
+        return self.genllvm.entry_name
         
     def make_module(self):
         base = self.setup()

Modified: pypy/dist/pypy/translator/llvm/genllvm.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/genllvm.py	(original)
+++ pypy/dist/pypy/translator/llvm/genllvm.py	Thu Nov  1 13:54:01 2007
@@ -177,7 +177,18 @@
         ptr = getfunctionptr(bk.getdesc(func).getuniquegraph())
         c = inputconst(lltype.typeOf(ptr), ptr)
         self.db.prepare_arg_value(c)
-        self.entry_func_name = func.func_name
+        
+        # ensure unqiue entry node name for testing
+        entry_node = self.db.obj2node[c.value._obj]
+        name = entry_node.name
+        if name in self.function_count:
+            self.function_count[name] += 1
+            name += '_%d' % self.function_count[name]
+            entry_node.name =  name
+        else:
+            self.function_count[name] = 1
+
+        self.entry_name = name[6:]
         return c.value._obj 
 
     def generate_ll_externs(self):
@@ -201,13 +212,7 @@
 
     def create_codewriter(self):
         # prevent running the same function twice in a test
-        if self.entry_func_name in self.function_count:
-            postfix = '_%d' % self.function_count[self.entry_func_name]
-            self.function_count[self.entry_func_name] += 1
-        else:
-            postfix = ''
-            self.function_count[self.entry_func_name] = 1
-        filename = udir.join(self.entry_func_name + postfix).new(ext='.ll')
+        filename = udir.join(self.entry_name).new(ext='.ll')
         f = open(str(filename), 'w')
         return CodeWriter(f, self.db), filename
 

Modified: pypy/dist/pypy/translator/llvm/modwrapper.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/modwrapper.py	(original)
+++ pypy/dist/pypy/translator/llvm/modwrapper.py	Thu Nov  1 13:54:01 2007
@@ -132,7 +132,7 @@
 """
 
     epilog = """
-__entrypoint__ = _c.__entrypoint__%(name)s
+__entrypoint__ = _c.__entrypoint__pypy_%(name)s
 
 # %(RT)r
 to_llargs = %(to_llargs)s
@@ -157,7 +157,7 @@
     def __init__(self, genllvm, dllname):
         self.genllvm = genllvm
         self.dllname = dllname
-        basename = self.genllvm.filename.purebasename + '_wrapper.py'
+        basename = self.genllvm.entry_name + '_wrapper.py'
         self.modfilename = genllvm.filename.new(basename=basename)
         self.count = 0
 
@@ -166,7 +166,7 @@
         self.file.write(self.prolog % self.dllname)
         
         g = self.genllvm.entrynode.graph  
-        name = "pypy_" + g.name
+        name = self.genllvm.entry_name
 
         ARGS = [a.concretetype for a in g.startblock.inputargs]
         inputargtypes, to_llargs = self.build_args_to_ctypes_to_lltype(ARGS)



More information about the Pypy-commit mailing list