authorgravatar for jhc@dismail.deJimmi Holst Christensen <jhc@dismail.de> 2019-03-15 19:11:46+01:00
committergravatar for jhc@dismail.deJimmi Holst Christensen <jhc@dismail.de> 2019-03-15 19:11:46+01:00
log5ae400fb393b4a7fb4af15b89a4101de9255b26d
tree131a0c614e32b59babb8cee443d3829652a9bd75
parenta77b2a0810bd835aa1adcfc18d32bc66ba8f1914

fixed void cast and added the last tests


2 files changed, 59 insertions(+), 10 deletions(-)

src/translate_c.cpp+5-1
...@@ -2784,7 +2784,11 @@ static AstNode *trans_c_style_cast_expr(Context *c, ResultUsed result_used, Tran...@@ -2784,7 +2784,11 @@ static AstNode *trans_c_style_cast_expr(Context *c, ResultUsed result_used, Tran
2784 if (sub_expr_node == nullptr)2784 if (sub_expr_node == nullptr)
2785 return nullptr;2785 return nullptr;
27862786
2787 return trans_c_cast(c, stmt->getLocStart(), stmt->getType(), stmt->getSubExpr()->getType(), sub_expr_node);2787 AstNode *cast = trans_c_cast(c, stmt->getLocStart(), stmt->getType(), stmt->getSubExpr()->getType(), sub_expr_node);
2788 if (cast == nullptr)
2789 return nullptr;
2790
2791 return maybe_suppress_result(c, result_used, cast);
2788}2792}
27892793
2790static AstNode *trans_unary_expr_or_type_trait_expr(Context *c, TransScope *scope,2794static AstNode *trans_unary_expr_or_type_trait_expr(Context *c, TransScope *scope,
test/translate_c.zig+54-9
...@@ -59,7 +59,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -59,7 +59,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
59 );59 );
60 }60 }
6161
62 cases.add("for loop with var init but empty body",62 cases.add("predefined expressions",
63 \\void foo(void) {63 \\void foo(void) {
64 \\ __func__;64 \\ __func__;
65 \\ __FUNCTION__;65 \\ __FUNCTION__;
...@@ -526,11 +526,14 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -526,11 +526,14 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
526 \\ return b;526 \\ return b;
527 \\ else527 \\ else
528 \\ return a;528 \\ return a;
529 \\
530 \\ if (a < b) ; else ;
529 \\}531 \\}
530 ,532 ,
531 \\pub export fn max(a: c_int, b: c_int) c_int {533 \\pub export fn max(a: c_int, b: c_int) c_int {
532 \\ if (a < b) return b;534 \\ if (a < b) return b;
533 \\ if (a < b) return b else return a;535 \\ if (a < b) return b else return a;
536 \\ if (a < b) {} else {}
534 \\}537 \\}
535 );538 );
536539
...@@ -772,6 +775,16 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -772,6 +775,16 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
772 \\}775 \\}
773 );776 );
774777
778 cases.addC("void cast",
779 \\void foo(int a) {
780 \\ (void) a;
781 \\}
782 ,
783 \\pub export fn foo(a: c_int) void {
784 \\ _ = a;
785 \\}
786 );
787
775 cases.addC("implicit cast to void *",788 cases.addC("implicit cast to void *",
776 \\void *foo(unsigned short *x) {789 \\void *foo(unsigned short *x) {
777 \\ return x;790 \\ return x;
...@@ -1472,21 +1485,53 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1472,21 +1485,53 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1472 \\pub export fn bar() void {}1485 \\pub export fn bar() void {}
1473 );1486 );
14741487
1475 cases.addC("u integer suffix after 0 (zero) in macro definition", "#define ZERO 0U", "pub const ZERO = c_uint(0);");1488 cases.addC(
1489 "u integer suffix after 0 (zero) in macro definition",
1490 "#define ZERO 0U",
1491 "pub const ZERO = c_uint(0);",
1492 );
14761493
1477 cases.addC("l integer suffix after 0 (zero) in macro definition", "#define ZERO 0L", "pub const ZERO = c_long(0);");1494 cases.addC(
1495 "l integer suffix after 0 (zero) in macro definition",
1496 "#define ZERO 0L",
1497 "pub const ZERO = c_long(0);",
1498 );
14781499
1479 cases.addC("ul integer suffix after 0 (zero) in macro definition", "#define ZERO 0UL", "pub const ZERO = c_ulong(0);");1500 cases.addC(
1501 "ul integer suffix after 0 (zero) in macro definition",
1502 "#define ZERO 0UL",
1503 "pub const ZERO = c_ulong(0);",
1504 );
14801505
1481 cases.addC("lu integer suffix after 0 (zero) in macro definition", "#define ZERO 0LU", "pub const ZERO = c_ulong(0);");1506 cases.addC(
1507 "lu integer suffix after 0 (zero) in macro definition",
1508 "#define ZERO 0LU",
1509 "pub const ZERO = c_ulong(0);",
1510 );
14821511
1483 cases.addC("ll integer suffix after 0 (zero) in macro definition", "#define ZERO 0LL", "pub const ZERO = c_longlong(0);");1512 cases.addC(
1513 "ll integer suffix after 0 (zero) in macro definition",
1514 "#define ZERO 0LL",
1515 "pub const ZERO = c_longlong(0);",
1516 );
14841517
1485 cases.addC("ull integer suffix after 0 (zero) in macro definition", "#define ZERO 0ULL", "pub const ZERO = c_ulonglong(0);");1518 cases.addC(
1519 "ull integer suffix after 0 (zero) in macro definition",
1520 "#define ZERO 0ULL",
1521 "pub const ZERO = c_ulonglong(0);",
1522 );
14861523
1487 cases.addC("llu integer suffix after 0 (zero) in macro definition", "#define ZERO 0LLU", "pub const ZERO = c_ulonglong(0);");1524 cases.addC(
1525 "llu integer suffix after 0 (zero) in macro definition",
1526 "#define ZERO 0LLU",
1527 "pub const ZERO = c_ulonglong(0);",
1528 );
14881529
1489 cases.addC("bitwise not on u-suffixed 0 (zero) in macro definition", "#define NOT_ZERO (~0U)", "pub const NOT_ZERO = ~c_uint(0);");1530 cases.addC(
1531 "bitwise not on u-suffixed 0 (zero) in macro definition",
1532 "#define NOT_ZERO (~0U)",
1533 "pub const NOT_ZERO = ~c_uint(0);",
1534 );
14901535
1491 // cases.add("empty array with initializer",1536 // cases.add("empty array with initializer",
1492 // "int a[4] = {};"1537 // "int a[4] = {};"