[pypy-svn] r48182 - in pypy/dist/pypy/translator/llvm: . module

rxe at codespeak.net rxe at codespeak.net
Mon Oct 29 22:59:41 CET 2007


Author: rxe
Date: Mon Oct 29 22:59:38 2007
New Revision: 48182

Added:
   pypy/dist/pypy/translator/llvm/modwrapper.py
      - copied, changed from r48167, pypy/dist/pypy/translator/llvm/exception.py
Removed:
   pypy/dist/pypy/translator/llvm/exception.py
Modified:
   pypy/dist/pypy/translator/llvm/buildllvm.py
   pypy/dist/pypy/translator/llvm/genllvm.py
   pypy/dist/pypy/translator/llvm/module/excsupport.py
Log:
whack until llvm backend returns more rich types.  now passing 48/57 test_rlist.

Modified: pypy/dist/pypy/translator/llvm/buildllvm.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/buildllvm.py	(original)
+++ pypy/dist/pypy/translator/llvm/buildllvm.py	Mon Oct 29 22:59:38 2007
@@ -3,80 +3,9 @@
 
 import py
 
-from pypy.translator.llvm.log import log
 from pypy.translator.tool import stdoutcapture
-
-def write_ctypes_module(genllvm, dllname):
-    """ use ctypes to create a temporary module """
-
-    template = """
-import ctypes
-from os.path import join, dirname, realpath
-_c = ctypes.CDLL(join(dirname(realpath(__file__)), "%(dllname)s"))
-
-_setup = False
-
-class LLVMException(Exception):
-    pass
-
-%(name)s = _c.__entrypoint__%(name)s
-%(name)s.argtypes = %(args)s
-%(name)s.restype = %(returntype)s
-
-%(name)s_raised = _c.__entrypoint__raised_LLVMException
-%(name)s_raised.argtypes = []
-%(name)s_raised.restype = ctypes.c_int
-
-GC_get_heap_size_wrapper = _c.GC_get_heap_size
-GC_get_heap_size_wrapper.argtypes = []
-GC_get_heap_size_wrapper.restype = ctypes.c_int
-
-startup_code = _c.ctypes_RPython_StartupCode
-startup_code.argtypes = []
-startup_code.restype = ctypes.c_int
-
-def %(name)s_wrapper(*args):
-    global _setup
-    if not _setup:
-        if not startup_code():
-            raise LLVMException("Failed to startup")
-        _setup = True
-    result = %(name)s(*args)
-    if %(name)s_raised():
-        raise LLVMException("Exception raised")
-    if %(rt_isbool)s:
-        return bool(result)
-    else:
-        return result
-"""
-
-    import ctypes
-    from pypy.rpython.lltypesystem import lltype 
-
-    basename = genllvm.filename.purebasename + '_wrapper.py'
-    modfilename = genllvm.filename.new(basename = basename)
-
-    TO_CTYPES = {lltype.Bool: "ctypes.c_int",
-                 lltype.Float: "ctypes.c_double",
-                 lltype.Char: "ctypes.c_char",
-                 lltype.Signed: "ctypes.c_int",
-                 lltype.Unsigned: "ctypes.c_uint",
-                 lltype.SignedLongLong: "ctypes.c_longlong",
-                 lltype.UnsignedLongLong: "ctypes.c_ulonglong",
-                 lltype.Void: None # XXX why no ctypes.c_void ?
-                 }
-
-    name = genllvm.entrynode.ref.strip("%")
-    
-    g = genllvm.entrynode.graph  
-    rt = g.returnblock.inputargs[0].concretetype
-    returntype = TO_CTYPES[rt]
-    inputargtypes = [TO_CTYPES[a.concretetype] for a in g.startblock.inputargs]
-    args = '[%s]' % ", ".join(inputargtypes)
-
-    rt_isbool = rt is lltype.Bool
-    modfilename.write(template % locals())
-    return modfilename.purebasename
+from pypy.translator.llvm.log import log
+from pypy.translator.llvm.modwrapper import write_ctypes_module
 
 def llvm_is_on_path():
     if py.path.local.sysfind("llvm-as") is None or \

Modified: pypy/dist/pypy/translator/llvm/genllvm.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/genllvm.py	(original)
+++ pypy/dist/pypy/translator/llvm/genllvm.py	Mon Oct 29 22:59:38 2007
@@ -154,9 +154,10 @@
         
         self._checkpoint('write support implentations')
 
-        # write exception implementaions
-        from pypy.translator.llvm.exception import llvm_implcode
-        codewriter.write_lines(llvm_implcode(self.entrynode))
+        # write wrapper code
+        if not self.standalone:
+            from pypy.translator.llvm.modwrapper import llvm_implcode
+            codewriter.write_lines(llvm_implcode(self.entrynode))
 
         # write all node implementations
         for node in self.db.getnodes():

Modified: pypy/dist/pypy/translator/llvm/module/excsupport.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/module/excsupport.py	(original)
+++ pypy/dist/pypy/translator/llvm/module/excsupport.py	Mon Oct 29 22:59:38 2007
@@ -1,22 +1,14 @@
 
 entrycode = '''
-ccc %(returntype)s%%__entrypoint__%(entrypointname)s {
+ccc %(returntype)s %%__entrypoint__%(entrypointname)s {
     store %%RPYTHON_EXCEPTION_VTABLE* null, %%RPYTHON_EXCEPTION_VTABLE** %%last_exception_type
     %%result = call %(cconv)s %(returntype)s%%%(entrypointname)s
-    %%tmp    = load %%RPYTHON_EXCEPTION_VTABLE** %%last_exception_type
-    %%exc    = seteq %%RPYTHON_EXCEPTION_VTABLE* %%tmp, null
-    br bool %%exc, label %%no_exception, label %%exception
-
-no_exception:
     ret %(returntype)s %%result
-
-exception:
-    ret %(noresult)s
 }
 '''
 
 voidentrycode = '''
-ccc %(returntype)s%%__entrypoint__%(entrypointname)s {
+ccc %(returntype)s %%__entrypoint__%(entrypointname)s {
     store %%RPYTHON_EXCEPTION_VTABLE* null, %%RPYTHON_EXCEPTION_VTABLE** %%last_exception_type
     call %(cconv)s %(returntype)s%%%(entrypointname)s
     ret void



More information about the Pypy-commit mailing list