[pypy-commit] cffi default: - Turn Py_FatalError() into raising SystemErrors.
arigo
noreply at buildbot.pypy.org
Wed Jun 20 17:04:35 CEST 2012
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r477:f4b5c451867f
Date: 2012-06-20 17:04 +0200
http://bitbucket.org/cffi/cffi/changeset/f4b5c451867f/
Log: - Turn Py_FatalError() into raising SystemErrors.
- Fix the issue with callbacks returning 'void'.
diff --git a/c/_ffi_backend.c b/c/_ffi_backend.c
--- a/c/_ffi_backend.c
+++ b/c/_ffi_backend.c
@@ -593,8 +593,8 @@
return PyString_FromStringAndSize(data, 1);
}
- fprintf(stderr, "convert_to_object: '%s'\n", ct->ct_name);
- Py_FatalError("convert_to_object");
+ PyErr_Format(PyExc_SystemError,
+ "convert_to_object: '%s'", ct->ct_name);
return NULL;
}
@@ -870,8 +870,8 @@
return -1;
return convert_from_object(data, cf->cf_type, init);
}
- fprintf(stderr, "convert_from_object: '%s'\n", ct->ct_name);
- Py_FatalError("convert_from_object");
+ PyErr_Format(PyExc_SystemError,
+ "convert_from_object: '%s'", ct->ct_name);
return -1;
overflow:
@@ -3030,8 +3030,9 @@
if (py_res == NULL)
goto error;
- if (convert_from_object(result, SIGNATURE(0), py_res) < 0)
- goto error;
+ if (SIGNATURE(0)->ct_size > 0)
+ if (convert_from_object(result, SIGNATURE(0), py_res) < 0)
+ goto error;
done:
Py_XDECREF(py_args);
Py_XDECREF(py_res);
@@ -3041,7 +3042,8 @@
error:
PyErr_WriteUnraisable(py_ob);
- memset(result, 0, SIGNATURE(0)->ct_size);
+ if (SIGNATURE(0)->ct_size > 0)
+ memset(result, 0, SIGNATURE(0)->ct_size);
goto done;
}
diff --git a/testing/backend_tests.py b/testing/backend_tests.py
--- a/testing/backend_tests.py
+++ b/testing/backend_tests.py
@@ -588,6 +588,14 @@
assert repr(res) == "<cdata 'int *'>"
assert ffi.cast("long", res) != 0
+ def test_functionptr_void_return(self):
+ ffi = FFI(backend=self.Backend())
+ def foo():
+ pass
+ foo_cb = ffi.callback("void foo()", foo)
+ result = foo_cb()
+ assert result is None
+
def test_char_cast(self):
ffi = FFI(backend=self.Backend())
p = ffi.cast("int", '\x01')
More information about the pypy-commit
mailing list