]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/Case.java
migrated to svn revision 33108
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / expressions / Case.java
index 219cce461a10adb586c484a3713a546152e7772c..50eda1c130d6840475875276a71f011760ce53ce 100755 (executable)
@@ -1,9 +1,5 @@
 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
@@ -13,6 +9,10 @@ import org.simantics.scl.compiler.internal.elaboration.utils.ExpressionDecorator
 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
@@ -99,6 +99,17 @@ public class Case extends Symbol {
             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