[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