[vala/staging] codegen: Handle "modulo" operation on floating-types in CCodeAssignmentModule
- From: Rico Tzschichholz <ricotz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/staging] codegen: Handle "modulo" operation on floating-types in CCodeAssignmentModule
- Date: Tue, 26 Mar 2019 12:29:43 +0000 (UTC)
commit 126dee3b683fa4cf9d9f5c4ed33f97d2b2e7daea
Author: Rico Tzschichholz <ricotz ubuntu com>
Date: Tue Mar 26 13:00:01 2019 +0100
codegen: Handle "modulo" operation on floating-types in CCodeAssignmentModule
Duplication with CCodeBaseModule.visit_binary_expression()
See https://gitlab.gnome.org/GNOME/vala/issues/755
codegen/valaccodeassignmentmodule.vala | 23 ++++++++++++++++++++++-
codegen/valaccodebasemodule.vala | 1 +
2 files changed, 23 insertions(+), 1 deletion(-)
---
diff --git a/codegen/valaccodeassignmentmodule.vala b/codegen/valaccodeassignmentmodule.vala
index 96a47524e..617293b0a 100644
--- a/codegen/valaccodeassignmentmodule.vala
+++ b/codegen/valaccodeassignmentmodule.vala
@@ -49,7 +49,28 @@ public class Vala.CCodeAssignmentModule : CCodeMemberAccessModule {
case AssignmentOperator.SUB: cop = CCodeAssignmentOperator.SUB; break;
case AssignmentOperator.MUL: cop = CCodeAssignmentOperator.MUL; break;
case AssignmentOperator.DIV: cop = CCodeAssignmentOperator.DIV; break;
- case AssignmentOperator.PERCENT: cop = CCodeAssignmentOperator.PERCENT; break;
+ case AssignmentOperator.PERCENT:
+ // FIXME Code duplication with CCodeBaseModule.visit_binary_expression()
+ var cleft = get_cvalue (assignment.left);
+ var cright = get_cvalue (assignment.right);
+ if (assignment.value_type.equals (double_type)) {
+ cfile.add_include ("math.h");
+ var ccall = new CCodeFunctionCall (new CCodeIdentifier ("fmod"));
+ ccall.add_argument (cleft);
+ ccall.add_argument (cright);
+ set_cvalue (assignment.right, ccall);
+ cop = CCodeAssignmentOperator.SIMPLE;
+ } else if (assignment.value_type.equals (float_type)) {
+ cfile.add_include ("math.h");
+ var ccall = new CCodeFunctionCall (new CCodeIdentifier ("fmodf"));
+ ccall.add_argument (cleft);
+ ccall.add_argument (cright);
+ set_cvalue (assignment.right, ccall);
+ cop = CCodeAssignmentOperator.SIMPLE;
+ } else {
+ cop = CCodeAssignmentOperator.PERCENT;
+ }
+ break;
case AssignmentOperator.SHIFT_LEFT: cop = CCodeAssignmentOperator.SHIFT_LEFT; break;
case AssignmentOperator.SHIFT_RIGHT: cop = CCodeAssignmentOperator.SHIFT_RIGHT; break;
default: assert_not_reached ();
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala
index 8e9863aed..62fd66554 100644
--- a/codegen/valaccodebasemodule.vala
+++ b/codegen/valaccodebasemodule.vala
@@ -5471,6 +5471,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
op = CCodeBinaryOperator.DIV;
break;
case BinaryOperator.MOD:
+ // FIXME Code duplication with CCodeAssignmentModule.emit_simple_assignment()
if (expr.value_type.equals (double_type)) {
cfile.add_include ("math.h");
var ccall = new CCodeFunctionCall (new CCodeIdentifier ("fmod"));
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]