X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Felaboration%2Fexpressions%2FEMatch.java;h=11877a60e086e9d0e6ba16f7eac4aaaccedd8cac;hp=a218b95c38bf04913f983ba5c0978cb169b16e34;hb=9a175feb652b2b7bba7afa540831b9076be3c10e;hpb=0b72d3e4ec886838314ffeba0fa201e32c0aae3e diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EMatch.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EMatch.java index a218b95c3..11877a60e 100755 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EMatch.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EMatch.java @@ -1,9 +1,5 @@ package org.simantics.scl.compiler.elaboration.expressions; -import gnu.trove.map.hash.TObjectIntHashMap; -import gnu.trove.set.hash.THashSet; -import gnu.trove.set.hash.TIntHashSet; - import java.util.ArrayList; import org.simantics.scl.compiler.elaboration.contexts.ReplaceContext; @@ -13,6 +9,7 @@ import org.simantics.scl.compiler.elaboration.contexts.TypingContext; import org.simantics.scl.compiler.environment.Environment; import org.simantics.scl.compiler.errors.Locations; import org.simantics.scl.compiler.internal.codegen.references.IVal; +import org.simantics.scl.compiler.internal.codegen.ssa.exits.Throw; import org.simantics.scl.compiler.internal.codegen.writer.CodeWriter; import org.simantics.scl.compiler.internal.elaboration.matching.PatternMatchingCompiler; import org.simantics.scl.compiler.internal.elaboration.matching.Row; @@ -21,6 +18,10 @@ import org.simantics.scl.compiler.types.Type; import org.simantics.scl.compiler.types.Types; import org.simantics.scl.compiler.types.kinds.Kinds; +import gnu.trove.map.hash.TObjectIntHashMap; +import gnu.trove.set.hash.THashSet; +import gnu.trove.set.hash.TIntHashSet; + public class EMatch extends Expression { public Expression[] scrutinee; @@ -75,7 +76,7 @@ public class EMatch extends Expression { CodeWriter joinPoint = w.createBlock(getType()); CodeWriter failurePoint = w.createBlock(); // TODO generate only one failurePoint per function PatternMatchingCompiler.split(w, env, scrutineeVals, joinPoint.getContinuation(), failurePoint.getContinuation(), rows); - failurePoint.throw_(location, "Matching failure at: " + toString()); + failurePoint.throw_(location, Throw.MatchingException, "Matching failure at: " + toString()); w.continueAs(joinPoint); return w.getParameters()[0]; } @@ -149,6 +150,19 @@ public class EMatch extends Expression { setType(requiredType); return this; } + + @Override + public Expression checkIgnoredType(TypingContext context) { + Type[] scrutineeTypes = new Type[scrutinee.length]; + for(int i=0;i