]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/constants/singletons/NothingConstant.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / constants / singletons / NothingConstant.java
1 package org.simantics.scl.compiler.constants.singletons;
2
3 import org.objectweb.asm.Label;
4 import org.simantics.scl.compiler.constants.Constant;
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.TVar;
10 import org.simantics.scl.compiler.types.Types;
11 import org.simantics.scl.compiler.types.kinds.Kinds;
12
13 public class NothingConstant extends Constant {
14     
15     private static final TVar A = Types.var(Kinds.STAR);
16     public static final NothingConstant INSTANCE = new NothingConstant();
17     
18     private NothingConstant() {
19         super(Types.forAll(A, Types.apply(Types.MAYBE, A)));
20     }
21
22     @Override
23     public void push(MethodBuilder mb) {
24         mb.loadNull();
25     }
26     
27     @Override
28     public void deconstruct(MethodBuilder mb, IVal parameter,
29             Cont success, Label failure) {
30         if(failure != null) {    
31             parameter.push(mb);
32             mb.ifNullBranch(failure, false);
33         }
34         mb.jump(success);
35     }
36     
37     public int constructorTag() {
38         return 0;
39     }
40     
41     @Override
42     public String toString() {
43         return "Nothing";
44     }
45     
46     @Override
47     public Object realizeValue(TransientClassBuilder classBuilder) {                
48         return null;
49     }
50 }