]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/fundeps/Fundep.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / fundeps / Fundep.java
1 package org.simantics.scl.compiler.elaboration.fundeps;\r
2 \r
3 import org.simantics.scl.compiler.common.exceptions.InternalCompilerError;\r
4 import org.simantics.scl.compiler.internal.parsing.declarations.FundepAst;\r
5 \r
6 \r
7 public class Fundep {\r
8     public static final Fundep[] EMPTY_ARRAY = new Fundep[0];\r
9     public final int[] from;\r
10     public final int[] to;\r
11 \r
12     public Fundep(int[] from, int[] to) {\r
13         this.from = from;\r
14         this.to = to;\r
15     }\r
16     \r
17     public Fundep(int[] from, int to) {\r
18         this(from, new int[] {to});\r
19     }\r
20 \r
21     private static int mapParameterName(String[] parameterNames, String name) {\r
22         for(int i=0;i<parameterNames.length;++i)\r
23             if(parameterNames[i].equals(name))\r
24                 return i;\r
25         throw new InternalCompilerError("Fundep.mapParameterName error handling missing.");\r
26     }\r
27 \r
28     private static int[] mapParameterNames(String[] parameterNames, String[] names) {\r
29         int[] result = new int[names.length];\r
30         for(int i=0;i<names.length;++i)\r
31             result[i] = mapParameterName(parameterNames, names[i]);\r
32         return result;\r
33     }\r
34 \r
35     public static Fundep[] mapFundeps(String[] parameterNames, FundepAst[] fundeps) {\r
36         Fundep[] result = new Fundep[fundeps.length];\r
37         for(int i=0;i<fundeps.length;++i)\r
38             result[i] = new Fundep(\r
39                     mapParameterNames(parameterNames, fundeps[i].from), \r
40                     mapParameterName(parameterNames, fundeps[i].to));\r
41         return result;\r
42     }\r
43 }\r