summaryrefslogtreecommitdiff
path: root/BCT
diff options
context:
space:
mode:
Diffstat (limited to 'BCT')
-rw-r--r--BCT/BytecodeTranslator/ExpressionTraverser.cs29
-rw-r--r--BCT/BytecodeTranslator/HeapFactory.cs2
2 files changed, 23 insertions, 8 deletions
diff --git a/BCT/BytecodeTranslator/ExpressionTraverser.cs b/BCT/BytecodeTranslator/ExpressionTraverser.cs
index a3b7eb99..0e314110 100644
--- a/BCT/BytecodeTranslator/ExpressionTraverser.cs
+++ b/BCT/BytecodeTranslator/ExpressionTraverser.cs
@@ -1068,6 +1068,27 @@ namespace BytecodeTranslator
TranslatedExpressions.Push(e);
}
+ public override void Visit(IModulus modulus) {
+ base.Visit(modulus);
+ Bpl.Expr rexp = TranslatedExpressions.Pop();
+ Bpl.Expr lexp = TranslatedExpressions.Pop();
+ Bpl.Expr e;
+ switch (modulus.Type.TypeCode) {
+ case PrimitiveTypeCode.Float32:
+ case PrimitiveTypeCode.Float64:
+ e = new Bpl.NAryExpr(
+ modulus.Token(),
+ new Bpl.FunctionCall(this.sink.Heap.RealModulus),
+ new Bpl.ExprSeq(lexp, rexp)
+ );
+ break;
+ default:
+ e = Bpl.Expr.Binary(Bpl.BinaryOperator.Opcode.Mod, lexp, rexp);
+ break;
+ }
+ TranslatedExpressions.Push(e);
+ }
+
public override void Visit(IDivision division)
{
base.Visit(division);
@@ -1146,14 +1167,6 @@ namespace BytecodeTranslator
TranslatedExpressions.Push(e);
}
- public override void Visit(IModulus modulus)
- {
- base.Visit(modulus);
- Bpl.Expr rexp = TranslatedExpressions.Pop();
- Bpl.Expr lexp = TranslatedExpressions.Pop();
- TranslatedExpressions.Push(Bpl.Expr.Binary(Bpl.BinaryOperator.Opcode.Mod, lexp, rexp));
- }
-
public override void Visit(IGreaterThan greaterThan)
{
base.Visit(greaterThan);
diff --git a/BCT/BytecodeTranslator/HeapFactory.cs b/BCT/BytecodeTranslator/HeapFactory.cs
index 1ec982d3..890787ed 100644
--- a/BCT/BytecodeTranslator/HeapFactory.cs
+++ b/BCT/BytecodeTranslator/HeapFactory.cs
@@ -206,6 +206,8 @@ namespace BytecodeTranslator {
public Bpl.Function RealTimes = null;
[RepresentationFor("RealDivide", "function RealDivide(Real, Real): Real;")]
public Bpl.Function RealDivide = null;
+ [RepresentationFor("RealModulus", "function RealModulus(Real, Real): Real;")]
+ public Bpl.Function RealModulus = null;
[RepresentationFor("RealLessThan", "function RealLessThan(Real, Real): bool;")]
public Bpl.Function RealLessThan = null;
[RepresentationFor("RealLessThanOrEqual", "function RealLessThanOrEqual(Real, Real): bool;")]