Author: Tom Krauss <[email protected]>
Branch: sirtom67/float_complex
Changeset: r2860:7ad66643d015
Date: 2017-01-15 10:40 -0600
http://bitbucket.org/cffi/cffi/changeset/7ad66643d015/
Log: initial support for 'float _Complex' and 'double _Complex' Work In
Progress - sources have printfs that will be removed.
diff --git a/c/_cffi_backend.c b/c/_cffi_backend.c
--- a/c/_cffi_backend.c
+++ b/c/_cffi_backend.c
@@ -127,6 +127,8 @@
#define CT_FUNCTIONPTR 256 /* pointer to function */
#define CT_VOID 512 /* void */
+#define CT_PRIMITIVE_COMPLEX 16777216 /* float _Complex, double _Complex */
+
/* other flags that may also be set in addition to the base flag: */
#define CT_IS_VOIDCHAR_PTR 1024
#define CT_PRIMITIVE_FITS_LONG 2048
@@ -145,7 +147,8 @@
#define CT_PRIMITIVE_ANY (CT_PRIMITIVE_SIGNED | \
CT_PRIMITIVE_UNSIGNED | \
CT_PRIMITIVE_CHAR | \
- CT_PRIMITIVE_FLOAT)
+ CT_PRIMITIVE_FLOAT | \
+ CT_PRIMITIVE_COMPLEX)
typedef struct _ctypedescr {
PyObject_VAR_HEAD
@@ -3855,6 +3858,8 @@
EPTYPE(f, float, CT_PRIMITIVE_FLOAT ) \
EPTYPE(d, double, CT_PRIMITIVE_FLOAT ) \
EPTYPE(ld, long double, CT_PRIMITIVE_FLOAT | CT_IS_LONGDOUBLE ) \
+ EPTYPE(fc, float _Complex, CT_PRIMITIVE_COMPLEX ) \
+ EPTYPE(dc, double _Complex, CT_PRIMITIVE_COMPLEX ) \
ENUM_PRIMITIVE_TYPES_WCHAR \
EPTYPE(b, _Bool, CT_PRIMITIVE_UNSIGNED | CT_IS_BOOL ) \
/* the following types are not primitive in the C sense */ \
@@ -3925,6 +3930,8 @@
int name_size;
ffi_type *ffitype;
+ printf("hello\n");
+
for (ptypes=types; ; ptypes++) {
if (ptypes->name == NULL) {
#ifndef HAVE_WCHAR_H
diff --git a/c/parse_c_type.c b/c/parse_c_type.c
--- a/c/parse_c_type.c
+++ b/c/parse_c_type.c
@@ -25,7 +25,7 @@
/* keywords */
TOK__BOOL,
TOK_CHAR,
- //TOK__COMPLEX,
+ TOK__COMPLEX,
TOK_CONST,
TOK_DOUBLE,
TOK_ENUM,
@@ -797,6 +797,7 @@
int parse_c_type_from(struct _cffi_parse_info_s *info, size_t *output_index,
const char *input)
{
+ printf("parse_c_type_from\n");
int result;
token_t token;
diff --git a/c/realize_c_type.c b/c/realize_c_type.c
--- a/c/realize_c_type.c
+++ b/c/realize_c_type.c
@@ -101,6 +101,7 @@
static PyObject *build_primitive_type(int num)
{
+ fprintf(stderr, "fooooooooooooo num=%d\n",num);
/* XXX too many translations between here and new_primitive_type() */
static const char *primitive_name[] = {
NULL,
@@ -151,6 +152,8 @@
"uint_fast64_t",
"intmax_t",
"uintmax_t",
+ "float _Complex",
+ "double _Complex",
};
PyObject *x;
diff --git a/cffi/cffi_opcode.py b/cffi/cffi_opcode.py
--- a/cffi/cffi_opcode.py
+++ b/cffi/cffi_opcode.py
@@ -105,8 +105,11 @@
PRIM_UINT_FAST64 = 45
PRIM_INTMAX = 46
PRIM_UINTMAX = 47
+PRIM_FLOATCOMPLEX = 48
+PRIM_DOUBLECOMPLEX = 49
-_NUM_PRIM = 48
+
+_NUM_PRIM = 50
_UNKNOWN_PRIM = -1
_UNKNOWN_FLOAT_PRIM = -2
_UNKNOWN_LONG_DOUBLE = -3
@@ -128,6 +131,8 @@
'float': PRIM_FLOAT,
'double': PRIM_DOUBLE,
'long double': PRIM_LONGDOUBLE,
+ 'float _Complex': PRIM_FLOATCOMPLEX,
+ 'double _Complex': PRIM_DOUBLECOMPLEX,
'_Bool': PRIM_BOOL,
'wchar_t': PRIM_WCHAR,
'int8_t': PRIM_INT8,
diff --git a/cffi/model.py b/cffi/model.py
--- a/cffi/model.py
+++ b/cffi/model.py
@@ -117,6 +117,8 @@
'float': 'f',
'double': 'f',
'long double': 'f',
+ 'float _Complex': 'f',
+ 'double _Complex': 'f',
'_Bool': 'i',
# the following types are not primitive in the C sense
'wchar_t': 'c',
diff --git a/cffi/parse_c_type.h b/cffi/parse_c_type.h
--- a/cffi/parse_c_type.h
+++ b/cffi/parse_c_type.h
@@ -79,8 +79,10 @@
#define _CFFI_PRIM_UINT_FAST64 45
#define _CFFI_PRIM_INTMAX 46
#define _CFFI_PRIM_UINTMAX 47
+#define _CFFI_PRIM_FLOATCOMPLEX 48
+#define _CFFI_PRIM_DOUBLECOMPLEX 49
-#define _CFFI__NUM_PRIM 48
+#define _CFFI__NUM_PRIM 50
#define _CFFI__UNKNOWN_PRIM (-1)
#define _CFFI__UNKNOWN_FLOAT_PRIM (-2)
#define _CFFI__UNKNOWN_LONG_DOUBLE (-3)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit