summaryrefslogtreecommitdiff
path: root/BCT/BytecodeTranslator/ExpressionTraverser.cs
diff options
context:
space:
mode:
authorGravatar qadeer <qadeer@microsoft.com>2011-08-17 16:51:08 -0700
committerGravatar qadeer <qadeer@microsoft.com>2011-08-17 16:51:08 -0700
commitccb14c126ff5b42c253b5acb6b27ddd4d85291e9 (patch)
treea0ba892880415c4729d230141d91a0751797dfce /BCT/BytecodeTranslator/ExpressionTraverser.cs
parent97bcbb78005c4c937f0b6e292e6077a5e37c3985 (diff)
added RealModulus
Diffstat (limited to 'BCT/BytecodeTranslator/ExpressionTraverser.cs')
-rw-r--r--BCT/BytecodeTranslator/ExpressionTraverser.cs29
1 files changed, 21 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);