--- /dev/null
+package org.simantics.scl.compiler.elaboration.fundeps;\r
+\r
+import org.simantics.scl.compiler.common.exceptions.InternalCompilerError;\r
+import org.simantics.scl.compiler.internal.parsing.declarations.FundepAst;\r
+\r
+\r
+public class Fundep {\r
+ public static final Fundep[] EMPTY_ARRAY = new Fundep[0];\r
+ public final int[] from;\r
+ public final int[] to;\r
+\r
+ public Fundep(int[] from, int[] to) {\r
+ this.from = from;\r
+ this.to = to;\r
+ }\r
+ \r
+ public Fundep(int[] from, int to) {\r
+ this(from, new int[] {to});\r
+ }\r
+\r
+ private static int mapParameterName(String[] parameterNames, String name) {\r
+ for(int i=0;i<parameterNames.length;++i)\r
+ if(parameterNames[i].equals(name))\r
+ return i;\r
+ throw new InternalCompilerError("Fundep.mapParameterName error handling missing.");\r
+ }\r
+\r
+ private static int[] mapParameterNames(String[] parameterNames, String[] names) {\r
+ int[] result = new int[names.length];\r
+ for(int i=0;i<names.length;++i)\r
+ result[i] = mapParameterName(parameterNames, names[i]);\r
+ return result;\r
+ }\r
+\r
+ public static Fundep[] mapFundeps(String[] parameterNames, FundepAst[] fundeps) {\r
+ Fundep[] result = new Fundep[fundeps.length];\r
+ for(int i=0;i<fundeps.length;++i)\r
+ result[i] = new Fundep(\r
+ mapParameterNames(parameterNames, fundeps[i].from), \r
+ mapParameterName(parameterNames, fundeps[i].to));\r
+ return result;\r
+ }\r
+}\r