Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r146:910d0436c9ff Date: 2014-12-04 13:18 +0100 http://bitbucket.org/cffi/creflect/changeset/910d0436c9ff/
Log: type definitions diff --git a/zeffir/builder.c b/zeffir/builder.c --- a/zeffir/builder.c +++ b/zeffir/builder.c @@ -20,9 +20,6 @@ PyObject *result; char *p; - if (PyErr_Occurred()) - return NULL; - base_name_len = (ct != NULL ? strlen(ct->ct_name) : 0); extra_name_len = strlen(extra_text); result = PyString_FromStringAndSize(NULL, base_name_len + extra_name_len); @@ -72,6 +69,9 @@ static _crx_type_t *_zef_primitive(_crx_builder_t *cb, Py_ssize_t size, const char *name, int flags) { + if (PyErr_Occurred()) + return NULL; + PyObject *name_obj; CTypeDescrObject *ct; @@ -165,6 +165,9 @@ static _crx_type_t *zef_get_pointer_type(_crx_builder_t *cb, _crx_type_t *totype, int toquals) { + if (PyErr_Occurred()) + return NULL; + const char *extra; PyObject *name_obj; CTypeDescrObject *ct; @@ -205,6 +208,9 @@ static _crx_type_t *zef_get_array_type(_crx_builder_t *cb, _crx_type_t *ctitem, size_t len) { + if (PyErr_Occurred()) + return NULL; + CTypeDescrObject *ct; PyObject *name_obj; char extra_text[32]; @@ -304,7 +310,11 @@ static void zef_define_type(_crx_builder_t *cb, const char *name, _crx_type_t *type, int quals) { - abort(); + if (PyErr_Occurred()) + return; + + PyObject *types_dict = ((zeffir_builder_t *)cb)->types_dict; + PyDict_SetItemString(types_dict, name, (PyObject *)type); } static void zef_define_var(_crx_builder_t *cb, const char *name, @@ -317,6 +327,9 @@ _crx_type_t *ret, _crx_qual_type args[], int nargs, _crx_trampoline0_fn trampl, void *directcall) { + if (PyErr_Occurred()) + return; + PyObject *l_dict = ((zeffir_builder_t *)cb)->l_dict; PyObject *l_libname_obj = ((zeffir_builder_t *)cb)->lib->l_libname_obj; @@ -333,6 +346,9 @@ static void zef_define_num_const(_crx_builder_t *cb, const char *name, _crx_type_t *ct, _crx_num_const_t *value) { + if (PyErr_Occurred()) + return; + PyObject *l_dict = ((zeffir_builder_t *)cb)->l_dict; assert(ct->ct_flags & CT_PRIMITIVE_ANY); diff --git a/zeffir/test/ctype.crx b/zeffir/test/ctype.crx new file mode 100644 --- /dev/null +++ b/zeffir/test/ctype.crx @@ -0,0 +1,9 @@ +typedef long long foo_t; + + + +// CREFLECT: start + +typedef int foo_t; + +// CREFLECT: end diff --git a/zeffir/test/test_ctype.py b/zeffir/test/test_ctype.py --- a/zeffir/test/test_ctype.py +++ b/zeffir/test/test_ctype.py @@ -65,3 +65,11 @@ assert repr(ffi.typeof("int [ ]")) == "<ctype 'int[]'>" assert repr(ffi.typeof("int * [ ]")) == "<ctype 'int *[]'>" assert repr(ffi.typeof("int ( * ) [ ]")) == "<ctype 'int(*)[]'>" + +def test_simple_typedef(): + ffi, lib = support.compile_and_open('ctype') + assert ffi.sizeof("foo_t") == ffi.sizeof("long long") + if ffi.sizeof("long") == ffi.sizeof("long long"): + assert repr(ffi.typeof("foo_t")) == "<ctype 'long'>" + else: + assert repr(ffi.typeof("foo_t")) == "<ctype 'long long'>" _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit