package org.simantics.scl.compiler.constants; import org.objectweb.asm.Label; import org.simantics.scl.compiler.internal.codegen.continuations.Cont; import org.simantics.scl.compiler.internal.codegen.references.IVal; import org.simantics.scl.compiler.internal.codegen.references.Val; import org.simantics.scl.compiler.internal.codegen.ssa.statements.LetApply; import org.simantics.scl.compiler.internal.codegen.utils.MethodBuilder; import org.simantics.scl.compiler.internal.codegen.utils.SSASimplificationContext; import org.simantics.scl.compiler.internal.codegen.utils.TransientClassBuilder; import org.simantics.scl.compiler.types.Type; public abstract class DelegateConstant extends Constant { Constant base; public DelegateConstant(Type type) { super(type); } public DelegateConstant(Type type, Constant base) { super(type); this.base = base; } public DelegateConstant(Constant base) { super(base.getType()); this.base = base; } public void setBase(Constant base) { this.base = base; } @Override public void push(MethodBuilder mb) { base.push(mb); } @Override public Type apply(MethodBuilder mb, Type[] typeParameters, Val... parameters) { return base.apply(mb, typeParameters, parameters); } @Override public void deconstruct(MethodBuilder mb, IVal parameter, Cont success, Label failure) { base.deconstruct(mb, parameter, success, failure); } @Override public int constructorTag() { return base.constructorTag(); } @Override public int getArity() { return base.getArity(); } @Override public void inline(SSASimplificationContext context, LetApply apply) { base.inline(context, apply); } @Override public Object realizeValue(TransientClassBuilder classLoader) { return base.realizeValue(classLoader); } }