[pypy-svn] r70541 - in pypy/branch/separate-compilation/pypy/translator: . c
afa at codespeak.net
afa at codespeak.net
Tue Jan 12 18:37:35 CET 2010
Author: afa
Date: Tue Jan 12 18:37:35 2010
New Revision: 70541
Modified:
pypy/branch/separate-compilation/pypy/translator/c/genc.py
pypy/branch/separate-compilation/pypy/translator/separate.py
Log:
It's probably not the best place, but at least move the code out of genc.py.
Modified: pypy/branch/separate-compilation/pypy/translator/c/genc.py
==============================================================================
--- pypy/branch/separate-compilation/pypy/translator/c/genc.py (original)
+++ pypy/branch/separate-compilation/pypy/translator/c/genc.py Tue Jan 12 18:37:35 2010
@@ -7,7 +7,7 @@
from pypy.translator.llsupport.wrapper import new_wrapper
from pypy.translator.gensupp import uniquemodulename, NameManager
from pypy.translator.tool.cbuild import ExternalCompilationInfo
-from pypy.rpython.lltypesystem import lltype, rffi
+from pypy.rpython.lltypesystem import lltype
from pypy.tool.udir import udir
from pypy.tool import isolate
from pypy.translator.c.support import log, c_string_constant
@@ -356,45 +356,10 @@
post_include_bits = forwards
)
+ from pypy.translator.separate import make_ll_import_function
for funcname, import_name in self.export_node_names.items():
functype = lltype.typeOf(self.entrypoint[funcname])
- from pypy.annotation import model
-
- imported_func = rffi.llexternal(
- import_name, functype.TO.ARGS, functype.TO.RESULT,
- compilation_info=import_eci,
- )
-
- if not functype.TO.ARGS:
- func = imported_func
- elif len(functype.TO.ARGS) == 1:
- ARG = functype.TO.ARGS[0]
- from pypy.rpython.lltypesystem import llmemory
- from pypy.rpython.extregistry import ExtRegistryEntry
-
- if isinstance(ARG, lltype.Ptr): # XXX more precise check?
- def convert(x):
- raiseNameError
-
- class Entry(ExtRegistryEntry):
- _about_ = convert
- s_result_annotation = model.lltype_to_annotation(ARG)
-
- def specialize_call(self, hop):
- # TODO: input type check
- [v_instance] = hop.inputargs(*hop.args_r)
- return hop.genop('force_cast', [v_instance],
- resulttype = ARG)
- else:
- def convert(x):
- return x
-
- def func(arg0):
- ll_arg0 = convert(arg0)
- ll_res = imported_func(ll_arg0)
- return ll_res
- else:
- raise NotImplementedError("Not supported")
+ func = make_ll_import_function(import_name, functype, import_eci)
setattr(mod, funcname, func)
return mod
Modified: pypy/branch/separate-compilation/pypy/translator/separate.py
==============================================================================
--- pypy/branch/separate-compilation/pypy/translator/separate.py (original)
+++ pypy/branch/separate-compilation/pypy/translator/separate.py Tue Jan 12 18:37:35 2010
@@ -42,3 +42,44 @@
return (isinstance(obj, (types.FunctionType, types.UnboundMethodType))
and getattr(obj, 'exported', False))
+def make_ll_import_function(name, functype, eci):
+ from pypy.rpython.lltypesystem import lltype, rffi
+ from pypy.annotation import model
+
+ imported_func = rffi.llexternal(
+ name, functype.TO.ARGS, functype.TO.RESULT,
+ compilation_info=eci,
+ )
+
+ if not functype.TO.ARGS:
+ func = imported_func
+ elif len(functype.TO.ARGS) == 1:
+ ARG = functype.TO.ARGS[0]
+ from pypy.rpython.lltypesystem import llmemory
+ from pypy.rpython.extregistry import ExtRegistryEntry
+
+ if isinstance(ARG, lltype.Ptr): # XXX more precise check?
+ def convert(x):
+ raiseNameError
+
+ class Entry(ExtRegistryEntry):
+ _about_ = convert
+ s_result_annotation = model.lltype_to_annotation(ARG)
+
+ def specialize_call(self, hop):
+ # TODO: input type check
+ [v_instance] = hop.inputargs(*hop.args_r)
+ return hop.genop('force_cast', [v_instance],
+ resulttype = ARG)
+ else:
+ def convert(x):
+ return x
+
+ def func(arg0):
+ ll_arg0 = convert(arg0)
+ ll_res = imported_func(ll_arg0)
+ return ll_res
+ else:
+ raise NotImplementedError("Not supported")
+ return func
+
More information about the Pypy-commit
mailing list