1 package org.simantics.scl.compiler.internal.codegen.references;
\r
3 import org.simantics.scl.compiler.common.exceptions.InternalCompilerError;
\r
4 import org.simantics.scl.compiler.internal.codegen.utils.MethodBuilder;
\r
5 import org.simantics.scl.compiler.internal.codegen.utils.TransientClassBuilder;
\r
6 import org.simantics.scl.compiler.types.Type;
\r
7 import org.simantics.scl.compiler.types.Types;
\r
9 public class ValSpecialization implements IVal {
\r
14 public ValSpecialization(Val val, Type ... parameters) {
\r
16 this.parameters = parameters;
\r
20 public Type getType() {
\r
21 return Types.instantiate(val.getType(), parameters);
\r
25 public ValRef createOccurrence() {
\r
26 return val.createOccurrence(parameters);
\r
30 public IVal createSpecialization(Type... parameters) {
\r
31 return new ValSpecialization(val, Types.concat(this.parameters, parameters));
\r
35 public void push(MethodBuilder mb) {
\r
36 throw new InternalCompilerError();
\r
40 public ValRef createOccurrence(Type... parameters) {
\r
41 return val.createOccurrence(Types.concat(this.parameters, parameters));
\r
45 public Type apply(MethodBuilder mb, Type[] typeParameters,
\r
46 Val... parameters) {
\r
47 throw new InternalCompilerError();
\r
51 public Object realizeValue(TransientClassBuilder classLoader) {
\r
52 return val.realizeValue(classLoader);
\r
56 public void setLabel(String label) {
\r