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

Log:    next test

diff --git a/creflect/model.py b/creflect/model.py
--- a/creflect/model.py
+++ b/creflect/model.py
@@ -586,16 +586,16 @@
                 if arraylevels >= 1:
                     comment = " (%dx)" % arraylevels
                 comment = inspect.get_comment(0, False, "an array%s" % comment)
-                block.writedecl("size_t o = offsetof(%s, %s%s);%s"
-                                % (realtp, fldname, "[0]" * arraylevels,
-                                   comment))
+                o_decl = "size_t o = offsetof(%s, %s%s);%s" % (
+                    realtp, fldname, "[0]" * arraylevels, comment)
             else:
                 comment = inspect.get_comment(0, False, "not an array")
-                block.writedecl("size_t o = ((char *)&((%s)0)->%s)"
-                                " - (char *)0;%s" % (ptrtp, fldname, comment))
+                o_decl = ("size_t o = ((char *)&((%s)0)->%s)"
+                          " - (char *)0;%s" % (ptrtp, fldname, comment))
             #
             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))
diff --git a/test/codegen/struct-001.c b/test/codegen/struct-001.c
--- a/test/codegen/struct-001.c
+++ b/test/codegen/struct-001.c
@@ -12,8 +12,8 @@
     t1 = cb->get_struct_type(cb, "foo_s");
     {
         struct foo_s *p1;
+        char b[sizeof(p1->aa)];
         size_t o = ((char *)&((struct foo_s *)0)->aa) - (char *)0;  /* check 
that 'struct foo_s::aa' is not an array */
-        char b[sizeof(p1->aa)];
         p1 = (void *)(((char *)b) - o);
         (void)(p1->aa << 1);  /* check that 'struct foo_s::aa' is an integer 
type */
         p1->aa = -1;  /* check that 'struct foo_s::aa' is not declared 'const' 
*/
@@ -26,8 +26,8 @@
     }
     {
         struct foo_s *p1;
+        char b[sizeof(p1->bb)];
         size_t o = ((char *)&((struct foo_s *)0)->bb) - (char *)0;  /* check 
that 'struct foo_s::bb' is not an array */
-        char b[sizeof(p1->bb)];
         p1 = (void *)(((char *)b) - o);
         (void)(p1->bb << 1);  /* check that 'struct foo_s::bb' is an integer 
type */
         p1->bb = -1;  /* check that 'struct foo_s::bb' is not declared 'const' 
*/
diff --git a/test/codegen/struct-001b.c b/test/codegen/struct-001b.c
--- a/test/codegen/struct-001b.c
+++ b/test/codegen/struct-001b.c
@@ -11,8 +11,8 @@
     t1 = cb->get_struct_type(cb, "foo_s");
     {
         struct foo_s *p1;
+        char b[sizeof(p1->aa)];
         size_t o = ((char *)&((struct foo_s *)0)->aa) - (char *)0;  /* check 
that 'struct foo_s::aa' is not an array */
-        char b[sizeof(p1->aa)];
         memset(b, -1, sizeof(b));
         p1 = (void *)(((char *)b) - o);
         (void)(p1->aa << 1);  /* check that 'struct foo_s::aa' is an integer 
type */
diff --git a/test/codegen/struct-002.c b/test/codegen/struct-002.c
--- a/test/codegen/struct-002.c
+++ b/test/codegen/struct-002.c
@@ -11,8 +11,8 @@
     t1 = cb->get_struct_type(cb, "foo_s");
     {
         struct foo_s *p1;
+        char *p2;
         size_t o = ((char *)&((struct foo_s *)0)->aa) - (char *)0;  /* check 
that 'struct foo_s::aa' is not an array */
-        char *p2;
         p1 = (void *)(((char *)&p2) - o);
         p1->aa = (void *)0;    /* check that 'struct foo_s::aa' is a pointer 
type */
         t2 = cb->get_void_type(cb);
diff --git a/test/codegen/struct-003.c b/test/codegen/struct-003.c
--- a/test/codegen/struct-003.c
+++ b/test/codegen/struct-003.c
@@ -4,53 +4,31 @@
 
 # ____________________________________________________________
 
-int teststruct_003(char *r)
+void teststruct_003(crx_builder_t *cb)
 {
-    if (!r)
-        return 100;
-    r += sprintf(r, "struct foo_s /*%lld,%lld*/{\n", (long long)sizeof(struct 
foo_s), (long long)(((char *)&((struct{char a; struct foo_s b;} *)0)->b) - 
(char *)0));
+    crx_type_t *t1, *t2, *t3;
+    crx_field_t d1[1];
+    t1 = cb->get_struct_type(cb, "foo_s");
     {
         struct foo_s *p1;
         char *p2;
-        long long o = ((char *)&((struct foo_s *)0)->aa) - (char *)0;  /* 
check that 'struct foo_s::aa' is not an array */
         char b[sizeof(*p1->aa)];  /* check that '*struct foo_s::aa' is a valid 
type */
-        r += sprintf(r, "  /*%lld*/", o);
+        size_t o = ((char *)&((struct foo_s *)0)->aa) - (char *)0;  /* check 
that 'struct foo_s::aa' is not an array */
         p1 = (void *)(((char *)&p2) - o);
         p1->aa = (void *)b;    /* check that 'struct foo_s::aa' is a pointer 
type */
         (void)(*p1->aa << 1);  /* check that '*struct foo_s::aa' is an integer 
type */
         *p1->aa = -1;  /* check that '*struct foo_s::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");
+        t3 = cb->get_pointer_type(cb, t2);
+        d1[0].name = "aa";
+        d1[0].type = t3;
+        d1[0].offset = o;
+        d1[0].numbits = -1;
+        d1[0].bitshift = -1;
     }
-    r += sprintf(r, "};\n");
-    return 0;
+    cb->complete(cb, t1, sizeof(struct foo_s),
+                 ((char *)&((struct{char a; struct foo_s b;} *)0)->b) - (char 
*)0,
+                 d1, 1);
+#expect STRUCT foo_s:
+#expect | aa: PTR int
 }
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to