]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/constants/BooleanConstant.java
Merge "Remove unused import in DeleteHandler"
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / constants / BooleanConstant.java
1 package org.simantics.scl.compiler.constants;
2
3
4 import org.objectweb.asm.Label;
5 import org.simantics.scl.compiler.internal.codegen.continuations.Cont;
6 import org.simantics.scl.compiler.internal.codegen.references.IVal;
7 import org.simantics.scl.compiler.internal.codegen.utils.MethodBuilder;
8 import org.simantics.scl.compiler.internal.codegen.utils.TransientClassBuilder;
9 import org.simantics.scl.compiler.types.Types;
10
11 public class BooleanConstant extends Constant {
12     public static final BooleanConstant TRUE = new BooleanConstant(true);
13     public static final BooleanConstant FALSE = new BooleanConstant(false);
14     
15     boolean value;
16
17     public BooleanConstant(boolean value) {
18         super(Types.BOOLEAN);
19         this.value = value;
20     }
21     
22     public boolean getValue() {
23         return value;
24     }
25     
26     @Override
27     public void push(MethodBuilder mb) {
28         mb.loadConstant(value);
29     }
30     
31     @Override
32     public String toString() {
33         return String.valueOf(value);
34     }
35     
36     @Override
37     public void deconstruct(MethodBuilder mb, IVal parameter, Cont success,
38             Label failure) {
39         mb.push(parameter, Types.BOOLEAN);
40         mb.ifZeroComparisonBranch(failure, value ? "==" : "!=");
41         mb.jump(success);
42     }
43     
44     @Override
45     public int constructorTag() {
46         return 0;
47     }
48
49     @Override
50     public Object realizeValue(TransientClassBuilder classBuilder) {
51         return value;
52     }
53 }