Skip to content

Commit dbb5da1

Browse files
committed
stage2 translate-c: builtin types and pub
See #1964
1 parent 82219b1 commit dbb5da1

File tree

2 files changed

+26
-4
lines changed

2 files changed

+26
-4
lines changed

src-self-hosted/translate_c.zig

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,25 @@ fn transType(rp: RestorePoint, ty: *const ZigClangType, source_loc: ZigClangSour
275275
.Builtin => {
276276
const builtin_ty = @ptrCast(*const ZigClangBuiltinType, ty);
277277
switch (ZigClangBuiltinType_getKind(builtin_ty)) {
278+
.Void => return appendIdentifier(rp.c, "c_void"),
279+
.Bool => return appendIdentifier(rp.c, "bool"),
280+
.Char_U, .UChar, .Char_S, .Char8 => return appendIdentifier(rp.c, "u8"),
281+
.SChar => return appendIdentifier(rp.c, "i8"),
282+
.UShort => return appendIdentifier(rp.c, "c_ushort"),
283+
.UInt => return appendIdentifier(rp.c, "c_uint"),
284+
.ULong => return appendIdentifier(rp.c, "c_ulong"),
285+
.ULongLong => return appendIdentifier(rp.c, "c_ulonglong"),
286+
.Short => return appendIdentifier(rp.c, "c_short"),
287+
.Int => return appendIdentifier(rp.c, "c_int"),
288+
.Long => return appendIdentifier(rp.c, "c_long"),
289+
.LongLong => return appendIdentifier(rp.c, "c_longlong"),
290+
.UInt128 => return appendIdentifier(rp.c, "u128"),
291+
.Int128 => return appendIdentifier(rp.c, "i128"),
292+
.Float => return appendIdentifier(rp.c, "f32"),
293+
.Double => return appendIdentifier(rp.c, "f64"),
294+
.Float128 => return appendIdentifier(rp.c, "f128"),
295+
.Float16 => return appendIdentifier(rp.c, "f16"),
296+
.LongDouble => return appendIdentifier(rp.c, "c_longdouble"),
278297
else => return revertAndWarn(rp, error.UnsupportedType, source_loc, "unsupported builtin type"),
279298
}
280299
},
@@ -328,7 +347,8 @@ fn transFnProto(
328347
// TODO check for always_inline attribute
329348
// TODO check for align attribute
330349

331-
// extern fn name(...) T
350+
// pub extern fn name(...) T
351+
const pub_tok = try appendToken(rp.c, .Keyword_pub, "pub");
332352
const cc_tok = if (cc == .Stdcall) try appendToken(rp.c, .Keyword_stdcallcc, "stdcallcc") else null;
333353
const is_export = exp: {
334354
const fn_decl = opt_fn_decl orelse break :exp false;
@@ -380,7 +400,7 @@ fn transFnProto(
380400
fn_proto.* = ast.Node.FnProto{
381401
.base = ast.Node{ .id = ast.Node.Id.FnProto },
382402
.doc_comments = null,
383-
.visib_token = null,
403+
.visib_token = pub_tok,
384404
.fn_token = fn_tok,
385405
.name_token = name_tok,
386406
.params = ast.Node.FnProto.ParamList.init(rp.c.a()),

test/translate_c.zig

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@ const builtin = @import("builtin");
33

44
pub fn addCases(cases: *tests.TranslateCContext) void {
55
/////////////// Cases that pass for both stage1/stage2 ////////////////
6-
cases.add_both("simple noreturn fn",
6+
cases.add_both("simple function prototypes",
77
\\void __attribute__((noreturn)) foo(void);
8+
\\int bar(void);
89
,
9-
\\extern fn foo() noreturn;
10+
\\pub extern fn foo() noreturn;
11+
\\pub extern fn bar() c_int;
1012
);
1113

1214
/////////////// Cases that pass for only stage2 ////////////////

0 commit comments

Comments
 (0)