diff options
Diffstat (limited to 'BCT')
-rw-r--r-- | BCT/BytecodeTranslator/ExpressionTraverser.cs | 29 | ||||
-rw-r--r-- | BCT/BytecodeTranslator/HeapFactory.cs | 2 |
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;")]
|