[pypy-commit] creflect default: more progress
arigo
noreply at buildbot.pypy.org
Mon Nov 17 22:56:33 CET 2014
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r58:f6aaaa694bb1
Date: 2014-11-17 22:56 +0100
http://bitbucket.org/cffi/creflect/changeset/f6aaaa694bb1/
Log: more progress
diff --git a/test/codegen/006c.c b/test/codegen/006c.c
--- a/test/codegen/006c.c
+++ b/test/codegen/006c.c
@@ -2,65 +2,30 @@
# ____________________________________________________________
-int test006c(char *r)
+void test006c(crx_builder_t *cb)
{
- int r1 = 0;
- if (!r)
- return 57 + 58 + 8 + 18 + 44;
+ crx_type_t *t1, *t2, *t3, *t4;
{
foo_t *p1;
char *p2;
char b[sizeof(***p1)]; /* check that '(*foo_t)[]' is a valid type */
- char *r0 = r;
p1 = (void *)&p2;
p2 = (void *)b;
if ((void *)p1 == (void *)*p1) {
- r = r0;
- r += sprintf(r, "#error type 'foo_t' is not a pointer, but an array type\n");
- r1 = -1;
- goto f2;
+ cb->error(cb, "type 'foo_t' is not a pointer, but an array type");
+ return;
}
if ((void *)*p1 != (void *)**p1) {
- r = r0;
- r += sprintf(r, "#error type '*foo_t' is not an array, but a pointer type\n");
- r1 = -1;
- goto f2;
+ cb->error(cb, "type '*foo_t' is not an array, but a pointer type");
+ return;
}
(void)(***p1 << 1); /* check that '(*foo_t)[]' is an integer type */
- r += sprintf(r, "typedef ");
***p1 = -1; /* check that '(*foo_t)[]' is not declared 'const' */
- 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, " (*const foo_t)[%lld];\n", (long long)(sizeof(**p1) / sizeof(***p1)));
- f2:;
+ t1 = CRX_INT_TYPE(cb, ***p1, "int");
+ t2 = cb->get_array_type(cb, t1, sizeof(**p1) / sizeof(***p1));
+ t3 = cb->get_pointer_type(cb, t2);
+ t4 = cb->get_const_type(cb, t3);
+ cb->define_type(cb, "foo_t", t4);
+#expect TYPEDEF foo_t = CONST PTR ARRAY[27] int
}
- return r1;
}
More information about the pypy-commit
mailing list