--- /dev/null
+package org.simantics.scl.compiler.internal.codegen.references;\r
+\r
+import org.simantics.scl.compiler.common.exceptions.InternalCompilerError;\r
+import org.simantics.scl.compiler.internal.codegen.utils.MethodBuilder;\r
+import org.simantics.scl.compiler.internal.codegen.utils.TransientClassBuilder;\r
+import org.simantics.scl.compiler.types.Type;\r
+import org.simantics.scl.compiler.types.Types;\r
+\r
+public class ValSpecialization implements IVal {\r
+\r
+ Val val;\r
+ Type[] parameters;\r
+ \r
+ public ValSpecialization(Val val, Type ... parameters) {\r
+ this.val = val;\r
+ this.parameters = parameters;\r
+ }\r
+\r
+ @Override\r
+ public Type getType() {\r
+ return Types.instantiate(val.getType(), parameters); \r
+ }\r
+\r
+ @Override\r
+ public ValRef createOccurrence() {\r
+ return val.createOccurrence(parameters);\r
+ }\r
+\r
+ @Override\r
+ public IVal createSpecialization(Type... parameters) {\r
+ return new ValSpecialization(val, Types.concat(this.parameters, parameters));\r
+ }\r
+\r
+ @Override\r
+ public void push(MethodBuilder mb) {\r
+ throw new InternalCompilerError();\r
+ }\r
+\r
+ @Override\r
+ public ValRef createOccurrence(Type... parameters) {\r
+ return val.createOccurrence(Types.concat(this.parameters, parameters));\r
+ }\r
+\r
+ @Override\r
+ public Type apply(MethodBuilder mb, Type[] typeParameters,\r
+ Val... parameters) {\r
+ throw new InternalCompilerError();\r
+ }\r
+\r
+ @Override\r
+ public Object realizeValue(TransientClassBuilder classLoader) {\r
+ return val.realizeValue(classLoader);\r
+ }\r
+\r
+ @Override\r
+ public void setLabel(String label) { \r
+ }\r
+\r
+}\r