[pypy-commit] creflect default: type definitions
arigo
noreply at buildbot.pypy.org
Thu Dec 4 13:18:16 CET 2014
Author: Armin Rigo <arigo at 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'>"
More information about the pypy-commit
mailing list