[pypy-commit] cffi cpy-extension: Progress

arigo noreply at buildbot.pypy.org
Tue Jun 12 15:02:44 CEST 2012


Author: Armin Rigo <arigo at tunes.org>
Branch: cpy-extension
Changeset: r286:9442befe6ff1
Date: 2012-06-12 14:47 +0200
http://bitbucket.org/cffi/cffi/changeset/9442befe6ff1/

Log:	Progress

diff --git a/cffi/model.py b/cffi/model.py
--- a/cffi/model.py
+++ b/cffi/model.py
@@ -41,6 +41,7 @@
 
 void_type = VoidType()
 
+
 class PrimitiveType(BaseType):
     _attrs_ = ('name',)
 
@@ -53,6 +54,7 @@
     def new_backend_type(self, ffi):
         return ffi._backend.new_primitive_type(self.name)
 
+
 class FunctionType(BaseType):
     _attrs_ = ('args', 'result', 'ellipsis')
 
@@ -92,9 +94,13 @@
         prnt('{')
         assert not self.ellipsis  # XXX later
         #
-        for i in range(len(self.args)):
-            prnt('  double x%d;' % i)
-        prnt('  double result;')
+        for i, type in enumerate(self.args):
+            prnt('  %s;' % type.get_c_name(' x%d;' % i))
+        if not isinstance(self.result, VoidType):
+            result_code = 'result = '
+            prnt('  %s;' % self.result.get_c_name(' result'))
+        else:
+            result_code = ''
         #
         if len(self.args) > 1:
             rng = range(len(self.args))
@@ -112,8 +118,9 @@
             prnt('    return NULL;')
             prnt()
         #
-        prnt('  { result = %s(%s); }' % (
-            name, ', '.join(['x%d' % i for i in range(len(self.args))])))
+        prnt('  { %s%s(%s); }' % (
+            result_code, name,
+            ', '.join(['x%d' % i for i in range(len(self.args))])))
         prnt()
         #
         prnt('  return PyFloat_FromDouble(result);')
@@ -131,7 +138,6 @@
         verifier.prnt('  {"%s", _cffi_f_%s, %s},' % (name, name, meth))
 
 
-
 class PointerType(BaseType):
     _attrs_ = ('totype',)
     
@@ -147,6 +153,7 @@
     def new_backend_type(self, ffi, BItem):
         return ffi._backend.new_pointer_type(BItem)
 
+
 class ConstPointerType(PointerType):
 
     def get_c_name(self, replace_with=''):
@@ -179,6 +186,7 @@
     def new_backend_type(self, ffi, BPtrItem):
         return ffi._backend.new_array_type(BPtrItem, self.length)
 
+
 class StructOrUnion(BaseType):
     _attrs_ = ('name',)
         
@@ -204,6 +212,7 @@
         ffi._backend.complete_struct_or_union(BType, lst, self)
         return BType
 
+
 class StructType(StructOrUnion):
     kind = 'struct'
     partial = False
@@ -270,12 +279,14 @@
         verifier.write_printf('END')
         verifier.write('}')
 
+
 class UnionType(StructOrUnion):
     kind = 'union'
 
     def get_btype(self, ffi):
         return ffi._backend.new_union_type(self.name)
-    
+
+
 class EnumType(BaseType):
     _attrs_ = ('name',)
 


More information about the pypy-commit mailing list