added scoped typedef to translate-c

This commit is contained in:
Matthew Knight 2020-05-02 20:22:43 -07:00
parent 3dbe02e2d8
commit c5198bd76f
2 changed files with 29 additions and 0 deletions

View File

@ -1394,6 +1394,24 @@ fn transDeclStmt(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangDeclStmt)
node.semicolon_token = try appendToken(c, .Semicolon, ";");
try block_scope.block_node.statements.push(&node.base);
},
.Typedef => {
const type_decl = @ptrCast(*const ZigClangTypedefNameDecl, it[0]);
const name = try c.str(ZigClangNamedDecl_getName_bytes_begin(
@ptrCast(*const ZigClangNamedDecl, type_decl),
));
const underlying_qual = ZigClangTypedefNameDecl_getUnderlyingType(type_decl);
const underlying_type = ZigClangQualType_getTypePtr(underlying_qual);
const mangled_name = try block_scope.makeMangledName(c, name);
const node = try transCreateNodeVarDecl(c, false, true, mangled_name);
node.eq_token = try appendToken(c, .Equal, "=");
const loc = ZigClangStmt_getBeginLoc(@ptrCast(*const ZigClangStmt, stmt));
node.init_node = try transType(rp, underlying_type, loc);
node.semicolon_token = try appendToken(c, .Semicolon, ";");
try block_scope.block_node.statements.push(&node.base);
},
else => |kind| return revertAndWarn(
rp,
error.UnsupportedTranslation,

View File

@ -243,4 +243,15 @@ pub fn addCases(cases: *tests.RunTranslatedCContext) void {
\\ return 0;
\\}
, "");
cases.add("scoped typedef",
\\int main(int argc, char **argv) {
\\ typedef int Foo;
\\ typedef Foo Bar;
\\ typedef void (*func)(int);
\\ Foo i;
\\ Bar j;
\\ return 0;
\\}
, "");
}