commit 3d1732ef6c8ebc7edf10485f61b4ec905303cd8a (tree)
parent 7a99d63c764f3d5d92370c90f932b1bf156269f6
Author: Marc Tiehuis <marctiehuis@gmail.com>
Date: Fri, 23 Mar 2018 20:27:11 +1300
Fix OpqaueType usage in exported c functions
We prefer `struct typename`. If a typedef is required, this must be done
manually after generation.
Diffstat:
2 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/src/codegen.cpp b/src/codegen.cpp
@@ -6592,6 +6592,7 @@ static void get_c_type(CodeGen *g, GenH *gen_h, TypeTableEntry *type_entry, Buf
}
}
case TypeTableEntryIdStruct:
+ case TypeTableEntryIdOpaque:
{
buf_init_from_str(out_buf, "struct ");
buf_append_buf(out_buf, &type_entry->name);
@@ -6609,11 +6610,6 @@ static void get_c_type(CodeGen *g, GenH *gen_h, TypeTableEntry *type_entry, Buf
buf_append_buf(out_buf, &type_entry->name);
return;
}
- case TypeTableEntryIdOpaque:
- {
- buf_init_from_buf(out_buf, &type_entry->name);
- return;
- }
case TypeTableEntryIdArray:
{
TypeTableEntryArray *array_data = &type_entry->data.array;
diff --git a/test/gen_h.zig b/test/gen_h.zig
@@ -51,6 +51,16 @@ pub fn addCases(cases: &tests.GenHContext) void {
\\
);
+ cases.add("declare opaque type",
+ \\export const Foo = @OpaqueType();
+ \\
+ \\export fn entry(foo: ?&Foo) void { }
+ ,
+ \\struct Foo;
+ \\
+ \\TEST_EXPORT void entry(struct Foo * foo);
+ );
+
cases.add("array field-type",
\\const Foo = extern struct {
\\ A: [2]i32,
@@ -66,4 +76,5 @@ pub fn addCases(cases: &tests.GenHContext) void {
\\TEST_EXPORT void entry(struct Foo foo, uint8_t bar[]);
\\
);
+
}