[pypy-commit] cffi verifier2: test_verify.test_global_constants_non_int

arigo noreply at buildbot.pypy.org
Fri Jul 27 15:21:07 CEST 2012


Author: Armin Rigo <arigo at tunes.org>
Branch: verifier2
Changeset: r715:f9f93b05a580
Date: 2012-07-27 15:20 +0200
http://bitbucket.org/cffi/cffi/changeset/f9f93b05a580/

Log:	test_verify.test_global_constants_non_int

diff --git a/cffi/verifier.py b/cffi/verifier.py
--- a/cffi/verifier.py
+++ b/cffi/verifier.py
@@ -487,29 +487,21 @@
     # ----------
     # constants, likely declared with '#define'
 
-    def _generate_cpy_const(self, is_int, name, tp=None, category='const',
-                            vartp=None):
+    def _generate_cpy_const(self, is_int, name, tp=None):
         prnt = self._prnt
-        funcname = '_cffi_%s_%s' % (category, name)
-        prnt('int %s(long long *out_value)' % funcname)
-        prnt('{')
-        if not is_int:
-            prnt('  %s;' % (vartp or tp).get_c_name(' i'))
-        else:
-            assert category == 'const'
-        #
-        if not is_int:
-            xxxxxxxxxxxx
-            if category == 'var':
-                realexpr = '&' + name
-            else:
-                realexpr = name
-            prnt('  i = (%s);' % (realexpr,))
-            prnt('  o = %s;' % (self._convert_expr_from_c(tp, 'i'),))
-        else:
+        funcname = '_cffi_const_%s' % name
+        if is_int:
+            prnt('int %s(long long *out_value)' % funcname)
+            prnt('{')
             prnt('  *out_value = (long long)(%s);' % (name,))
             prnt('  return (%s) <= 0;' % (name,))
-        prnt('}')
+            prnt('}')
+        else:
+            assert tp is not None
+            prnt('void %s(%s)' % (funcname, tp.get_c_name('(*out_value)')))
+            prnt('{')
+            prnt('  *out_value = (%s);' % (name,))
+            prnt('}')
         prnt()
 
     def _generate_cpy_constant_collecttype(self, tp, name):
@@ -525,13 +517,23 @@
     _loading_cpy_constant = _loaded_noop
 
     def _loaded_cpy_constant(self, tp, name, module, library):
-        BFunc = self.ffi.typeof("int(*)(long long*)")
-        function = module.load_function(BFunc, '_cffi_const_%s' % name)
-        p = self.ffi.new("long long*")
-        negative = function(p)
-        value = int(p[0])
-        if value < 0 and not negative:
-            value += (1 << (8*self.ffi.sizeof("long long")))
+        funcname = '_cffi_const_%s' % name
+        is_int = isinstance(tp, model.PrimitiveType) and tp.is_integer_type()
+        if is_int:
+            BFunc = self.ffi.typeof("int(*)(long long*)")
+            function = module.load_function(BFunc, funcname)
+            p = self.ffi.new("long long*")
+            negative = function(p)
+            value = int(p[0])
+            if value < 0 and not negative:
+                value += (1 << (8*self.ffi.sizeof("long long")))
+        else:
+            tppname = tp.get_c_name('*')
+            BFunc = self.ffi.typeof("int(*)(%s)" % (tppname,))
+            function = module.load_function(BFunc, funcname)
+            p = self.ffi.new(tppname)
+            function(p)
+            value = p[0]
         setattr(library, name, value)
 
     # ----------


More information about the pypy-commit mailing list