package org.simantics.scl.compiler.elaboration.expressions;\r
\r
-import gnu.trove.map.hash.TObjectIntHashMap;\r
-import gnu.trove.set.hash.THashSet;\r
-import gnu.trove.set.hash.TIntHashSet;\r
-\r
import org.simantics.scl.compiler.elaboration.contexts.ReplaceContext;\r
import org.simantics.scl.compiler.elaboration.contexts.SimplificationContext;\r
import org.simantics.scl.compiler.elaboration.contexts.TranslationContext;\r
import org.simantics.scl.compiler.internal.parsing.Symbol;\r
import org.simantics.scl.compiler.types.Type;\r
\r
+import gnu.trove.map.hash.TObjectIntHashMap;\r
+import gnu.trove.set.hash.THashSet;\r
+import gnu.trove.set.hash.TIntHashSet;\r
+\r
public class Case extends Symbol {\r
public Expression[] patterns;\r
public Expression value;\r
patterns[i] = patterns[i].checkTypeAsPattern(context, parameterTypes[i]);\r
value = value.checkType(context, requiredType);\r
}\r
+ \r
+ public void checkIgnoredType(TypingContext context, Type[] parameterTypes) {\r
+ if(patterns.length != parameterTypes.length) {\r
+ context.getErrorLog().log(location, "This case has different arity ("+patterns.length+\r
+ ") than than the first case (+"+parameterTypes.length+"+).");\r
+ return;\r
+ }\r
+ for(int i=0;i<patterns.length;++i)\r
+ patterns[i] = patterns[i].checkTypeAsPattern(context, parameterTypes[i]);\r
+ value = value.checkIgnoredType(context);\r
+ }\r
\r
public void decorate(ExpressionDecorator decorator) {\r
for(int i=0;i<patterns.length;++i)\r