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...@@ -980,14 +980,11 @@ static AstNode *trans_binary_operator(Context *c, bool result_used, AstNode *blo
980 case BO_NE:980 case BO_NE:
981 return trans_create_bin_op(c, block, stmt->getLHS(), BinOpTypeCmpNotEq, stmt->getRHS());981 return trans_create_bin_op(c, block, stmt->getLHS(), BinOpTypeCmpNotEq, stmt->getRHS());
982 case BO_And:982 case BO_And:
983 emit_warning(c, stmt->getLocStart(), "TODO handle more C binary operators: BO_And");983 return trans_create_bin_op(c, block, stmt->getLHS(), BinOpTypeBinAnd, stmt->getRHS());
984 return nullptr;
985 case BO_Xor:984 case BO_Xor:
986 emit_warning(c, stmt->getLocStart(), "TODO handle more C binary operators: BO_Xor");985 return trans_create_bin_op(c, block, stmt->getLHS(), BinOpTypeBinXor, stmt->getRHS());
987 return nullptr;
988 case BO_Or:986 case BO_Or:
989 emit_warning(c, stmt->getLocStart(), "TODO handle more C binary operators: BO_Or");987 return trans_create_bin_op(c, block, stmt->getLHS(), BinOpTypeBinOr, stmt->getRHS());
990 return nullptr;
991 case BO_LAnd:988 case BO_LAnd:
992 return trans_create_bin_op(c, block, stmt->getLHS(), BinOpTypeBoolAnd, stmt->getRHS());989 return trans_create_bin_op(c, block, stmt->getLHS(), BinOpTypeBoolAnd, stmt->getRHS());
993 case BO_LOr:990 case BO_LOr:
...@@ -2107,8 +2104,7 @@ static AstNode *trans_stmt(Context *c, bool result_used, AstNode *block, Stmt *s...@@ -2107,8 +2104,7 @@ static AstNode *trans_stmt(Context *c, bool result_used, AstNode *block, Stmt *s
2107 emit_warning(c, stmt->getLocStart(), "TODO handle C PackExpansionExprClass");2104 emit_warning(c, stmt->getLocStart(), "TODO handle C PackExpansionExprClass");
2108 return nullptr;2105 return nullptr;
2109 case Stmt::ParenExprClass:2106 case Stmt::ParenExprClass:
2110 emit_warning(c, stmt->getLocStart(), "TODO handle C ParenExprClass");2107 return trans_expr(c, result_used, block, ((ParenExpr*)stmt)->getSubExpr(), lrvalue);
2111 return nullptr;
2112 case Stmt::ParenListExprClass:2108 case Stmt::ParenListExprClass:
2113 emit_warning(c, stmt->getLocStart(), "TODO handle C ParenListExprClass");2109 emit_warning(c, stmt->getLocStart(), "TODO handle C ParenListExprClass");
2114 return nullptr;2110 return nullptr;
test/parsec.zig+10
...@@ -389,6 +389,16 @@ pub fn addCases(cases: &tests.ParseCContext) {...@@ -389,6 +389,16 @@ pub fn addCases(cases: &tests.ParseCContext) {
389 \\}389 \\}
390 );390 );
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
392 cases.add("logical and, logical or",402 cases.add("logical and, logical or",
393 \\int max(int a, int b) {403 \\int max(int a, int b) {
394 \\ if (a < b || a == b)404 \\ if (a < b || a == b)