[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