]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/constants/JavaComparisonToZeroOperation.java
Merged changes from feature/scl to master.
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / constants / JavaComparisonToZeroOperation.java
index e5a58bb77cb44d5b9bfd1cd2fd52a7d43a0351ba..058faf9c349ccaea8b8af8403a029d53d141867c 100644 (file)
@@ -1,13 +1,20 @@
 package org.simantics.scl.compiler.constants;
 
 import org.objectweb.asm.Label;
+import org.simantics.scl.compiler.internal.codegen.continuations.Cont;
 import org.simantics.scl.compiler.internal.codegen.references.Val;
 import org.simantics.scl.compiler.internal.codegen.utils.MethodBuilder;
 import org.simantics.scl.compiler.types.TVar;
 import org.simantics.scl.compiler.types.Type;
 import org.simantics.scl.compiler.types.Types;
 
-public class JavaComparisonToZeroOperation extends FunctionValue {
+public class JavaComparisonToZeroOperation extends FunctionValue implements ComparisonFunction {
+    public static final JavaComparisonToZeroOperation IEQUAL = new JavaComparisonToZeroOperation("==");
+    public static final JavaComparisonToZeroOperation INOT_EQUAL = new JavaComparisonToZeroOperation("!=");
+    public static final JavaComparisonToZeroOperation ILESS = new JavaComparisonToZeroOperation("<");
+    public static final JavaComparisonToZeroOperation ILESS_OR_EQUAL = new JavaComparisonToZeroOperation("<=");
+    public static final JavaComparisonToZeroOperation IGREATER = new JavaComparisonToZeroOperation(">");
+    public static final JavaComparisonToZeroOperation IGREATER_OR_EQUAL = new JavaComparisonToZeroOperation(">=");
     
     String op;
     
@@ -34,6 +41,14 @@ public class JavaComparisonToZeroOperation extends FunctionValue {
         return getReturnType();
     }
     
+    @Override
+    public void generateCondition(MethodBuilder mb, Val[] parameters, Cont then_, Cont else_) {
+        mb.push(parameters[0], Types.INTEGER);
+        mb.ifZeroComparisonBranch(mb.getLabel(then_), op);
+        mb.jump(else_);
+        mb.ensureExists(then_);
+    }
+    
     @Override
     public String toString() {
         return op;