Author: Armin Rigo <[email protected]>
Branch: 
Changeset: r86:f4143d8b619c
Date: 2014-11-18 19:40 +0100
http://bitbucket.org/cffi/creflect/changeset/f4143d8b619c/

Log:    final test!

diff --git a/creflect/model.py b/creflect/model.py
--- a/creflect/model.py
+++ b/creflect/model.py
@@ -562,17 +562,18 @@
             include_alignment = True
         else:
             ptrtp = realtp[1:]
+            del realtp     # don't use any more
             assert not ptrtp.startswith('$')
             sizetp = '*(%s)0' % ptrtp
             insptp = '*%s' % ptrtp
             include_alignment = False
         #
-        extra1 = "sizeof(%s)" % (sizetp,)    # total size
+        text_size = "sizeof(%s)" % (sizetp,)    # total size
         if include_alignment:
-            extra2 = ("(((char *)&((struct{char a; %s b;} *)0)->b)"
-                      " - (char *)0)" % (realtp,))          # alignment
+            text_offset = ("((char *)&((struct{char a; %s b;} *)0)->b)"
+                           " - (char *)0" % (realtp,))          # alignment
         else:
-            extra2 = '0'
+            text_offset = '0'
         d1 = funcblock.write_crx_field_var(len(self.fldnames))
         t1 = self.type.get_type_var(funcblock)
         #
@@ -609,9 +610,8 @@
             block.writeline('%s[%d].bitshift = -1;' % (d1, i))
             funcblock.write_subblock(block)
         #
-        funcblock.writeline('cb->complete(cb, %s, sizeof(%s),' % (t1, realtp))
-        funcblock.writeline('             ((char *)&((struct{char a; %s b;} *)'
-                            '0)->b) - (char *)0,' % realtp)
+        funcblock.writeline('cb->complete(cb, %s, %s,' % (t1, text_size))
+        funcblock.writeline('             %s,' % text_offset)
         funcblock.writeline('             %s, %d);' % (d1, len(self.fldnames)))
 
 
diff --git a/test/codegen/struct-005b.c b/test/codegen/struct-005b.c
--- a/test/codegen/struct-005b.c
+++ b/test/codegen/struct-005b.c
@@ -2,63 +2,37 @@
 
 # ____________________________________________________________
 
-int teststruct_005b(char *r)
+void teststruct_005b(crx_builder_t *cb)
 {
-    if (!r)
-        return 46 + 30 + 18 + 6 + 4 + 32;
-    r += sprintf(r, "struct $$foo_p /*%lld*/{\n", (long 
long)sizeof(*(foo_p)0));
+    crx_type_t *t1, *t2, *t3;
+    crx_field_t d1[1];
+    t1 = cb->get_struct_type(cb, "$$foo_p");
     {
         foo_p p1;
-        long long o = ((char *)&((foo_p)0)->aa) - (char *)0;  /* check that 
'*foo_p::aa' is not an array */
         char b[sizeof(p1->aa)];
-        r += sprintf(r, "  /*%lld*/", o);
+        size_t o = ((char *)&((foo_p)0)->aa) - (char *)0;  /* check that 
'*foo_p::aa' is not an array */
         p1 = (void *)(((char *)b) - o);
         (void)(p1->aa << 1);  /* check that '*foo_p::aa' is an integer type */
         p1->aa = -1;  /* check that '*foo_p::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_p)0),
+                 0,
+                 d1, 1);
+#expect STRUCT $$foo_p:
+#expect | aa: int
     {
         foo_p *p1;
         char *p2;
         p1 = (void *)&p2;
         *p1 = (void *)0;    /* check that 'foo_p' is a pointer type */
-        r += sprintf(r, "typedef struct $$foo_p *foo_p;\n");
+        t3 = cb->get_pointer_type(cb, t1);
+        cb->define_type(cb, "foo_p", t3);
+#expect TYPEDEF foo_p = PTR STRUCT $$foo_p
     }
-    return 0;
 }
-
-#expect struct $$foo_p {
-#expect   int aa;
-#expect };
-#expect typedef struct $$foo_p *foo_p;
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to