[pypy-commit] cffi cpy-extension: Generalize the conversions.

arigo noreply at buildbot.pypy.org
Tue Jun 12 16:03:43 CEST 2012


Author: Armin Rigo <arigo at tunes.org>
Branch: cpy-extension
Changeset: r288:c744188b2aae
Date: 2012-06-12 15:26 +0200
http://bitbucket.org/cffi/cffi/changeset/c744188b2aae/

Log:	Generalize the conversions.

diff --git a/cffi/verifier.py b/cffi/verifier.py
--- a/cffi/verifier.py
+++ b/cffi/verifier.py
@@ -24,6 +24,11 @@
             self.f = f
             self.prnt("#include <Python.h>")
             self.prnt()
+            self.prnt('#define _cffi_from_c_double PyFloat_FromDouble')
+            self.prnt('#define _cffi_to_c_double PyFloat_AsDouble')
+            self.prnt('#define _cffi_from_c_float PyFloat_FromDouble')
+            self.prnt('#define _cffi_to_c_float PyFloat_AsDouble')
+            self.prnt()
             self.prnt(preamble)
             self.prnt()
             #
@@ -68,11 +73,23 @@
     def generate_nothing(self, tp, name):
         pass
 
+    # ----------
+
     def convert_to_c(self, tp, fromvar, tovar, errcode):
-        self.prnt('  %s = PyFloat_AsDouble(%s);' % (tovar, fromvar))
+        if isinstance(tp, model.PrimitiveType):
+            self.prnt('  %s = _cffi_to_c_%s(%s);' % (
+                tovar, tp.name.replace(' ', '_'), fromvar))
+            self.prnt('  if (%s == (%s)-1 && PyErr_Occurred())' % (
+                tovar, tp.name))
+            self.prnt('    %s;' % errcode)
+        else:
+            raise NotImplementedError(tp)
 
     def get_converter_from_c(self, tp):
-        return 'PyFloat_FromDouble'
+        if isinstance(tp, model.PrimitiveType):
+            return '_cffi_from_c_%s' % (tp.name.replace(' ', '_'),)
+        else:
+            raise NotImplementedError(tp)
 
     # ----------
 


More information about the pypy-commit mailing list