1 package org.simantics.scl.compiler.constants.singletons;
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;
13 public class NothingConstant extends Constant {
15 private static final TVar A = Types.var(Kinds.STAR);
16 public static final NothingConstant INSTANCE = new NothingConstant();
18 private NothingConstant() {
19 super(Types.forAll(A, Types.apply(Types.MAYBE, A)));
23 public void push(MethodBuilder mb) {
28 public void deconstruct(MethodBuilder mb, IVal parameter,
29 Cont success, Label failure) {
32 mb.ifNullBranch(failure, false);
37 public int constructorTag() {
42 public String toString() {
47 public Object realizeValue(TransientClassBuilder classBuilder) {