[pypy-commit] pypy cffi-1.0: Test and fix
arigo
noreply at buildbot.pypy.org
Fri May 8 18:06:53 CEST 2015
Author: Armin Rigo <arigo at tunes.org>
Branch: cffi-1.0
Changeset: r77226:4b5f9b10219f
Date: 2015-05-08 18:05 +0200
http://bitbucket.org/pypy/pypy/changeset/4b5f9b10219f/
Log: Test and fix
diff --git a/pypy/module/_cffi_backend/ffi_obj.py b/pypy/module/_cffi_backend/ffi_obj.py
--- a/pypy/module/_cffi_backend/ffi_obj.py
+++ b/pypy/module/_cffi_backend/ffi_obj.py
@@ -51,9 +51,14 @@
try:
x = self.types_dict[string]
except KeyError:
- index = parse_c_type.parse_c_type(self.ctxobj.info, string)
+ info = self.ctxobj.info
+ index = parse_c_type.parse_c_type(info, string)
if index < 0:
- xxxx
+ num_spaces = rffi.getintfield(info, 'c_error_location')
+ raise oefmt(self.w_FFIError, "%s\n%s\n%s^",
+ rffi.charp2str(info.c_error_message),
+ string,
+ " " * num_spaces)
x = realize_c_type.realize_c_type_or_func(
self, self.ctxobj.info.c_output, index)
self.types_dict[string] = x
diff --git a/pypy/module/_cffi_backend/test/test_ffi_obj.py b/pypy/module/_cffi_backend/test/test_ffi_obj.py
--- a/pypy/module/_cffi_backend/test/test_ffi_obj.py
+++ b/pypy/module/_cffi_backend/test/test_ffi_obj.py
@@ -165,3 +165,19 @@
assert ffi.cast("int(*)(int)", 0) == ffi.NULL
ffi.callback("int(int)") # side-effect of registering this string
raises(ffi.error, ffi.cast, "int(int)", 0)
+
+ def test_ffi_invalid_type(self):
+ import _cffi_backend as _cffi1_backend
+ ffi = _cffi1_backend.FFI()
+ e = raises(ffi.error, ffi.cast, "", 0)
+ assert str(e.value) == ("identifier expected\n"
+ "\n"
+ "^")
+ e = raises(ffi.error, ffi.cast, "struct struct", 0)
+ assert str(e.value) == ("struct or union name expected\n"
+ "struct struct\n"
+ " ^")
+ e = raises(ffi.error, ffi.cast, "struct never_heard_of_s", 0)
+ assert str(e.value) == ("undefined struct/union name\n"
+ "struct never_heard_of_s\n"
+ " ^")
More information about the pypy-commit
mailing list