authorgravatar for thejoshwolfe@gmail.comJosh Wolfe <thejoshwolfe@gmail.com> 2017-09-20 22:04:51-07:00
committergravatar for thejoshwolfe@gmail.comJosh Wolfe <thejoshwolfe@gmail.com> 2017-09-20 22:04:51-07:00
log2ae789d27cec716c104a9e817a66f59b2ed53f47
tree2202a53943128fccff6e85227383196340c35596
parent0827a8f36bd0b99b876586b8c7ee099fbc903535

bitwise binary operators


2 files changed, 14 insertions(+), 8 deletions(-)

src/parsec.cpp+4-8
......@@ -980,14 +980,11 @@ static AstNode *trans_binary_operator(Context *c, bool result_used, AstNode *blo
980980 case BO_NE:
981981 return trans_create_bin_op(c, block, stmt->getLHS(), BinOpTypeCmpNotEq, stmt->getRHS());
982982 case BO_And:
983 emit_warning(c, stmt->getLocStart(), "TODO handle more C binary operators: BO_And");
984 return nullptr;
983 return trans_create_bin_op(c, block, stmt->getLHS(), BinOpTypeBinAnd, stmt->getRHS());
985984 case BO_Xor:
986 emit_warning(c, stmt->getLocStart(), "TODO handle more C binary operators: BO_Xor");
987 return nullptr;
985 return trans_create_bin_op(c, block, stmt->getLHS(), BinOpTypeBinXor, stmt->getRHS());
988986 case BO_Or:
989 emit_warning(c, stmt->getLocStart(), "TODO handle more C binary operators: BO_Or");
990 return nullptr;
987 return trans_create_bin_op(c, block, stmt->getLHS(), BinOpTypeBinOr, stmt->getRHS());
991988 case BO_LAnd:
992989 return trans_create_bin_op(c, block, stmt->getLHS(), BinOpTypeBoolAnd, stmt->getRHS());
993990 case BO_LOr:
......@@ -2107,8 +2104,7 @@ static AstNode *trans_stmt(Context *c, bool result_used, AstNode *block, Stmt *s
21072104 emit_warning(c, stmt->getLocStart(), "TODO handle C PackExpansionExprClass");
21082105 return nullptr;
21092106 case Stmt::ParenExprClass:
2110 emit_warning(c, stmt->getLocStart(), "TODO handle C ParenExprClass");
2111 return nullptr;
2107 return trans_expr(c, result_used, block, ((ParenExpr*)stmt)->getSubExpr(), lrvalue);
21122108 case Stmt::ParenListExprClass:
21132109 emit_warning(c, stmt->getLocStart(), "TODO handle C ParenListExprClass");
21142110 return nullptr;
test/parsec.zig+10
......@@ -389,6 +389,16 @@ pub fn addCases(cases: &tests.ParseCContext) {
389389 \\}
390390 );
391391
392 cases.add("bitwise binary operators",
393 \\int max(int a, int b) {
394 \\ return (a & b) ^ (a | b);
395 \\}
396 ,
397 \\export fn max(a: c_int, b: c_int) -> c_int {
398 \\ return (a & b) ^ (a | b);
399 \\}
400 );
401
392402 cases.add("logical and, logical or",
393403 \\int max(int a, int b) {
394404 \\ if (a < b || a == b)