]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/java/FreezeMVector.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / java / FreezeMVector.java
1 package org.simantics.scl.compiler.elaboration.java;\r
2 \r
3 import org.simantics.scl.compiler.common.exceptions.InternalCompilerError;\r
4 import org.simantics.scl.compiler.constants.FunctionValue;\r
5 import org.simantics.scl.compiler.internal.codegen.references.Val;\r
6 import org.simantics.scl.compiler.internal.codegen.utils.MethodBuilder;\r
7 import org.simantics.scl.compiler.types.TVar;\r
8 import org.simantics.scl.compiler.types.Type;\r
9 import org.simantics.scl.compiler.types.Types;\r
10 import org.simantics.scl.compiler.types.exceptions.MatchException;\r
11 import org.simantics.scl.compiler.types.kinds.Kinds;\r
12 \r
13 public class FreezeMVector extends FunctionValue {\r
14     private static final TVar A = Types.var(Kinds.STAR);  \r
15     \r
16     public FreezeMVector() {\r
17         super(new TVar[] {A}, Types.PROC, Types.vector(A), Types.mvector(A));\r
18     }\r
19     \r
20     @Override\r
21     public Type applyExact(MethodBuilder mb, Val[] parameters) {\r
22         Val vectorVar = parameters[0];\r
23         \r
24         vectorVar.push(mb);        \r
25         \r
26         try {\r
27             Type elementType = Types.canonical(\r
28                     Types.matchApply(Types.MVECTOR, vectorVar.getType()));\r
29             return Types.vector(elementType);\r
30         } catch (MatchException e) {\r
31             throw new InternalCompilerError(e);\r
32         }\r
33     }   \r
34 \r
35 }\r