Commit c5198bd76f

Matthew Knight <mgk1795@gmail.com>
2020-05-03 05:22:43
added scoped typedef to translate-c
1 parent 3dbe02e
Changed files (2)
src-self-hosted/translate_c.zig
@@ -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,
test/run_translated_c.zig
@@ -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;
+        \\}
+    , "");
 }