Skip to content

Commit

Permalink
parsec supports C comma operator
Browse files Browse the repository at this point in the history
  • Loading branch information
thejoshwolfe committed Nov 14, 2017
1 parent 1f28fcd commit 57cd074
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 3 deletions.
13 changes: 11 additions & 2 deletions src/parsec.cpp
Expand Up @@ -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();
Expand Down
14 changes: 13 additions & 1 deletion test/parsec.zig
Expand Up @@ -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
\\ };
\\}
);
}



Expand Down

0 comments on commit 57cd074

Please sign in to comment.