Commit 3e4f5de33c

Merlyn Morgan-Graham <kavika@gmail.com>
2019-12-09 02:54:56
Add rem binary operator to self-hosted translate-C
1 parent 79fe7e6
Changed files (1)
src-self-hosted
src-self-hosted/translate_c.zig
@@ -429,7 +429,31 @@ fn transBinaryOperator(
                 });
             }
         },
-        .Rem,
+        .Rem => {
+            if (!cIsUnsignedInteger(qt)) {
+                // signed integer division uses @rem
+                const rem_node = try transCreateNodeBuiltinFnCall(rp.c, "@rem");
+                const lhs = try transExpr(rp, scope, ZigClangBinaryOperator_getLHS(stmt), .used, .l_value);
+                try rem_node.params.push(lhs.node);
+                _ = try appendToken(rp.c, .Comma, ",");
+                const rhs = try transExpr(rp, scope, ZigClangBinaryOperator_getRHS(stmt), .used, .r_value);
+                try rem_node.params.push(rhs.node);
+                rem_node.rparen_token = try appendToken(rp.c, .RParen, ")");
+                return maybeSuppressResult(rp, scope, result_used, TransResult{
+                    .node = &rem_node.base,
+                    .child_scope = scope,
+                    .node_scope = scope,
+                });
+            } else {
+                // unsigned/float division uses the operator
+                const node = try transCreateNodeInfixOp(rp, scope, stmt, .Mod, .Percent, "%", true);
+                return maybeSuppressResult(rp, scope, result_used, TransResult{
+                    .node = node,
+                    .child_scope = scope,
+                    .node_scope = scope,
+                });
+            }
+        },
         .Shl,
         .Shr,
         .LT,