authorgravatar for kavika@gmail.comMerlyn Morgan-Graham <kavika@gmail.com> 2019-12-08 17:54:56-08:00
committergravatar for kavika@gmail.comMerlyn Morgan-Graham <kavika@gmail.com> 2019-12-10 23:52:40-08:00
log3e4f5de33ce35a3cf2acfb2d489c8862f4099624
tree4b7bf5b25a49ba8209eedf6a2570e1368439f842
parent79fe7e6515555baacf0147fed8c8f27e5f051023

Add rem binary operator to self-hosted translate-C


1 files changed, 25 insertions(+), 1 deletions(-)

src-self-hosted/translate_c.zig+25-1
...@@ -429,7 +429,31 @@ fn transBinaryOperator(...@@ -429,7 +429,31 @@ fn transBinaryOperator(
429 });429 });
430 }430 }
431 },431 },
432 .Rem,432 .Rem => {
433 if (!cIsUnsignedInteger(qt)) {
434 // signed integer division uses @rem
435 const rem_node = try transCreateNodeBuiltinFnCall(rp.c, "@rem");
436 const lhs = try transExpr(rp, scope, ZigClangBinaryOperator_getLHS(stmt), .used, .l_value);
437 try rem_node.params.push(lhs.node);
438 _ = try appendToken(rp.c, .Comma, ",");
439 const rhs = try transExpr(rp, scope, ZigClangBinaryOperator_getRHS(stmt), .used, .r_value);
440 try rem_node.params.push(rhs.node);
441 rem_node.rparen_token = try appendToken(rp.c, .RParen, ")");
442 return maybeSuppressResult(rp, scope, result_used, TransResult{
443 .node = &rem_node.base,
444 .child_scope = scope,
445 .node_scope = scope,
446 });
447 } else {
448 // unsigned/float division uses the operator
449 const node = try transCreateNodeInfixOp(rp, scope, stmt, .Mod, .Percent, "%", true);
450 return maybeSuppressResult(rp, scope, result_used, TransResult{
451 .node = node,
452 .child_scope = scope,
453 .node_scope = scope,
454 });
455 }
456 },
433 .Shl,457 .Shl,
434 .Shr,458 .Shr,
435 .LT,459 .LT,