[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