authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2019-12-29 11:45:39+02:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2019-12-29 14:01:59+02:00
logf5e7d2d00c0bfdbdf95c57b8b5528f945fcf00c2
tree3993982b1875e38b132173aa536fe13814333121
parent59cc7072e22d03ba40456a58eaf3b37b239b420e
signature Commit is signed but in an unrecognized format.

translate-c fix bugs

Thanks @daurnimator

3 files changed, 151 insertions(+), 141 deletions(-)

lib/std/zig/render.zig+1-1
...@@ -643,7 +643,7 @@ fn renderExpression(...@@ -643,7 +643,7 @@ fn renderExpression(
643 },643 },
644644
645 .ArrayAccess => |index_expr| {645 .ArrayAccess => |index_expr| {
646 const lbracket = tree.prevToken(index_expr.firstToken());646 const lbracket = tree.nextToken(suffix_op.lhs.node.lastToken());
647 const rbracket = tree.nextToken(index_expr.lastToken());647 const rbracket = tree.nextToken(index_expr.lastToken());
648648
649 try renderExpression(allocator, stream, tree, indent, start_col, suffix_op.lhs.node, Space.None);649 try renderExpression(allocator, stream, tree, indent, start_col, suffix_op.lhs.node, Space.None);
src-self-hosted/translate_c.zig+47-33
...@@ -410,11 +410,17 @@ fn visitFnDecl(c: *Context, fn_decl: *const ZigClangFunctionDecl) Error!void {...@@ -410,11 +410,17 @@ fn visitFnDecl(c: *Context, fn_decl: *const ZigClangFunctionDecl) Error!void {
410 const param_name = tokenSlice(c, param.name_token orelse410 const param_name = tokenSlice(c, param.name_token orelse
411 return failDecl(c, fn_decl_loc, fn_name, "function {} parameter has no name", .{fn_name}));411 return failDecl(c, fn_decl_loc, fn_name, "function {} parameter has no name", .{fn_name}));
412412
413 const checked_param_name = if (try scope.createAlias(rp.c, param_name)) |a| blk: {413 // in Zig top level declarations are order-independent so this might be shadowed later
414 try block_scope.variables.push(.{ .name = param_name, .alias = a });414 const checked_param_name = try std.fmt.allocPrint(c.a(), "{}_{}", .{ param_name, c.getMangle() });
415 break :blk a;415 try block_scope.variables.push(.{ .name = param_name, .alias = checked_param_name });
416 } else param_name;416
417 const arg_name = try std.fmt.allocPrint(c.a(), "_arg_{}", .{checked_param_name});417 const arg_name = blk: {
418 const bare_arg_name = try std.fmt.allocPrint(c.a(), "_arg_{}", .{checked_param_name});
419 break :blk if (try scope.createAlias(rp.c, bare_arg_name)) |a|
420 a
421 else
422 bare_arg_name;
423 };
418424
419 const node = try transCreateNodeVarDecl(c, false, false, checked_param_name);425 const node = try transCreateNodeVarDecl(c, false, false, checked_param_name);
420 node.eq_token = try appendToken(c, .Equal, "=");426 node.eq_token = try appendToken(c, .Equal, "=");
...@@ -533,49 +539,53 @@ fn transTypeDef(c: *Context, typedef_decl: *const ZigClangTypedefNameDecl) Error...@@ -533,49 +539,53 @@ fn transTypeDef(c: *Context, typedef_decl: *const ZigClangTypedefNameDecl) Error
533539
534 const typedef_name = try c.str(ZigClangDecl_getName_bytes_begin(@ptrCast(*const ZigClangDecl, typedef_decl)));540 const typedef_name = try c.str(ZigClangDecl_getName_bytes_begin(@ptrCast(*const ZigClangDecl, typedef_decl)));
535541
536 if (mem.eql(u8, typedef_name, "uint8_t"))542 // TODO https://github.com/ziglang/zig/issues/3756
543 // TODO https://github.com/ziglang/zig/issues/1802
544 const checked_name = if (isZigPrimitiveType(typedef_name)) try std.fmt.allocPrint(c.a(), "_{}", .{typedef_name}) else typedef_name;
545
546 if (mem.eql(u8, checked_name, "uint8_t"))
537 return transTypeDefAsBuiltin(c, typedef_decl, "u8")547 return transTypeDefAsBuiltin(c, typedef_decl, "u8")
538 else if (mem.eql(u8, typedef_name, "int8_t"))548 else if (mem.eql(u8, checked_name, "int8_t"))
539 return transTypeDefAsBuiltin(c, typedef_decl, "i8")549 return transTypeDefAsBuiltin(c, typedef_decl, "i8")
540 else if (mem.eql(u8, typedef_name, "uint16_t"))550 else if (mem.eql(u8, checked_name, "uint16_t"))
541 return transTypeDefAsBuiltin(c, typedef_decl, "u16")551 return transTypeDefAsBuiltin(c, typedef_decl, "u16")
542 else if (mem.eql(u8, typedef_name, "int16_t"))552 else if (mem.eql(u8, checked_name, "int16_t"))
543 return transTypeDefAsBuiltin(c, typedef_decl, "i16")553 return transTypeDefAsBuiltin(c, typedef_decl, "i16")
544 else if (mem.eql(u8, typedef_name, "uint32_t"))554 else if (mem.eql(u8, checked_name, "uint32_t"))
545 return transTypeDefAsBuiltin(c, typedef_decl, "u32")555 return transTypeDefAsBuiltin(c, typedef_decl, "u32")
546 else if (mem.eql(u8, typedef_name, "int32_t"))556 else if (mem.eql(u8, checked_name, "int32_t"))
547 return transTypeDefAsBuiltin(c, typedef_decl, "i32")557 return transTypeDefAsBuiltin(c, typedef_decl, "i32")
548 else if (mem.eql(u8, typedef_name, "uint64_t"))558 else if (mem.eql(u8, checked_name, "uint64_t"))
549 return transTypeDefAsBuiltin(c, typedef_decl, "u64")559 return transTypeDefAsBuiltin(c, typedef_decl, "u64")
550 else if (mem.eql(u8, typedef_name, "int64_t"))560 else if (mem.eql(u8, checked_name, "int64_t"))
551 return transTypeDefAsBuiltin(c, typedef_decl, "i64")561 return transTypeDefAsBuiltin(c, typedef_decl, "i64")
552 else if (mem.eql(u8, typedef_name, "intptr_t"))562 else if (mem.eql(u8, checked_name, "intptr_t"))
553 return transTypeDefAsBuiltin(c, typedef_decl, "isize")563 return transTypeDefAsBuiltin(c, typedef_decl, "isize")
554 else if (mem.eql(u8, typedef_name, "uintptr_t"))564 else if (mem.eql(u8, checked_name, "uintptr_t"))
555 return transTypeDefAsBuiltin(c, typedef_decl, "usize")565 return transTypeDefAsBuiltin(c, typedef_decl, "usize")
556 else if (mem.eql(u8, typedef_name, "ssize_t"))566 else if (mem.eql(u8, checked_name, "ssize_t"))
557 return transTypeDefAsBuiltin(c, typedef_decl, "isize")567 return transTypeDefAsBuiltin(c, typedef_decl, "isize")
558 else if (mem.eql(u8, typedef_name, "size_t"))568 else if (mem.eql(u8, checked_name, "size_t"))
559 return transTypeDefAsBuiltin(c, typedef_decl, "usize");569 return transTypeDefAsBuiltin(c, typedef_decl, "usize");
560570
561 _ = try c.decl_table.put(@ptrToInt(ZigClangTypedefNameDecl_getCanonicalDecl(typedef_decl)), typedef_name);571 _ = try c.decl_table.put(@ptrToInt(ZigClangTypedefNameDecl_getCanonicalDecl(typedef_decl)), checked_name);
562 const visib_tok = try appendToken(c, .Keyword_pub, "pub");572 const visib_tok = try appendToken(c, .Keyword_pub, "pub");
563 const const_tok = try appendToken(c, .Keyword_const, "const");573 const const_tok = try appendToken(c, .Keyword_const, "const");
564 const node = try transCreateNodeVarDecl(c, true, true, typedef_name);574 const node = try transCreateNodeVarDecl(c, true, true, checked_name);
565 node.eq_token = try appendToken(c, .Equal, "=");575 node.eq_token = try appendToken(c, .Equal, "=");
566576
567 const child_qt = ZigClangTypedefNameDecl_getUnderlyingType(typedef_decl);577 const child_qt = ZigClangTypedefNameDecl_getUnderlyingType(typedef_decl);
568 const typedef_loc = ZigClangTypedefNameDecl_getLocation(typedef_decl);578 const typedef_loc = ZigClangTypedefNameDecl_getLocation(typedef_decl);
569 node.init_node = transQualType(rp, child_qt, typedef_loc) catch |err| switch (err) {579 node.init_node = transQualType(rp, child_qt, typedef_loc) catch |err| switch (err) {
570 error.UnsupportedType => {580 error.UnsupportedType => {
571 try failDecl(c, typedef_loc, typedef_name, "unable to resolve typedef child type", .{});581 try failDecl(c, typedef_loc, checked_name, "unable to resolve typedef child type", .{});
572 return null;582 return null;
573 },583 },
574 error.OutOfMemory => |e| return e,584 error.OutOfMemory => |e| return e,
575 };585 };
576 node.semicolon_token = try appendToken(c, .Semicolon, ";");586 node.semicolon_token = try appendToken(c, .Semicolon, ";");
577 try addTopLevelDecl(c, typedef_name, &node.base);587 try addTopLevelDecl(c, checked_name, &node.base);
578 return transCreateNodeIdentifier(c, typedef_name);588 return transCreateNodeIdentifier(c, checked_name);
579}589}
580590
581fn transRecordDecl(c: *Context, record_decl: *const ZigClangRecordDecl) Error!?*ast.Node {591fn transRecordDecl(c: *Context, record_decl: *const ZigClangRecordDecl) Error!?*ast.Node {
...@@ -4226,7 +4236,7 @@ fn transMacroFnDefine(c: *Context, it: *ctok.TokenList.Iterator, name: []const u...@@ -4226,7 +4236,7 @@ fn transMacroFnDefine(c: *Context, it: *ctok.TokenList.Iterator, name: []const u
4226 _ = try appendToken(c, .RParen, ")");4236 _ = try appendToken(c, .RParen, ")");
42274237
4228 const type_of = try transCreateNodeBuiltinFnCall(c, "@TypeOf");4238 const type_of = try transCreateNodeBuiltinFnCall(c, "@TypeOf");
4229 type_of.rparen_token = try appendToken(c, .LParen, ")");4239 type_of.rparen_token = try appendToken(c, .RParen, ")");
42304240
4231 const fn_proto = try c.a().create(ast.Node.FnProto);4241 const fn_proto = try c.a().create(ast.Node.FnProto);
4232 fn_proto.* = .{4242 fn_proto.* = .{
...@@ -4383,8 +4393,8 @@ fn parseCPrimaryExpr(c: *Context, it: *ctok.TokenList.Iterator, source_loc: ZigC...@@ -4383,8 +4393,8 @@ fn parseCPrimaryExpr(c: *Context, it: *ctok.TokenList.Iterator, source_loc: ZigC
4383 const type_of_1 = try transCreateNodeBuiltinFnCall(c, "@TypeOf");4393 const type_of_1 = try transCreateNodeBuiltinFnCall(c, "@TypeOf");
4384 try type_id_1.params.push(&type_of_1.base);4394 try type_id_1.params.push(&type_of_1.base);
4385 try type_of_1.params.push(node_to_cast);4395 try type_of_1.params.push(node_to_cast);
4386 type_of_1.rparen_token = try appendToken(c, .LParen, ")");4396 type_of_1.rparen_token = try appendToken(c, .RParen, ")");
4387 type_id_1.rparen_token = try appendToken(c, .LParen, ")");4397 type_id_1.rparen_token = try appendToken(c, .RParen, ")");
43884398
4389 const cmp_1 = try c.a().create(ast.Node.InfixOp);4399 const cmp_1 = try c.a().create(ast.Node.InfixOp);
4390 cmp_1.* = .{4400 cmp_1.* = .{
...@@ -4394,12 +4404,12 @@ fn parseCPrimaryExpr(c: *Context, it: *ctok.TokenList.Iterator, source_loc: ZigC...@@ -4394,12 +4404,12 @@ fn parseCPrimaryExpr(c: *Context, it: *ctok.TokenList.Iterator, source_loc: ZigC
4394 .rhs = try transCreateNodeEnumLiteral(c, "Pointer"),4404 .rhs = try transCreateNodeEnumLiteral(c, "Pointer"),
4395 };4405 };
4396 if_1.condition = &cmp_1.base;4406 if_1.condition = &cmp_1.base;
4397 _ = try appendToken(c, .LParen, ")");4407 _ = try appendToken(c, .RParen, ")");
43984408
4399 const ptr_cast = try transCreateNodeBuiltinFnCall(c, "@ptrCast");4409 const ptr_cast = try transCreateNodeBuiltinFnCall(c, "@ptrCast");
4400 try ptr_cast.params.push(inner_node);4410 try ptr_cast.params.push(inner_node);
4401 try ptr_cast.params.push(node_to_cast);4411 try ptr_cast.params.push(node_to_cast);
4402 ptr_cast.rparen_token = try appendToken(c, .LParen, ")");4412 ptr_cast.rparen_token = try appendToken(c, .RParen, ")");
4403 if_1.body = &ptr_cast.base;4413 if_1.body = &ptr_cast.base;
44044414
4405 const else_1 = try transCreateNodeElse(c);4415 const else_1 = try transCreateNodeElse(c);
...@@ -4410,8 +4420,8 @@ fn parseCPrimaryExpr(c: *Context, it: *ctok.TokenList.Iterator, source_loc: ZigC...@@ -4410,8 +4420,8 @@ fn parseCPrimaryExpr(c: *Context, it: *ctok.TokenList.Iterator, source_loc: ZigC
4410 const type_of_2 = try transCreateNodeBuiltinFnCall(c, "@TypeOf");4420 const type_of_2 = try transCreateNodeBuiltinFnCall(c, "@TypeOf");
4411 try type_id_2.params.push(&type_of_2.base);4421 try type_id_2.params.push(&type_of_2.base);
4412 try type_of_2.params.push(node_to_cast);4422 try type_of_2.params.push(node_to_cast);
4413 type_of_2.rparen_token = try appendToken(c, .LParen, ")");4423 type_of_2.rparen_token = try appendToken(c, .RParen, ")");
4414 type_id_2.rparen_token = try appendToken(c, .LParen, ")");4424 type_id_2.rparen_token = try appendToken(c, .RParen, ")");
44154425
4416 const cmp_2 = try c.a().create(ast.Node.InfixOp);4426 const cmp_2 = try c.a().create(ast.Node.InfixOp);
4417 cmp_2.* = .{4427 cmp_2.* = .{
...@@ -4422,12 +4432,12 @@ fn parseCPrimaryExpr(c: *Context, it: *ctok.TokenList.Iterator, source_loc: ZigC...@@ -4422,12 +4432,12 @@ fn parseCPrimaryExpr(c: *Context, it: *ctok.TokenList.Iterator, source_loc: ZigC
4422 };4432 };
4423 if_2.condition = &cmp_2.base;4433 if_2.condition = &cmp_2.base;
4424 else_1.body = &if_2.base;4434 else_1.body = &if_2.base;
4425 _ = try appendToken(c, .LParen, ")");4435 _ = try appendToken(c, .RParen, ")");
44264436
4427 const int_to_ptr = try transCreateNodeBuiltinFnCall(c, "@intToPtr");4437 const int_to_ptr = try transCreateNodeBuiltinFnCall(c, "@intToPtr");
4428 try int_to_ptr.params.push(inner_node);4438 try int_to_ptr.params.push(inner_node);
4429 try int_to_ptr.params.push(node_to_cast);4439 try int_to_ptr.params.push(node_to_cast);
4430 int_to_ptr.rparen_token = try appendToken(c, .LParen, ")");4440 int_to_ptr.rparen_token = try appendToken(c, .RParen, ")");
4431 if_2.body = &int_to_ptr.base;4441 if_2.body = &int_to_ptr.base;
44324442
4433 const else_2 = try transCreateNodeElse(c);4443 const else_2 = try transCreateNodeElse(c);
...@@ -4436,7 +4446,7 @@ fn parseCPrimaryExpr(c: *Context, it: *ctok.TokenList.Iterator, source_loc: ZigC...@@ -4436,7 +4446,7 @@ fn parseCPrimaryExpr(c: *Context, it: *ctok.TokenList.Iterator, source_loc: ZigC
4436 const as = try transCreateNodeBuiltinFnCall(c, "@as");4446 const as = try transCreateNodeBuiltinFnCall(c, "@as");
4437 try as.params.push(inner_node);4447 try as.params.push(inner_node);
4438 try as.params.push(node_to_cast);4448 try as.params.push(node_to_cast);
4439 as.rparen_token = try appendToken(c, .LParen, ")");4449 as.rparen_token = try appendToken(c, .RParen, ")");
4440 else_2.body = &as.base;4450 else_2.body = &as.base;
44414451
4442 return &if_1.base;4452 return &if_1.base;
...@@ -4638,7 +4648,11 @@ fn parseCPrefixOpExpr(c: *Context, it: *ctok.TokenList.Iterator, source_loc: Zig...@@ -4638,7 +4648,11 @@ fn parseCPrefixOpExpr(c: *Context, it: *ctok.TokenList.Iterator, source_loc: Zig
46384648
4639fn tokenSlice(c: *Context, token: ast.TokenIndex) []u8 {4649fn tokenSlice(c: *Context, token: ast.TokenIndex) []u8 {
4640 const tok = c.tree.tokens.at(token);4650 const tok = c.tree.tokens.at(token);
4641 return c.source_buffer.toSlice()[tok.start..tok.end];4651 const slice = c.source_buffer.toSlice()[tok.start..tok.end];
4652 return if (mem.startsWith(u8, slice, "@\""))
4653 slice[2 .. slice.len - 1]
4654 else
4655 slice;
4642}4656}
46434657
4644fn getContainer(c: *Context, node: *ast.Node) ?*ast.Node {4658fn getContainer(c: *Context, node: *ast.Node) ?*ast.Node {
test/translate_c.zig+103-107
...@@ -1098,13 +1098,12 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1098,13 +1098,12 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1098 });1098 });
10991099
1100 cases.add("comma operator",1100 cases.add("comma operator",
1101 \\int foo(char c) {1101 \\int foo() {
1102 \\ 2, 4;1102 \\ 2, 4;
1103 \\ return 2, 4, 6;1103 \\ return 2, 4, 6;
1104 \\}1104 \\}
1105 , &[_][]const u8{1105 , &[_][]const u8{
1106 \\pub export fn foo(_arg_c: u8) c_int {1106 \\pub export fn foo() c_int {
1107 \\ var c = _arg_c;
1108 \\ _ = 2;1107 \\ _ = 2;
1109 \\ _ = 4;1108 \\ _ = 4;
1110 \\ _ = 2;1109 \\ _ = 2;
...@@ -1113,15 +1112,14 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1113,15 +1112,14 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1113 \\}1112 \\}
1114 });1113 });
11151114
1116 cases.add("wors-case assign",1115 cases.add("worst-case assign",
1117 \\int foo(char c) {1116 \\int foo() {
1118 \\ int a;1117 \\ int a;
1119 \\ int b;1118 \\ int b;
1120 \\ a = b = 2;1119 \\ a = b = 2;
1121 \\}1120 \\}
1122 , &[_][]const u8{1121 , &[_][]const u8{
1123 \\pub export fn foo(_arg_c: u8) c_int {1122 \\pub export fn foo() c_int {
1124 \\ var c = _arg_c;
1125 \\ var a: c_int = undefined;1123 \\ var a: c_int = undefined;
1126 \\ var b: c_int = undefined;1124 \\ var b: c_int = undefined;
1127 \\ a = blk: {1125 \\ a = blk: {
...@@ -1133,7 +1131,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1133,7 +1131,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1133 });1131 });
11341132
1135 cases.add("if statements",1133 cases.add("if statements",
1136 \\int foo(char c) {1134 \\int foo() {
1137 \\ if (2) {1135 \\ if (2) {
1138 \\ int a = 2;1136 \\ int a = 2;
1139 \\ }1137 \\ }
...@@ -1142,8 +1140,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1142,8 +1140,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1142 \\ }1140 \\ }
1143 \\}1141 \\}
1144 , &[_][]const u8{1142 , &[_][]const u8{
1145 \\pub export fn foo(_arg_c: u8) c_int {1143 \\pub export fn foo() c_int {
1146 \\ var c = _arg_c;
1147 \\ if (2 != 0) {1144 \\ if (2 != 0) {
1148 \\ var a: c_int = 2;1145 \\ var a: c_int = 2;
1149 \\ }1146 \\ }
...@@ -1266,15 +1263,15 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1266,15 +1263,15 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1266 \\ }1263 \\ }
1267 \\}1264 \\}
1268 , &[_][]const u8{1265 , &[_][]const u8{
1269 \\pub export fn switch_fn(_arg_i: c_int) c_int {1266 \\pub export fn switch_fn(_arg_i_1: c_int) c_int {
1270 \\ var i = _arg_i;1267 \\ var i_1 = _arg_i_1;
1271 \\ var res: c_int = 0;1268 \\ var res: c_int = 0;
1272 \\ __switch: {1269 \\ __switch: {
1273 \\ __case_2: {1270 \\ __case_2: {
1274 \\ __default: {1271 \\ __default: {
1275 \\ __case_1: {1272 \\ __case_1: {
1276 \\ __case_0: {1273 \\ __case_0: {
1277 \\ switch (i) {1274 \\ switch (i_1) {
1278 \\ 0 => break :__case_0,1275 \\ 0 => break :__case_0,
1279 \\ 1...3 => break :__case_1,1276 \\ 1...3 => break :__case_1,
1280 \\ else => break :__default,1277 \\ else => break :__default,
...@@ -1285,7 +1282,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1285,7 +1282,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1285 \\ }1282 \\ }
1286 \\ res = 2;1283 \\ res = 2;
1287 \\ }1284 \\ }
1288 \\ res = (3 * i);1285 \\ res = (3 * i_1);
1289 \\ break :__switch;1286 \\ break :__switch;
1290 \\ }1287 \\ }
1291 \\ res = 5;1288 \\ res = 5;
...@@ -1328,11 +1325,11 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1328,11 +1325,11 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1328 \\ a = tmp;1325 \\ a = tmp;
1329 \\}1326 \\}
1330 , &[_][]const u8{1327 , &[_][]const u8{
1331 \\pub export fn max(_arg_a: c_int) c_int {1328 \\pub export fn max(_arg_a_1: c_int) c_int {
1332 \\ var a = _arg_a;1329 \\ var a_1 = _arg_a_1;
1333 \\ var tmp: c_int = undefined;1330 \\ var tmp: c_int = undefined;
1334 \\ tmp = a;1331 \\ tmp = a_1;
1335 \\ a = tmp;1332 \\ a_1 = tmp;
1336 \\}1333 \\}
1337 });1334 });
13381335
...@@ -1342,14 +1339,14 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1342,14 +1339,14 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1342 \\ c = b = a;1339 \\ c = b = a;
1343 \\}1340 \\}
1344 , &[_][]const u8{1341 , &[_][]const u8{
1345 \\pub export fn max(_arg_a: c_int) void {1342 \\pub export fn max(_arg_a_1: c_int) void {
1346 \\ var a = _arg_a;1343 \\ var a_1 = _arg_a_1;
1347 \\ var b: c_int = undefined;1344 \\ var b: c_int = undefined;
1348 \\ var c: c_int = undefined;1345 \\ var c: c_int = undefined;
1349 \\ c = blk: {1346 \\ c = blk: {
1350 \\ const _tmp_1 = a;1347 \\ const _tmp_2 = a_1;
1351 \\ b = _tmp_1;1348 \\ b = _tmp_2;
1352 \\ break :blk _tmp_1;1349 \\ break :blk _tmp_2;
1353 \\ };1350 \\ };
1354 \\}1351 \\}
1355 });1352 });
...@@ -1373,9 +1370,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1373,9 +1370,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1373 \\ return (int)a;1370 \\ return (int)a;
1374 \\}1371 \\}
1375 , &[_][]const u8{1372 , &[_][]const u8{
1376 \\pub export fn float_to_int(_arg_a: f32) c_int {1373 \\pub export fn float_to_int(_arg_a_1: f32) c_int {
1377 \\ var a = _arg_a;1374 \\ var a_1 = _arg_a_1;
1378 \\ return @floatToInt(c_int, a);1375 \\ return @floatToInt(c_int, a_1);
1379 \\}1376 \\}
1380 });1377 });
13811378
...@@ -1469,23 +1466,23 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1469,23 +1466,23 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1469 \\ C,1466 \\ C,
1470 \\};1467 \\};
1471 \\pub const SomeTypedef = c_int;1468 \\pub const SomeTypedef = c_int;
1472 \\pub export fn and_or_non_bool(_arg_a: c_int, _arg_b: f32, _arg_c: ?*c_void) c_int {1469 \\pub export fn and_or_non_bool(_arg_a_1: c_int, _arg_b_2: f32, _arg_c_3: ?*c_void) c_int {
1473 \\ var a = _arg_a;1470 \\ var a_1 = _arg_a_1;
1474 \\ var b = _arg_b;1471 \\ var b_2 = _arg_b_2;
1475 \\ var c = _arg_c;1472 \\ var c_3 = _arg_c_3;
1476 \\ var d: enum_Foo = @intToEnum(enum_Foo, FooA);1473 \\ var d: enum_Foo = @intToEnum(enum_Foo, FooA);
1477 \\ var e: c_int = @boolToInt(((a != 0) and (b != 0)));1474 \\ var e: c_int = @boolToInt(((a_1 != 0) and (b_2 != 0)));
1478 \\ var f: c_int = @boolToInt(((b != 0) and (c != null)));1475 \\ var f: c_int = @boolToInt(((b_2 != 0) and (c_3 != null)));
1479 \\ var g: c_int = @boolToInt(((a != 0) and (c != null)));1476 \\ var g: c_int = @boolToInt(((a_1 != 0) and (c_3 != null)));
1480 \\ var h: c_int = @boolToInt(((a != 0) or (b != 0)));1477 \\ var h: c_int = @boolToInt(((a_1 != 0) or (b_2 != 0)));
1481 \\ var i: c_int = @boolToInt(((b != 0) or (c != null)));1478 \\ var i: c_int = @boolToInt(((b_2 != 0) or (c_3 != null)));
1482 \\ var j: c_int = @boolToInt(((a != 0) or (c != null)));1479 \\ var j: c_int = @boolToInt(((a_1 != 0) or (c_3 != null)));
1483 \\ var k: c_int = @boolToInt(((a != 0) or (@enumToInt(d) != 0)));1480 \\ var k: c_int = @boolToInt(((a_1 != 0) or (@enumToInt(d) != 0)));
1484 \\ var l: c_int = @boolToInt(((@enumToInt(d) != 0) and (b != 0)));1481 \\ var l: c_int = @boolToInt(((@enumToInt(d) != 0) and (b_2 != 0)));
1485 \\ var m: c_int = @boolToInt(((c != null) or (@enumToInt(d) != 0)));1482 \\ var m: c_int = @boolToInt(((c_3 != null) or (@enumToInt(d) != 0)));
1486 \\ var td: SomeTypedef = 44;1483 \\ var td: SomeTypedef = 44;
1487 \\ var o: c_int = @boolToInt(((td != 0) or (b != 0)));1484 \\ var o: c_int = @boolToInt(((td != 0) or (b_2 != 0)));
1488 \\ var p: c_int = @boolToInt(((c != null) and (td != 0)));1485 \\ var p: c_int = @boolToInt(((c_3 != null) and (td != 0)));
1489 \\ return ((((((((((e + f) + g) + h) + i) + j) + k) + l) + m) + o) + p);1486 \\ return ((((((((((e + f) + g) + h) + i) + j) + k) + l) + m) + o) + p);
1490 \\}1487 \\}
1491 ,1488 ,
...@@ -1523,10 +1520,10 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1523,10 +1520,10 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1523 \\ return (a & b) ^ (a | b);1520 \\ return (a & b) ^ (a | b);
1524 \\}1521 \\}
1525 , &[_][]const u8{1522 , &[_][]const u8{
1526 \\pub export fn max(_arg_a: c_int, _arg_b: c_int) c_int {1523 \\pub export fn max(_arg_a_1: c_int, _arg_b_2: c_int) c_int {
1527 \\ var a = _arg_a;1524 \\ var a_1 = _arg_a_1;
1528 \\ var b = _arg_b;1525 \\ var b_2 = _arg_b_2;
1529 \\ return ((a & b) ^ (a | b));1526 \\ return ((a_1 & b_2) ^ (a_1 | b_2));
1530 \\}1527 \\}
1531 });1528 });
15321529
...@@ -1542,13 +1539,13 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1542,13 +1539,13 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1542 \\ return i;1539 \\ return i;
1543 \\}1540 \\}
1544 , &[_][]const u8{1541 , &[_][]const u8{
1545 \\pub export fn test_comparisons(_arg_a: c_int, _arg_b: c_int) c_int {1542 \\pub export fn test_comparisons(_arg_a_1: c_int, _arg_b_2: c_int) c_int {
1546 \\ var a = _arg_a;1543 \\ var a_1 = _arg_a_1;
1547 \\ var b = _arg_b;1544 \\ var b_2 = _arg_b_2;
1548 \\ var c: c_int = @boolToInt((a < b));1545 \\ var c: c_int = @boolToInt((a_1 < b_2));
1549 \\ var d: c_int = @boolToInt((a > b));1546 \\ var d: c_int = @boolToInt((a_1 > b_2));
1550 \\ var e: c_int = @boolToInt((a <= b));1547 \\ var e: c_int = @boolToInt((a_1 <= b_2));
1551 \\ var f: c_int = @boolToInt((a >= b));1548 \\ var f: c_int = @boolToInt((a_1 >= b_2));
1552 \\ var g: c_int = @boolToInt((c < d));1549 \\ var g: c_int = @boolToInt((c < d));
1553 \\ var h: c_int = @boolToInt((e < f));1550 \\ var h: c_int = @boolToInt((e < f));
1554 \\ var i: c_int = @boolToInt((g < h));1551 \\ var i: c_int = @boolToInt((g < h));
...@@ -1565,12 +1562,12 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1565,12 +1562,12 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1565 \\ return a;1562 \\ return a;
1566 \\}1563 \\}
1567 , &[_][]const u8{1564 , &[_][]const u8{
1568 \\pub export fn max(_arg_a: c_int, _arg_b: c_int) c_int {1565 \\pub export fn max(_arg_a_1: c_int, _arg_b_2: c_int) c_int {
1569 \\ var a = _arg_a;1566 \\ var a_1 = _arg_a_1;
1570 \\ var b = _arg_b;1567 \\ var b_2 = _arg_b_2;
1571 \\ if (a == b) return a;1568 \\ if (a_1 == b_2) return a_1;
1572 \\ if (a != b) return b;1569 \\ if (a_1 != b_2) return b_2;
1573 \\ return a;1570 \\ return a_1;
1574 \\}1571 \\}
1575 });1572 });
15761573
...@@ -1643,9 +1640,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1643,9 +1640,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1643 \\}1640 \\}
1644 , &[_][]const u8{1641 , &[_][]const u8{
1645 \\pub export var array: [100]c_int = .{0} ** 100;1642 \\pub export var array: [100]c_int = .{0} ** 100;
1646 \\pub export fn foo(_arg_index: c_int) c_int {1643 \\pub export fn foo(_arg_index_1: c_int) c_int {
1647 \\ var index = _arg_index;1644 \\ var index_1 = _arg_index_1;
1648 \\ return array[index];1645 \\ return array[index_1];
1649 \\}1646 \\}
1650 ,1647 ,
1651 \\pub const ACCESS = array[2];1648 \\pub const ACCESS = array[2];
...@@ -1668,12 +1665,12 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1668,12 +1665,12 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1668 \\ return a;1665 \\ return a;
1669 \\}1666 \\}
1670 , &[_][]const u8{1667 , &[_][]const u8{
1671 \\pub export fn max(_arg_a: c_int, _arg_b: c_int) c_int {1668 \\pub export fn max(_arg_a_1: c_int, _arg_b_2: c_int) c_int {
1672 \\ var a = _arg_a;1669 \\ var a_1 = _arg_a_1;
1673 \\ var b = _arg_b;1670 \\ var b_2 = _arg_b_2;
1674 \\ if ((a < b) or (a == b)) return b;1671 \\ if ((a_1 < b_2) or (a_1 == b_2)) return b_2;
1675 \\ if ((a >= b) and (a == b)) return a;1672 \\ if ((a_1 >= b_2) and (a_1 == b_2)) return a_1;
1676 \\ return a;1673 \\ return a_1;
1677 \\}1674 \\}
1678 });1675 });
16791676
...@@ -1690,12 +1687,12 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1690,12 +1687,12 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1690 \\ if (a < b) ; else ;1687 \\ if (a < b) ; else ;
1691 \\}1688 \\}
1692 , &[_][]const u8{1689 , &[_][]const u8{
1693 \\pub export fn max(_arg_a: c_int, _arg_b: c_int) c_int {1690 \\pub export fn max(_arg_a_1: c_int, _arg_b_2: c_int) c_int {
1694 \\ var a = _arg_a;1691 \\ var a_1 = _arg_a_1;
1695 \\ var b = _arg_b;1692 \\ var b_2 = _arg_b_2;
1696 \\ if (a < b) return b;1693 \\ if (a_1 < b_2) return b_2;
1697 \\ if (a < b) return b else return a;1694 \\ if (a_1 < b_2) return b_2 else return a_1;
1698 \\ if (a < b) {} else {}1695 \\ if (a_1 < b_2) {} else {}
1699 \\}1696 \\}
1700 });1697 });
17011698
...@@ -1714,15 +1711,15 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1714,15 +1711,15 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1714 \\ B,1711 \\ B,
1715 \\ C,1712 \\ C,
1716 \\};1713 \\};
1717 \\pub export fn if_none_bool(_arg_a: c_int, _arg_b: f32, _arg_c: ?*c_void, _arg_d: enum_SomeEnum) c_int {1714 \\pub export fn if_none_bool(_arg_a_1: c_int, _arg_b_2: f32, _arg_c_3: ?*c_void, _arg_d_4: enum_SomeEnum) c_int {
1718 \\ var a = _arg_a;1715 \\ var a_1 = _arg_a_1;
1719 \\ var b = _arg_b;1716 \\ var b_2 = _arg_b_2;
1720 \\ var c = _arg_c;1717 \\ var c_3 = _arg_c_3;
1721 \\ var d = _arg_d;1718 \\ var d_4 = _arg_d_4;
1722 \\ if (a != 0) return 0;1719 \\ if (a_1 != 0) return 0;
1723 \\ if (b != 0) return 1;1720 \\ if (b_2 != 0) return 1;
1724 \\ if (c != null) return 2;1721 \\ if (c_3 != null) return 2;
1725 \\ if (d != 0) return 3;1722 \\ if (d_4 != 0) return 3;
1726 \\ return 4;1723 \\ return 4;
1727 \\}1724 \\}
1728 });1725 });
...@@ -1744,9 +1741,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1744,9 +1741,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1744 \\ return a < 0 ? -a : a;1741 \\ return a < 0 ? -a : a;
1745 \\}1742 \\}
1746 , &[_][]const u8{1743 , &[_][]const u8{
1747 \\pub export fn abs(_arg_a: c_int) c_int {1744 \\pub export fn abs(_arg_a_1: c_int) c_int {
1748 \\ var a = _arg_a;1745 \\ var a_1 = _arg_a_1;
1749 \\ return if (a < 0) -a else a;1746 \\ return if (a_1 < 0) -a_1 else a_1;
1750 \\}1747 \\}
1751 });1748 });
17521749
...@@ -1760,15 +1757,15 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1760,15 +1757,15 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1760 \\ return a;1757 \\ return a;
1761 \\}1758 \\}
1762 , &[_][]const u8{1759 , &[_][]const u8{
1763 \\pub export fn foo1(_arg_a: c_uint) c_uint {1760 \\pub export fn foo1(_arg_a_1: c_uint) c_uint {
1764 \\ var a = _arg_a;1761 \\ var a_1 = _arg_a_1;
1765 \\ a +%= 1;1762 \\ a_1 +%= 1;
1766 \\ return a;1763 \\ return a_1;
1767 \\}1764 \\}
1768 \\pub export fn foo2(_arg_a: c_int) c_int {1765 \\pub export fn foo2(_arg_a_2: c_int) c_int {
1769 \\ var a = _arg_a;1766 \\ var a_2 = _arg_a_2;
1770 \\ a += 1;1767 \\ a_2 += 1;
1771 \\ return a;1768 \\ return a_2;
1772 \\}1769 \\}
1773 });1770 });
17741771
...@@ -1855,11 +1852,11 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1855,11 +1852,11 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1855 \\ return i;1852 \\ return i;
1856 \\}1853 \\}
1857 , &[_][]const u8{1854 , &[_][]const u8{
1858 \\pub export fn log2(_arg_a: c_uint) c_int {1855 \\pub export fn log2(_arg_a_1: c_uint) c_int {
1859 \\ var a = _arg_a;1856 \\ var a_1 = _arg_a_1;
1860 \\ var i: c_int = 0;1857 \\ var i: c_int = 0;
1861 \\ while (a > @intCast(c_uint, 0)) {1858 \\ while (a_1 > @intCast(c_uint, 0)) {
1862 \\ a >>= @as(@import("std").math.Log2Int(c_int), 1);1859 \\ a_1 >>= @as(@import("std").math.Log2Int(c_int), 1);
1863 \\ }1860 \\ }
1864 \\ return i;1861 \\ return i;
1865 \\}1862 \\}
...@@ -1875,11 +1872,11 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1875,11 +1872,11 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1875 \\ return i;1872 \\ return i;
1876 \\}1873 \\}
1877 , &[_][]const u8{1874 , &[_][]const u8{
1878 \\pub export fn log2(_arg_a: u32) c_int {1875 \\pub export fn log2(_arg_a_1: u32) c_int {
1879 \\ var a = _arg_a;1876 \\ var a_1 = _arg_a_1;
1880 \\ var i: c_int = 0;1877 \\ var i: c_int = 0;
1881 \\ while (a > @intCast(c_uint, 0)) {1878 \\ while (a_1 > @intCast(c_uint, 0)) {
1882 \\ a >>= @as(@import("std").math.Log2Int(c_int), 1);1879 \\ a_1 >>= @as(@import("std").math.Log2Int(c_int), 1);
1883 \\ }1880 \\ }
1884 \\ return i;1881 \\ return i;
1885 \\}1882 \\}
...@@ -2059,7 +2056,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -2059,7 +2056,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
2059 \\void fn_bool(bool x);2056 \\void fn_bool(bool x);
2060 \\void fn_ptr(void *x);2057 \\void fn_ptr(void *x);
2061 \\2058 \\
2062 \\void call(int q) {2059 \\void call() {
2063 \\ fn_int(3.0f);2060 \\ fn_int(3.0f);
2064 \\ fn_int(3.0);2061 \\ fn_int(3.0);
2065 \\ fn_int(3.0L);2062 \\ fn_int(3.0L);
...@@ -2084,8 +2081,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -2084,8 +2081,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
2084 \\pub extern fn fn_char(x: u8) void;2081 \\pub extern fn fn_char(x: u8) void;
2085 \\pub extern fn fn_bool(x: bool) void;2082 \\pub extern fn fn_bool(x: bool) void;
2086 \\pub extern fn fn_ptr(x: ?*c_void) void;2083 \\pub extern fn fn_ptr(x: ?*c_void) void;
2087 \\pub export fn call(_arg_q: c_int) void {2084 \\pub export fn call() void {
2088 \\ var q = _arg_q;
2089 \\ fn_int(@floatToInt(c_int, 3));2085 \\ fn_int(@floatToInt(c_int, 3));
2090 \\ fn_int(@floatToInt(c_int, 3));2086 \\ fn_int(@floatToInt(c_int, 3));
2091 \\ fn_int(@floatToInt(c_int, 3));2087 \\ fn_int(@floatToInt(c_int, 3));
...@@ -2113,10 +2109,10 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -2113,10 +2109,10 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
2113 \\}2109 \\}
2114 , &[_][]const u8{2110 , &[_][]const u8{
2115 \\pub fn bar() void {}2111 \\pub fn bar() void {}
2116 \\pub export fn foo(_arg_baz: ?extern fn () [*c]c_int) void {2112 \\pub export fn foo(_arg_baz_1: ?extern fn () [*c]c_int) void {
2117 \\ var baz = _arg_baz;2113 \\ var baz_1 = _arg_baz_1;
2118 \\ bar();2114 \\ bar();
2119 \\ _ = baz.?();2115 \\ _ = baz_1.?();
2120 \\}2116 \\}
2121 });2117 });
21222118