diff --git a/pyffi.scm b/pyffi.scm index d5873d1..a6f765c 100644 --- a/pyffi.scm +++ b/pyffi.scm @@ -88,6 +88,7 @@ (define (py-object-to value) (cond ((exact-integer? value) (translate-to-foreign value py-int)) + ((cplxnum? value) (translate-to-foreign value py-complex)) ((real? value) (translate-to-foreign value py-float)) ((alist? value) (translate-to-foreign value py-dict)) ((list? value) (if (eq? 'ascii (car value)) @@ -200,6 +201,10 @@ int PyDict_SetItem (PyObject *, pyobject, pyobject); double PyFloat_AsDouble (PyObject *); PyObject *PyFloat_FromDouble (double); +PyObject* PyComplex_FromDoubles(double real, double imag); +double PyComplex_RealAsDouble(PyObject *op); +double PyComplex_ImagAsDouble(PyObject *op); + pyobject PyImport_GetModuleDict (void); PyObject *PyImport_Import (pyobject ); @@ -416,6 +421,16 @@ EOF (define-pytype py-float PyFloat_FromDouble PyFloat_AsDouble) +(define-pytype py-complex + (lambda (value) + (let* ((r (real-part value)) + (i (imag-part value))) + (PyComplex_FromDoubles r i))) + (lambda (value) + (let* ((r (PyComplex_RealAsDouble value)) + (i (PyComplex_ImagAsDouble value))) + (make-rectangular r i)))) + (define (utf8-string->py-unicode value) ;; Given a Scheme UTF8 string, converts it into Python Unicode string (let ((res (pyffi_PyUnicode_fromCString value))) @@ -488,6 +503,7 @@ EOF ("" . ,py-bool) ("" . ,py-int) ("" . ,py-float) + ("" . ,py-complex) ("" . ,py-list) ("" . ,py-ascii) ("" . ,py-unicode) @@ -495,18 +511,6 @@ EOF ("" . ,py-instance) ("" . ,py-tuple) ("" . ,py-buffer) - - ("" . ,py-bool) - ("" . ,py-bool) - ("" . ,py-int) - ("" . ,py-float) - ("" . ,py-list) - ("" . ,py-ascii) - ("" . ,py-unicode) - ("" . ,py-dict) - ("" . ,py-instance) - ("" . ,py-tuple) - ("" . ,py-buffer) ) ) diff --git a/tests/run.scm b/tests/run.scm index 6fbf798..77e83f5 100644 --- a/tests/run.scm +++ b/tests/run.scm @@ -8,3 +8,4 @@ (print (py-eval "1")) (print (py-eval "1.0")) (print (py-eval "float('-inf')")) +(print (py-eval "complex(1.0, 2.0)"))