]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/references/ValSpecialization.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / internal / codegen / references / ValSpecialization.java
diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/references/ValSpecialization.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/references/ValSpecialization.java
new file mode 100644 (file)
index 0000000..80a8f66
--- /dev/null
@@ -0,0 +1,59 @@
+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