From 57cd074959cd529f0648264e877f9819f0209ddf Mon Sep 17 00:00:00 2001 From: Josh Wolfe Date: Mon, 13 Nov 2017 19:59:32 -0700 Subject: [PATCH] parsec supports C comma operator --- src/parsec.cpp | 13 +++++++++++-- test/parsec.zig | 14 +++++++++++++- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/parsec.cpp b/src/parsec.cpp index a3c2456bb1..1d7c81af71 100644 --- a/src/parsec.cpp +++ b/src/parsec.cpp @@ -1099,8 +1099,17 @@ static AstNode *trans_binary_operator(Context *c, bool result_used, AstNode *blo emit_warning(c, stmt->getLocStart(), "TODO handle more C binary operators: BO_OrAssign"); return nullptr; case BO_Comma: - emit_warning(c, stmt->getLocStart(), "TODO handle more C binary operators: BO_Comma"); - return nullptr; + { + block = trans_create_node(c, NodeTypeBlock); + AstNode *lhs = trans_expr(c, false, block, stmt->getLHS(), TransRValue); + if (lhs == nullptr) return nullptr; + block->data.block.statements.append(maybe_suppress_result(c, false, lhs)); + AstNode *rhs = trans_expr(c, result_used, block, stmt->getRHS(), TransRValue); + if (rhs == nullptr) return nullptr; + block->data.block.statements.append(maybe_suppress_result(c, result_used, rhs)); + block->data.block.last_statement_is_result_expression = true; + return block; + } } zig_unreachable(); diff --git a/test/parsec.zig b/test/parsec.zig index c3f4ab5412..c8e16755df 100644 --- a/test/parsec.zig +++ b/test/parsec.zig @@ -606,8 +606,20 @@ pub fn addCases(cases: &tests.ParseCContext) { \\ return null; \\} ); -} + cases.addC("comma operator", + \\int foo(void) { + \\ return 1, 2; + \\} + , + \\export fn foo() -> c_int { + \\ return { + \\ _ = 1; + \\ 2 + \\ }; + \\} + ); +}