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