| author | |
| committer | |
| log | 0795f17db23fff5aada41008348a63cbc9e0321b |
| tree | 62341cccc8b3b5d6a8724f4e5f4e832fd948893b |
| parent | 48ac84db1b6638d4892a5b9d88d193562e1a4f04 |
| signature | Commit is signed but in an unrecognized format. |
3 files changed, 31 insertions(+), 36 deletions(-)
src-self-hosted/clang.zig+2| ... | @@ -938,6 +938,7 @@ pub extern fn ZigClangImplicitCastExpr_getCastKind(*const ZigClangImplicitCastEx | ... | @@ -938,6 +938,7 @@ pub extern fn ZigClangImplicitCastExpr_getCastKind(*const ZigClangImplicitCastEx |
| 938 | pub extern fn ZigClangImplicitCastExpr_getSubExpr(*const ZigClangImplicitCastExpr) *const ZigClangExpr; | 938 | pub extern fn ZigClangImplicitCastExpr_getSubExpr(*const ZigClangImplicitCastExpr) *const ZigClangExpr; |
| 939 | 939 | ||
| 940 | pub extern fn ZigClangArrayType_getElementType(*const ZigClangArrayType) ZigClangQualType; | 940 | pub extern fn ZigClangArrayType_getElementType(*const ZigClangArrayType) ZigClangQualType; |
| 941 | pub extern fn ZigClangIncompleteArrayType_getElementType(*const ZigClangIncompleteArrayType) ZigClangQualType; | ||
| 941 | 942 | ||
| 942 | pub extern fn ZigClangConstantArrayType_getElementType(self: *const struct_ZigClangConstantArrayType) ZigClangQualType; | 943 | pub extern fn ZigClangConstantArrayType_getElementType(self: *const struct_ZigClangConstantArrayType) ZigClangQualType; |
| 943 | pub extern fn ZigClangConstantArrayType_getSize(self: *const struct_ZigClangConstantArrayType) *const struct_ZigClangAPInt; | 944 | pub extern fn ZigClangConstantArrayType_getSize(self: *const struct_ZigClangConstantArrayType) *const struct_ZigClangAPInt; |
| ... | @@ -968,6 +969,7 @@ pub const struct_ZigClangAPValue = extern struct { | ... | @@ -968,6 +969,7 @@ pub const struct_ZigClangAPValue = extern struct { |
| 968 | Kind: ZigClangAPValueKind, | 969 | Kind: ZigClangAPValueKind, |
| 969 | Data: if (builtin.os == .windows and builtin.abi == .msvc) [52]u8 else [68]u8, | 970 | Data: if (builtin.os == .windows and builtin.abi == .msvc) [52]u8 else [68]u8, |
| 970 | }; | 971 | }; |
| 972 | pub extern fn ZigClangVarDecl_getTypeSourceInfo_getType(self: *const struct_ZigClangVarDecl) struct_ZigClangQualType; | ||
| 971 | 973 | ||
| 972 | pub extern fn ZigClangIntegerLiteral_EvaluateAsInt(*const ZigClangIntegerLiteral, *ZigClangExprEvalResult, *const ZigClangASTContext) bool; | 974 | pub extern fn ZigClangIntegerLiteral_EvaluateAsInt(*const ZigClangIntegerLiteral, *ZigClangExprEvalResult, *const ZigClangASTContext) bool; |
| 973 | pub extern fn ZigClangIntegerLiteral_getBeginLoc(*const ZigClangIntegerLiteral) ZigClangSourceLocation; | 975 | pub extern fn ZigClangIntegerLiteral_getBeginLoc(*const ZigClangIntegerLiteral) ZigClangSourceLocation; |
src-self-hosted/translate_c.zig+14-1| ... | @@ -609,7 +609,7 @@ fn transDeclStmt(rp: RestorePoint, parent_scope: *Scope, stmt: *const ZigClangDe | ... | @@ -609,7 +609,7 @@ fn transDeclStmt(rp: RestorePoint, parent_scope: *Scope, stmt: *const ZigClangDe |
| 609 | null | 609 | null |
| 610 | else | 610 | else |
| 611 | try appendToken(c, .Keyword_threadlocal, "threadlocal"); | 611 | try appendToken(c, .Keyword_threadlocal, "threadlocal"); |
| 612 | const qual_type = ZigClangVarDecl_getType(var_decl); | 612 | const qual_type = ZigClangVarDecl_getTypeSourceInfo_getType(var_decl); |
| 613 | const mut_token = if (ZigClangQualType_isConstQualified(qual_type)) | 613 | const mut_token = if (ZigClangQualType_isConstQualified(qual_type)) |
| 614 | try appendToken(c, .Keyword_const, "const") | 614 | try appendToken(c, .Keyword_const, "const") |
| 615 | else | 615 | else |
| ... | @@ -1454,6 +1454,19 @@ fn transType(rp: RestorePoint, ty: *const ZigClangType, source_loc: ZigClangSour | ... | @@ -1454,6 +1454,19 @@ fn transType(rp: RestorePoint, ty: *const ZigClangType, source_loc: ZigClangSour |
| 1454 | node.rhs = try transQualType(rp, ZigClangConstantArrayType_getElementType(const_arr_ty), source_loc); | 1454 | node.rhs = try transQualType(rp, ZigClangConstantArrayType_getElementType(const_arr_ty), source_loc); |
| 1455 | return &node.base; | 1455 | return &node.base; |
| 1456 | }, | 1456 | }, |
| 1457 | .IncompleteArray => { | ||
| 1458 | const incomplete_array_ty = @ptrCast(*const ZigClangIncompleteArrayType, ty); | ||
| 1459 | |||
| 1460 | const child_qt = ZigClangIncompleteArrayType_getElementType(incomplete_array_ty); | ||
| 1461 | var node = try transCreateNodePtrType( | ||
| 1462 | rp.c, | ||
| 1463 | ZigClangQualType_isConstQualified(child_qt), | ||
| 1464 | ZigClangQualType_isVolatileQualified(child_qt), | ||
| 1465 | .Identifier, | ||
| 1466 | ); | ||
| 1467 | node.rhs = try transQualType(rp, child_qt, source_loc); | ||
| 1468 | return &node.base; | ||
| 1469 | }, | ||
| 1457 | else => { | 1470 | else => { |
| 1458 | const type_name = rp.c.str(ZigClangType_getTypeClassName(ty)); | 1471 | const type_name = rp.c.str(ZigClangType_getTypeClassName(ty)); |
| 1459 | return revertAndWarn(rp, error.UnsupportedType, source_loc, "unsupported type: '{}'", .{type_name}); | 1472 | return revertAndWarn(rp, error.UnsupportedType, source_loc, "unsupported type: '{}'", .{type_name}); |
test/translate_c.zig+15-35| ... | @@ -1,11 +1,11 @@ | ... | @@ -1,11 +1,11 @@ |
| 1 | const tests = @import("tests.zig"); | 1 | const tests = @import("tests.zig"); |
| 2 | const builtin = @import("builtin"); | 2 | const builtin = @import("builtin"); |
| 3 | 3 | ||
| 4 | // add_both - test for stage1 and stage2, in #include mode | 4 | // add_both - test for stage1 and stage2 |
| 5 | // add - test stage1 only, in #include mode | 5 | // add - test stage1 only |
| 6 | // add_2 - test stage2 only, in #include mode | 6 | // add_2 - test stage2 only |
| 7 | 7 | ||
| 8 | pub export fn addCases(cases: *tests.TranslateCContext) void { | 8 | pub fn addCases(cases: *tests.TranslateCContext) void { |
| 9 | /////////////// Cases that pass for both stage1/stage2 //////////////// | 9 | /////////////// Cases that pass for both stage1/stage2 //////////////// |
| 10 | cases.add_both("simple function prototypes", | 10 | cases.add_both("simple function prototypes", |
| 11 | \\void __attribute__((noreturn)) foo(void); | 11 | \\void __attribute__((noreturn)) foo(void); |
| ... | @@ -66,21 +66,17 @@ pub export fn addCases(cases: *tests.TranslateCContext) void { | ... | @@ -66,21 +66,17 @@ pub export fn addCases(cases: *tests.TranslateCContext) void { |
| 66 | \\pub var v0: [*c]const u8 = "0.0.0"; | 66 | \\pub var v0: [*c]const u8 = "0.0.0"; |
| 67 | }); | 67 | }); |
| 68 | 68 | ||
| 69 | /////////////// Cases that pass for only stage2 //////////////// | 69 | cases.add_both("static incomplete array inside function", |
| 70 | 70 | \\void foo(void) { | |
| 71 | cases.add_2("Parameterless function prototypes", | 71 | \\ static const char v2[] = "2.2.2"; |
| 72 | \\void a() {} | 72 | \\} |
| 73 | \\void b(void) {} | ||
| 74 | \\void c(); | ||
| 75 | \\void d(void); | ||
| 76 | , &[_][]const u8{ | 73 | , &[_][]const u8{ |
| 77 | \\pub export fn a() void {} | 74 | \\pub export fn foo() void { |
| 78 | \\pub export fn b() void {} | 75 | \\ const v2: [*c]const u8 = "2.2.2"; |
| 79 | \\pub extern fn c(...) void; | 76 | \\} |
| 80 | \\pub extern fn d() void; | ||
| 81 | }); | 77 | }); |
| 82 | 78 | ||
| 83 | cases.add_2("simple function definition", | 79 | cases.add_both("simple function definition", |
| 84 | \\void foo(void) {} | 80 | \\void foo(void) {} |
| 85 | \\static void bar(void) {} | 81 | \\static void bar(void) {} |
| 86 | , &[_][]const u8{ | 82 | , &[_][]const u8{ |
| ... | @@ -88,7 +84,9 @@ pub export fn addCases(cases: *tests.TranslateCContext) void { | ... | @@ -88,7 +84,9 @@ pub export fn addCases(cases: *tests.TranslateCContext) void { |
| 88 | \\pub fn bar() void {} | 84 | \\pub fn bar() void {} |
| 89 | }); | 85 | }); |
| 90 | 86 | ||
| 91 | cases.add_2("parameterless function prototypes", | 87 | /////////////// Cases that pass for only stage2 //////////////// |
| 88 | |||
| 89 | cases.add_2("Parameterless function prototypes", | ||
| 92 | \\void a() {} | 90 | \\void a() {} |
| 93 | \\void b(void) {} | 91 | \\void b(void) {} |
| 94 | \\void c(); | 92 | \\void c(); |
| ... | @@ -130,14 +128,6 @@ pub export fn addCases(cases: *tests.TranslateCContext) void { | ... | @@ -130,14 +128,6 @@ pub export fn addCases(cases: *tests.TranslateCContext) void { |
| 130 | \\}; | 128 | \\}; |
| 131 | }); | 129 | }); |
| 132 | 130 | ||
| 133 | cases.add_both("simple function definition", | ||
| 134 | \\void foo(void) {} | ||
| 135 | \\static void bar(void) {} | ||
| 136 | , &[_][]const u8{ | ||
| 137 | \\pub export fn foo() void {} | ||
| 138 | \\pub fn bar() void {} | ||
| 139 | }); | ||
| 140 | |||
| 141 | cases.add("macro with left shift", | 131 | cases.add("macro with left shift", |
| 142 | \\#define REDISMODULE_READ (1<<0) | 132 | \\#define REDISMODULE_READ (1<<0) |
| 143 | , &[_][]const u8{ | 133 | , &[_][]const u8{ |
| ... | @@ -1521,16 +1511,6 @@ pub export fn addCases(cases: *tests.TranslateCContext) void { | ... | @@ -1521,16 +1511,6 @@ pub export fn addCases(cases: *tests.TranslateCContext) void { |
| 1521 | \\} | 1511 | \\} |
| 1522 | }); | 1512 | }); |
| 1523 | 1513 | ||
| 1524 | cases.add("static incomplete array inside function", | ||
| 1525 | \\void foo(void) { | ||
| 1526 | \\ static const char v2[] = "2.2.2"; | ||
| 1527 | \\} | ||
| 1528 | , &[_][]const u8{ | ||
| 1529 | \\pub export fn foo() void { | ||
| 1530 | \\ const v2: [*c]const u8 = "2.2.2"; | ||
| 1531 | \\} | ||
| 1532 | }); | ||
| 1533 | |||
| 1534 | cases.add("macro pointer cast", | 1514 | cases.add("macro pointer cast", |
| 1535 | \\#define NRF_GPIO ((NRF_GPIO_Type *) NRF_GPIO_BASE) | 1515 | \\#define NRF_GPIO ((NRF_GPIO_Type *) NRF_GPIO_BASE) |
| 1536 | , &[_][]const u8{ | 1516 | , &[_][]const u8{ |