authorgravatar for evan@lagerdata.comEvan Haas <evan@lagerdata.com> 2021-05-07 10:23:43-07:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2021-05-23 15:42:36+03:00
logd321a4b765b94818c4a483a784bb6fc9048c64ba
tree80bfd36c642e7e175525b6b952c2c6142c9ca1ec
parente8236551abdb7bb74811e5e9dc9890cb2abbd269

translate-c: Translate FnDecl's that appear within functions


2 files changed, 15 insertions(+), 0 deletions(-)

src/translate_c.zig+3
...@@ -1682,6 +1682,9 @@ fn transDeclStmtOne(...@@ -1682,6 +1682,9 @@ fn transDeclStmtOne(
1682 .Enum => {1682 .Enum => {
1683 try transEnumDecl(c, scope, @ptrCast(*const clang.EnumDecl, decl));1683 try transEnumDecl(c, scope, @ptrCast(*const clang.EnumDecl, decl));
1684 },1684 },
1685 .Function => {
1686 try visitFnDecl(c, @ptrCast(*const clang.FunctionDecl, decl));
1687 },
1685 else => |kind| return fail(1688 else => |kind| return fail(
1686 c,1689 c,
1687 error.UnsupportedTranslation,1690 error.UnsupportedTranslation,
test/translate_c.zig+12
...@@ -3529,4 +3529,16 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -3529,4 +3529,16 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
3529 \\warning: unable to translate function, demoted to extern3529 \\warning: unable to translate function, demoted to extern
3530 \\pub extern fn initialize() void;3530 \\pub extern fn initialize() void;
3531 });3531 });
3532
3533 cases.add("Function prototype declared within function",
3534 \\int foo(void) {
3535 \\ extern int bar(int, int);
3536 \\ return bar(1, 2);
3537 \\}
3538 , &[_][]const u8{
3539 \\pub extern fn bar(c_int, c_int) c_int;
3540 \\pub export fn foo() c_int {
3541 \\ return bar(@as(c_int, 1), @as(c_int, 2));
3542 \\}
3543 });
3532}3544}