[pypy-svn] r22747 - in pypy/dist/pypy/translator/c: . test
mwh at codespeak.net
mwh at codespeak.net
Fri Jan 27 18:02:09 CET 2006
Author: mwh
Date: Fri Jan 27 18:02:06 2006
New Revision: 22747
Added:
pypy/dist/pypy/translator/c/newfuncgen.py
- copied unchanged from r22720, pypy/dist/pypy/translator/c/funcgen.py
pypy/dist/pypy/translator/c/test/test_newgc.py (contents, props changed)
Modified:
pypy/dist/pypy/translator/c/genc.py
pypy/dist/pypy/translator/c/node.py
Log:
(cfbolz,mwh)
hacks towards being able to use a custom function code generator,
the idea being to make this code generator work with the new style
of handling gc operations.
Modified: pypy/dist/pypy/translator/c/genc.py
==============================================================================
--- pypy/dist/pypy/translator/c/genc.py (original)
+++ pypy/dist/pypy/translator/c/genc.py Fri Jan 27 18:02:06 2006
@@ -19,12 +19,14 @@
_compiled = False
symboltable = None
stackless = False
+ use_new_funcgen = False
- def __init__(self, translator, entrypoint, gcpolicy=None, libraries=None, thread_enabled=False):
+ def __init__(self, translator, entrypoint, gcpolicy=None, libraries=None, thread_enabled=False, use_new_funcgen=False):
self.translator = translator
self.entrypoint = entrypoint
self.gcpolicy = gcpolicy
self.thread_enabled = thread_enabled
+ self.use_new_funcgen = use_new_funcgen
if libraries is None:
libraries = []
@@ -38,6 +40,7 @@
if self.stackless:
from pypy.translator.c.stackless import StacklessData
db.stacklessdata = StacklessData(db)
+ db.use_new_funcgen = self.use_new_funcgen
# we need a concrete gcpolicy to do this
self.libraries += db.gcpolicy.gc_libraries()
Modified: pypy/dist/pypy/translator/c/node.py
==============================================================================
--- pypy/dist/pypy/translator/c/node.py (original)
+++ pypy/dist/pypy/translator/c/node.py Fri Jan 27 18:02:06 2006
@@ -5,6 +5,7 @@
parentlink, Ptr, PyObject, Void, OpaqueType, Float, \
RuntimeTypeInfo, getRuntimeTypeInfo, Char
from pypy.translator.c.funcgen import FunctionCodeGenerator
+from pypy.translator.c.newfuncgen import FunctionCodeGenerator as NewFunctionCodeGenerator
from pypy.translator.c.external import CExternalFunctionCodeGenerator
from pypy.translator.c.support import USESLOTS # set to False if necessary while refactoring
from pypy.translator.c.support import cdecl, somelettersfrom, c_string_constant
@@ -548,8 +549,11 @@
elif hasattr(fnobj, 'graph'):
cpython_exc = getattr(fnobj, 'exception_policy', None) == "CPython"
if hasattr(db, 'stacklessdata'):
+ assert not db.use_new_funcgen, "can't use stackless with the new funcgen yet"
from pypy.translator.c.stackless import SlpFunctionCodeGenerator
gencls = SlpFunctionCodeGenerator
+ elif db.use_new_funcgen:
+ gencls = NewFunctionCodeGenerator
else:
gencls = FunctionCodeGenerator
return gencls(fnobj.graph, db, cpython_exc, functionname)
Added: pypy/dist/pypy/translator/c/test/test_newgc.py
==============================================================================
--- (empty file)
+++ pypy/dist/pypy/translator/c/test/test_newgc.py Fri Jan 27 18:02:06 2006
@@ -0,0 +1,29 @@
+import autopath
+import sys
+import py
+from py.test import raises
+
+from pypy.translator.tool.cbuild import skip_missing_compiler
+from pypy.translator.translator import TranslationContext
+from pypy.translator.c import genc
+
+from pypy.rpython.memory.gctransform import GCTransformer
+
+def compile_func(fn, inputtypes):
+ t = TranslationContext()
+ t.buildannotator().build_types(fn, inputtypes)
+ t.buildrtyper().specialize()
+# GCTransformer(t.graphs).transform()
+
+ builder = genc.CExtModuleBuilder(t, fn, use_new_funcgen=True)
+ builder.generate_source()
+ skip_missing_compiler(builder.compile)
+ builder.import_module()
+ return builder.get_entry_point()
+
+
+def test_something():
+ def f():
+ return 1
+ fn = compile_func(f, [])
+ assert fn() == 1
More information about the Pypy-commit
mailing list