zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 57cd074959cd529f0648264e877f9819f0209ddf (tree)
parent 1f28fcdec5210762e1ebcf5d5d386d1427f82126
Author: Josh Wolfe <thejoshwolfe@gmail.com>
Date:   Mon, 13 Nov 2017 19:59:32 -0700

parsec supports C comma operator

Diffstat:
Msrc/parsec.cpp | 13+++++++++++--
Mtest/parsec.zig | 14+++++++++++++-
2 files changed, 24 insertions(+), 3 deletions(-)

diff --git 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 @@ -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 + \\ }; + \\} + ); +}