Author: Armin Rigo <[email protected]>
Branch: 
Changeset: r39:fb367039b305
Date: 2014-09-15 19:54 +0200
http://bitbucket.org/cffi/creflect/changeset/fb367039b305/

Log:    005e passes

diff --git a/test/codegen/005e.c b/test/codegen/005e.c
--- a/test/codegen/005e.c
+++ b/test/codegen/005e.c
@@ -1,42 +1,106 @@
-typedef int foo_t[55], bar_t[66];
+typedef int foo_t[55];
+typedef int bar_t[66];
 
 # ____________________________________________________________
 
-static void __creflect1(void r(char *, void**, int))
+int test005e(char *r)
 {
-    void *a[2];
-    __CREFLECT_PREV(r);
+    int r1 = 0;
+    if (!r)
+        return 57 + 8 + 18 + 35 + 57 + 8 + 18 + 35;
     {
         foo_t *p1;
         char b[sizeof(**p1)];  /* check that 'foo_t[]' is a valid type */
+        char *r0 = r;
         p1 = (void *)b;
         if ((void *)p1 != (void *)*p1) {
-            r("E:type 'foo_t' is not an array, but a pointer type", 0, 0);
-            goto f1;
+            r = r0;
+            r += sprintf(r, "#error type 'foo_t' is not an array, but a 
pointer type\n");
+            r1 = -1;
+            goto f2;
         }
         (void)(**p1 << 1);  /* check that 'foo_t[]' is an integer type */
+        r += sprintf(r, "typedef ");
         **p1 = -1;
-        a[0] = (void *)(**p1 > 0 ? sizeof(**p1) : -sizeof(**p1));
-        a[1] = (void *)(sizeof(*p1) / sizeof(**p1));
+        if (**p1 > 0) {
+            if (sizeof(**p1) == 1 && **p1 == 1)
+                r += sprintf(r, "_Bool");
+            else if (sizeof(**p1) == sizeof(unsigned int))
+                r += sprintf(r, "unsigned int");
+            else if (sizeof(**p1) == sizeof(unsigned short))
+                r += sprintf(r, "unsigned short");
+            else if (sizeof(**p1) == sizeof(unsigned char))
+                r += sprintf(r, "unsigned char");
+            else if (sizeof(**p1) == sizeof(unsigned long))
+                r += sprintf(r, "unsigned long");
+            else if (sizeof(**p1) == sizeof(unsigned long long))
+                r += sprintf(r, "unsigned long long");
+            else
+                r += sprintf(r, "uint%u_t", (int)sizeof(**p1) * 8);
+        }
+        else {
+            if (sizeof(**p1) == sizeof(int))
+                r += sprintf(r, "int");
+            else if (sizeof(**p1) == sizeof(short))
+                r += sprintf(r, "short");
+            else if (sizeof(**p1) == sizeof(signed char))
+                r += sprintf(r, "signed char");
+            else if (sizeof(**p1) == sizeof(long))
+                r += sprintf(r, "long");
+            else if (sizeof(**p1) == sizeof(long long))
+                r += sprintf(r, "long long");
+            else
+                r += sprintf(r, "int%u_t", (int)sizeof(**p1) * 8);
+        }
+        r += sprintf(r, " foo_t[%lld];\n", (long long)(sizeof(*p1) / 
sizeof(**p1)));
+        f2:;
     }
-    r("=foo_t:int?[?]", a, 2);
-  f1:;
     {
         bar_t *p1;
         char b[sizeof(**p1)];  /* check that 'bar_t[]' is a valid type */
+        char *r0 = r;
         p1 = (void *)b;
         if ((void *)p1 != (void *)*p1) {
-            r("E:type 'bar_t' is not an array, but a pointer type", 0, 0);
-            goto f2;
+            r = r0;
+            r += sprintf(r, "#error type 'bar_t' is not an array, but a 
pointer type\n");
+            r1 = -1;
+            goto f3;
         }
         (void)(**p1 << 1);  /* check that 'bar_t[]' is an integer type */
+        r += sprintf(r, "typedef ");
         **p1 = -1;
-        a[0] = (void *)(**p1 > 0 ? sizeof(**p1) : -sizeof(**p1));
-        a[1] = (void *)(sizeof(*p1) / sizeof(**p1));
+        if (**p1 > 0) {
+            if (sizeof(**p1) == 1 && **p1 == 1)
+                r += sprintf(r, "_Bool");
+            else if (sizeof(**p1) == sizeof(unsigned int))
+                r += sprintf(r, "unsigned int");
+            else if (sizeof(**p1) == sizeof(unsigned short))
+                r += sprintf(r, "unsigned short");
+            else if (sizeof(**p1) == sizeof(unsigned char))
+                r += sprintf(r, "unsigned char");
+            else if (sizeof(**p1) == sizeof(unsigned long))
+                r += sprintf(r, "unsigned long");
+            else if (sizeof(**p1) == sizeof(unsigned long long))
+                r += sprintf(r, "unsigned long long");
+            else
+                r += sprintf(r, "uint%u_t", (int)sizeof(**p1) * 8);
+        }
+        else {
+            if (sizeof(**p1) == sizeof(int))
+                r += sprintf(r, "int");
+            else if (sizeof(**p1) == sizeof(short))
+                r += sprintf(r, "short");
+            else if (sizeof(**p1) == sizeof(signed char))
+                r += sprintf(r, "signed char");
+            else if (sizeof(**p1) == sizeof(long))
+                r += sprintf(r, "long");
+            else if (sizeof(**p1) == sizeof(long long))
+                r += sprintf(r, "long long");
+            else
+                r += sprintf(r, "int%u_t", (int)sizeof(**p1) * 8);
+        }
+        r += sprintf(r, " bar_t[%lld];\n", (long long)(sizeof(*p1) / 
sizeof(**p1)));
+        f3:;
     }
-    r("=bar_t:int?[?]", a, 2);
-  f2:;
+    return r1;
 }
-
-#expect  =foo_t:int?[?]  -4  55
-#expect  =bar_t:int?[?]  -4  66
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to