package org.simantics.scl.compiler.constants.singletons; import org.simantics.scl.compiler.constants.FunctionValue; import org.simantics.scl.compiler.internal.codegen.references.Val; import org.simantics.scl.compiler.internal.codegen.utils.MethodBuilder; import org.simantics.scl.compiler.types.TCon; import org.simantics.scl.compiler.types.TVar; import org.simantics.scl.compiler.types.Type; import org.simantics.scl.compiler.types.Types; import org.simantics.scl.compiler.types.kinds.Kinds; public class TypeOfProxyConstant extends FunctionValue { private static final TVar A = Types.var(Kinds.STAR); private static final TCon Type = Types.con(Types.BUILTIN, "Type"); public static final TypeOfProxyConstant INSTANCE = new TypeOfProxyConstant(); private TypeOfProxyConstant() { super(new TVar[] {A}, Types.NO_EFFECTS, Type, Types.pred(Types.TYPEABLE, A), Types.apply(Types.TYPE_PROXY, A)); } @Override public Type applyExact(MethodBuilder mb, Val[] parameters) { mb.push(parameters[0], Type); return getReturnType(); } @Override public String toString() { return "typeOfProxy"; } }