Author: Maciej Fijalkowski <[email protected]>
Branch: kill-someobject
Changeset: r57862:1dd0eec7c927
Date: 2012-10-07 20:58 +0200
http://bitbucket.org/pypy/pypy/changeset/1dd0eec7c927/
Log: (arigo, fijal, alex) kill more stuff, start passing C tests
diff --git a/pypy/translator/c/extfunc.py b/pypy/translator/c/extfunc.py
--- a/pypy/translator/c/extfunc.py
+++ b/pypy/translator/c/extfunc.py
@@ -112,13 +112,14 @@
yield ('RPyClearException', exctransformer.rpyexc_clear_ptr.value)
yield ('RPyRaiseException', exctransformer.rpyexc_raise_ptr.value)
- for pyexccls in exceptiondata.standardexceptions:
- exc_llvalue = exceptiondata
+ for exccls in exceptiondata.standardexceptions:
+ exc_llvalue = exceptiondata.get_standard_ll_exc_instance_by_class(
+ exccls)
# strange naming here because the macro name must be
# a substring of PyExc_%s
- name = pyexccls.__name__
- if pyexccls.__module__ != 'exceptions':
- name = '%s_%s' % (pyexccls.__module__.replace('.', '__'), name)
+ name = exccls.__name__
+ if exccls.__module__ != 'exceptions':
+ name = '%s_%s' % (exccls.__module__.replace('.', '__'), name)
yield ('RPyExc_%s' % name, exc_llvalue)
diff --git a/pypy/translator/c/src/exception.h
b/pypy/translator/c/src/exception.h
--- a/pypy/translator/c/src/exception.h
+++ b/pypy/translator/c/src/exception.h
@@ -2,6 +2,8 @@
/************************************************************/
/*** C header subsection: exceptions ***/
+#ifdef HAVE_RTYPER // shrug, hopefully dies with PYPY_NOT_MAIN_FILE
+
/* just a renaming, unless DO_LOG_EXC is set */
#define RPyExceptionOccurred RPyExceptionOccurred1
#define RPY_DEBUG_RETURN() /* nothing */
@@ -64,3 +66,5 @@
RPyRaiseException(RPYTHON_TYPE_OF_EXC_INST(rexc), rexc);
}
#endif /* PYPY_NOT_MAIN_FILE */
+
+#endif
diff --git a/pypy/translator/c/src/support.h b/pypy/translator/c/src/support.h
--- a/pypy/translator/c/src/support.h
+++ b/pypy/translator/c/src/support.h
@@ -91,5 +91,3 @@
# define RPyNLenItem(array, index) ((array)->items[index])
# define RPyBareItem(array, index) ((array)[index])
#endif
-
-#endif /* PYPY_NOT_MAIN_FILE */
diff --git a/pypy/translator/c/test/test_genc.py
b/pypy/translator/c/test/test_genc.py
--- a/pypy/translator/c/test/test_genc.py
+++ b/pypy/translator/c/test/test_genc.py
@@ -1,6 +1,7 @@
import sys
import py
+import ctypes
from pypy.rpython.lltypesystem.lltype import *
from pypy.annotation import model as annmodel
@@ -10,7 +11,6 @@
from pypy.rlib.entrypoint import entrypoint
from pypy.tool.nullpath import NullPyPathLocal
-
def compile(fn, argtypes, view=False, gcpolicy="ref", backendopt=True,
annotatorpolicy=None):
t = Translation(fn, argtypes, gc=gcpolicy, backend="c",
@@ -20,26 +20,20 @@
t.annotate()
# XXX fish
t.driver.config.translation.countmallocs = True
- compiled_fn = t.compile_c()
+ so_name = t.compile_c()
try:
if py.test.config.option.view:
t.view()
except AttributeError:
pass
- malloc_counters = t.driver.cbuilder.get_malloc_counters()
- def checking_fn(*args, **kwds):
- if 'expected_extra_mallocs' in kwds:
- expected_extra_mallocs = kwds.pop('expected_extra_mallocs')
- else:
- expected_extra_mallocs = 0
- res = compiled_fn(*args, **kwds)
- mallocs, frees = malloc_counters()
- if isinstance(expected_extra_mallocs, int):
- assert mallocs - frees == expected_extra_mallocs
- else:
- assert mallocs - frees in expected_extra_mallocs
- return res
- return checking_fn
+ def f(*args):
+ assert len(args) == len(argtypes)
+ for arg, argtype in zip(args, argtypes):
+ assert isinstance(arg, argtype)
+ dll = ctypes.CDLL(str(so_name))
+ return getattr(dll, 'pypy_g_' + fn.__name__)(*args)
+ f.__name__ = fn.__name__
+ return f
def test_simple():
def f(x):
@@ -62,46 +56,13 @@
t.config.translation.countmallocs = True
t.config.translation.dont_write_c_files = True
- builder = genc.CExtModuleBuilder(t, f, config=t.config)
+ builder = genc.CStandaloneBuilder(t, f, config=t.config)
builder.generate_source()
assert isinstance(builder.targetdir, NullPyPathLocal)
- assert builder.targetdir.listdir() == []
+ for f in builder.targetdir.listdir():
+ assert not str(f).endswith('.c')
-def test_simple_lambda():
- f = lambda x: x*2
- t = TranslationContext()
- t.buildannotator().build_types(f, [int])
- t.buildrtyper().specialize()
-
- t.config.translation.countmallocs = True
- builder = genc.CExtModuleBuilder(t, f, config=t.config)
- builder.generate_source()
- builder.compile()
- f1 = builder.get_entry_point()
-
- assert f1(5) == 10
-
-def test_py_capi_exc():
- def f(x):
- if x:
- l = None
- else:
- l = [2]
- x = x*2
- return l[0]
- t = TranslationContext()
- t.buildannotator().build_types(f, [int])
- t.buildrtyper().specialize()
-
- builder = genc.CExtModuleBuilder(t, f, config=t.config)
- builder.generate_source()
- builder.compile()
- f1 = builder.get_entry_point(isolated=True)
-
- x = py.test.raises(Exception, f1, "world")
- assert not isinstance(x.value, EOFError) # EOFError === segfault
-
def test_rlist():
def f(x):
l = [x]
diff --git a/pypy/translator/driver.py b/pypy/translator/driver.py
--- a/pypy/translator/driver.py
+++ b/pypy/translator/driver.py
@@ -563,8 +563,7 @@
self.c_entryp = cbuilder.executable_name
self.create_exe()
else:
- isolated = self._backend_extra_options.get('c_isolated', False)
- self.c_entryp = cbuilder.get_entry_point(isolated=isolated)
+ self.c_entryp = cbuilder.get_entry_point()
#
task_compile_c = taskdef(task_compile_c, ['source_c'], "Compiling c
source")
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit