]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/constants/NoRepConstant.java
Merge "Minor refactorings related to SCL constructors"
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / constants / NoRepConstant.java
1 package org.simantics.scl.compiler.constants;
2
3 import org.objectweb.asm.Label;
4 import org.simantics.scl.compiler.internal.codegen.continuations.Cont;
5 import org.simantics.scl.compiler.internal.codegen.references.IVal;
6 import org.simantics.scl.compiler.internal.codegen.utils.MethodBuilder;
7 import org.simantics.scl.compiler.internal.codegen.utils.TransientClassBuilder;
8 import org.simantics.scl.compiler.types.Type;
9 import org.simantics.scl.compiler.types.Types;
10 import org.simantics.scl.runtime.tuple.Tuple0;
11
12 public class NoRepConstant extends Constant {
13     public static final NoRepConstant PUNIT = new NoRepConstant(Types.PUNIT);
14     public static final NoRepConstant UNIT = new NoRepConstant(Types.UNIT);
15     
16     public NoRepConstant(Type type) {
17         super(type);
18     }
19     
20     public void push(MethodBuilder mb) {
21     }
22     
23
24     @Override
25     public void deconstruct(MethodBuilder mb, IVal parameter, Cont success,
26             Label failure) {
27         mb.jump(success);
28     }
29     
30     public int constructorTag() {
31         return 0;
32     }
33     
34     @Override
35     public String toString() {
36         return "()";
37     }
38
39     @Override
40     public Object realizeValue(TransientClassBuilder classBuilder) {
41         return Tuple0.INSTANCE;
42     }
43 }