Skip to content

Commit

Permalink
Revert "Use '_cffi_float_complex_t' or '_cffi_double_complex_t' more …
Browse files Browse the repository at this point in the history
…systematically."

This reverts commit 7ecdc9d.
  • Loading branch information
arigo committed Aug 12, 2024
1 parent 7ecdc9d commit 5fc52c8
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 12 deletions.
11 changes: 6 additions & 5 deletions src/c/_cffi_backend.c
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,7 @@
#define CT_UNION 0x080 /* union */
#define CT_FUNCTIONPTR 0x100 /* pointer to function */
#define CT_VOID 0x200 /* void */
#define CT_PRIMITIVE_COMPLEX 0x400 /* _cffi_float/double_complex_t */
#define CT_PRIMITIVE_COMPLEX 0x400 /* float _Complex, double _Complex */

/* other flags that may also be set in addition to the base flag: */
#define CT_IS_VOIDCHAR_PTR 0x00001000
Expand Down Expand Up @@ -4728,8 +4728,8 @@ static PyObject *new_primitive_type(const char *name)
EPTYPE(f, float, CT_PRIMITIVE_FLOAT ) \
EPTYPE(d, double, CT_PRIMITIVE_FLOAT ) \
EPTYPE(ld, long double, CT_PRIMITIVE_FLOAT | CT_IS_LONGDOUBLE ) \
EPTYPE2(fc, "_cffi_float_complex_t", cffi_float_complex_t, CT_PRIMITIVE_COMPLEX)\
EPTYPE2(dc, "_cffi_double_complex_t", cffi_double_complex_t, CT_PRIMITIVE_COMPLEX)\
EPTYPE2(fc, "float _Complex", cffi_float_complex_t, CT_PRIMITIVE_COMPLEX ) \
EPTYPE2(dc, "double _Complex", cffi_double_complex_t, CT_PRIMITIVE_COMPLEX ) \
ENUM_PRIMITIVE_TYPES_WCHAR \
EPTYPE2(c16, "char16_t", cffi_char16_t, CT_PRIMITIVE_CHAR ) \
EPTYPE2(c32, "char32_t", cffi_char32_t, CT_PRIMITIVE_CHAR ) \
Expand Down Expand Up @@ -7656,13 +7656,14 @@ static int _testfunc23(char *p)
}

#if 0 /* libffi doesn't properly support complexes currently */
/* also, MSVC might not support _Complex... */
/* if this is enabled one day, remember to also add _Complex
* arguments in addition to return values. */
static _cffi_float_complex_t _testfunc24(float a, float b)
static float _Complex _testfunc24(float a, float b)
{
return a + I*2.0*b;
}
static _cffi_double_complex_t _testfunc25(double a, double b)
static double _Complex _testfunc25(double a, double b)
{
return a + I*2.0*b;
}
Expand Down
4 changes: 2 additions & 2 deletions src/c/realize_c_type.c
Original file line number Diff line number Diff line change
Expand Up @@ -151,8 +151,8 @@ static PyObject *build_primitive_type(int num)
"uint_fast64_t",
"intmax_t",
"uintmax_t",
"_cffi_float_complex_t",
"_cffi_double_complex_t",
"float _Complex",
"double _Complex",
"char16_t",
"char32_t",
};
Expand Down
10 changes: 5 additions & 5 deletions src/c/test_c.py
Original file line number Diff line number Diff line change
Expand Up @@ -247,7 +247,7 @@ def test_float_types():
def test_complex_types():
INF = 1E200 * 1E200
for name in ["float", "double"]:
p = new_primitive_type("_cffi_" + name + "_complex_t")
p = new_primitive_type(name + " _Complex")
assert bool(cast(p, 0)) is False
assert bool(cast(p, INF))
assert bool(cast(p, -INF))
Expand Down Expand Up @@ -1246,7 +1246,7 @@ def test_call_function_9():

def test_call_function_24():
BFloat = new_primitive_type("float")
BFloatComplex = new_primitive_type("_cffi_float_complex_t")
BFloatComplex = new_primitive_type("float _Complex")
BFunc3 = new_function_type((BFloat, BFloat), BFloatComplex, False)
if 0: # libffi returning nonsense silently, so logic disabled for now
f = cast(BFunc3, _testfunc(24))
Expand All @@ -1260,7 +1260,7 @@ def test_call_function_24():

def test_call_function_25():
BDouble = new_primitive_type("double")
BDoubleComplex = new_primitive_type("_cffi_double_complex_t")
BDoubleComplex = new_primitive_type("double _Complex")
BFunc3 = new_function_type((BDouble, BDouble), BDoubleComplex, False)
if 0: # libffi returning nonsense silently, so logic disabled for now
f = cast(BFunc3, _testfunc(25))
Expand Down Expand Up @@ -4536,9 +4536,9 @@ def test_unaligned_types():
buf = buffer(pbuf)
#
for name in ['short', 'int', 'long', 'long long', 'float', 'double',
'_cffi_float_complex_t', '_cffi_double_complex_t']:
'float _Complex', 'double _Complex']:
p = new_primitive_type(name)
if name.endswith('_complex_t'):
if name.endswith(' _Complex'):
num = cast(p, 1.23 - 4.56j)
else:
num = cast(p, 0x0123456789abcdef)
Expand Down

0 comments on commit 5fc52c8

Please sign in to comment.