[pypy-commit] creflect default: next test

arigo noreply at buildbot.pypy.org
Tue Nov 18 19:40:31 CET 2014


Author: Armin Rigo <arigo at tunes.org>
Branch: 
Changeset: r85:6731bdd907f8
Date: 2014-11-18 19:35 +0100
http://bitbucket.org/cffi/creflect/changeset/6731bdd907f8/

Log:	next test

diff --git a/creflect/model.py b/creflect/model.py
--- a/creflect/model.py
+++ b/creflect/model.py
@@ -412,6 +412,14 @@
         if const:
             self.c_name_with_marker = 'const ' + self.c_name_with_marker
 
+    def get_type_var(self, block):
+        return block.write_crx_type_var('cb->get_%s_type(cb, "%s")' % (
+            self.kind, self.name))
+
+    def inspect_nonconst_type(self, block, inspect):
+        inspect.flush()
+        return self.get_type_var(block)
+
 
 # ____________________________________________________________
 
@@ -566,8 +574,7 @@
         else:
             extra2 = '0'
         d1 = funcblock.write_crx_field_var(len(self.fldnames))
-        t1 = funcblock.write_crx_type_var('cb->get_%s_type(cb, "%s")' % (
-            self.type.kind, self.type.name))
+        t1 = self.type.get_type_var(funcblock)
         #
         for i, (fldname, fldtype) in enumerate(
                 zip(self.fldnames, self.fldtypes)):
@@ -595,11 +602,11 @@
             t2 = fldtype.inspect_type(block, inspect)
             inspect.stop()
             block.writedecl(o_decl)
-            block.writeline('%s[%d].name = "%s";\n' % (d1, i, fldname))
-            block.writeline('%s[%d].type = %s;\n'   % (d1, i, t2))
-            block.writeline('%s[%d].offset = o;\n'  % (d1, i))
-            block.writeline('%s[%d].numbits = -1;\n' % (d1, i))
-            block.writeline('%s[%d].bitshift = -1;\n' % (d1, i))
+            block.writeline('%s[%d].name = "%s";' % (d1, i, fldname))
+            block.writeline('%s[%d].type = %s;'   % (d1, i, t2))
+            block.writeline('%s[%d].offset = o;'  % (d1, i))
+            block.writeline('%s[%d].numbits = -1;' % (d1, i))
+            block.writeline('%s[%d].bitshift = -1;' % (d1, i))
             funcblock.write_subblock(block)
         #
         funcblock.writeline('cb->complete(cb, %s, sizeof(%s),' % (t1, realtp))
diff --git a/test/codegen/struct-005.c b/test/codegen/struct-005.c
--- a/test/codegen/struct-005.c
+++ b/test/codegen/struct-005.c
@@ -2,59 +2,32 @@
 
 # ____________________________________________________________
 
-int teststruct_005(char *r)
+void teststruct_005(crx_builder_t *cb)
 {
-    if (!r)
-        return 70 + 30 + 18 + 6 + 4 + 30;
-    r += sprintf(r, "struct $foo_t /*%lld,%lld*/{\n", (long long)sizeof(foo_t), (long long)(((char *)&((struct{char a; foo_t b;} *)0)->b) - (char *)0));
+    crx_type_t *t1, *t2;
+    crx_field_t d1[1];
+    t1 = cb->get_struct_type(cb, "$foo_t");
     {
         foo_t *p1;
-        long long o = ((char *)&((foo_t *)0)->aa) - (char *)0;  /* check that 'foo_t::aa' is not an array */
         char b[sizeof(p1->aa)];
-        r += sprintf(r, "  /*%lld*/", o);
+        size_t o = ((char *)&((foo_t *)0)->aa) - (char *)0;  /* check that 'foo_t::aa' is not an array */
         p1 = (void *)(((char *)b) - o);
         (void)(p1->aa << 1);  /* check that 'foo_t::aa' is an integer type */
         p1->aa = -1;  /* check that 'foo_t::aa' is not declared 'const' */
-        if (p1->aa > 0) {
-            if (sizeof(p1->aa) == 1 && p1->aa == 1)
-                r += sprintf(r, "_Bool");
-            else if (sizeof(p1->aa) == sizeof(unsigned int))
-                r += sprintf(r, "unsigned int");
-            else if (sizeof(p1->aa) == sizeof(unsigned short))
-                r += sprintf(r, "unsigned short");
-            else if (sizeof(p1->aa) == sizeof(unsigned char))
-                r += sprintf(r, "unsigned char");
-            else if (sizeof(p1->aa) == sizeof(unsigned long))
-                r += sprintf(r, "unsigned long");
-            else if (sizeof(p1->aa) == sizeof(unsigned long long))
-                r += sprintf(r, "unsigned long long");
-            else
-                r += sprintf(r, "uint%u_t", (int)sizeof(p1->aa) * 8);
-        }
-        else {
-            if (sizeof(p1->aa) == sizeof(int))
-                r += sprintf(r, "int");
-            else if (sizeof(p1->aa) == sizeof(short))
-                r += sprintf(r, "short");
-            else if (sizeof(p1->aa) == sizeof(signed char))
-                r += sprintf(r, "signed char");
-            else if (sizeof(p1->aa) == sizeof(long))
-                r += sprintf(r, "long");
-            else if (sizeof(p1->aa) == sizeof(long long))
-                r += sprintf(r, "long long");
-            else
-                r += sprintf(r, "int%u_t", (int)sizeof(p1->aa) * 8);
-        }
-        r += sprintf(r, " aa;\n");
+        t2 = CRX_INT_TYPE(cb, p1->aa, "int");
+        d1[0].name = "aa";
+        d1[0].type = t2;
+        d1[0].offset = o;
+        d1[0].numbits = -1;
+        d1[0].bitshift = -1;
     }
-    r += sprintf(r, "};\n");
+    cb->complete(cb, t1, sizeof(foo_t),
+                 ((char *)&((struct{char a; foo_t b;} *)0)->b) - (char *)0,
+                 d1, 1);
+#expect STRUCT $foo_t:
+#expect | aa: int
     {
-        r += sprintf(r, "typedef struct $foo_t foo_t;\n");
+        cb->define_type(cb, "foo_t", t1);
+#expect TYPEDEF foo_t = STRUCT $foo_t
     }
-    return 0;
 }
-
-#expect struct $foo_t {
-#expect   int aa;
-#expect };
-#expect typedef struct $foo_t foo_t;


More information about the pypy-commit mailing list