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%2Finternal%2Felaboration%2Fconstraints%2FConstraintEnvironment.java;h=866569cbb12f8a6ddd7bcb256613624c8ab87549;hp=5479371a64098dacd6da68aafb83f2a180431995;hb=b4c720aaf27b84a479d800ed8a1e130f924213ef;hpb=3fb26ddbd489f862bf8c28e78834c98bcc29382e diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/elaboration/constraints/ConstraintEnvironment.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/elaboration/constraints/ConstraintEnvironment.java index 5479371a6..866569cbb 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/elaboration/constraints/ConstraintEnvironment.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/elaboration/constraints/ConstraintEnvironment.java @@ -3,6 +3,7 @@ package org.simantics.scl.compiler.internal.elaboration.constraints; import java.util.ArrayList; import org.simantics.scl.compiler.common.exceptions.InternalCompilerError; +import org.simantics.scl.compiler.compilation.CompilationContext; import org.simantics.scl.compiler.constants.ClassConstant; import org.simantics.scl.compiler.constants.StringConstant; import org.simantics.scl.compiler.elaboration.expressions.EApply; @@ -25,10 +26,12 @@ import org.simantics.scl.compiler.types.Types; import gnu.trove.map.hash.THashMap; public class ConstraintEnvironment { + CompilationContext compilationContext; Environment environment; - public ConstraintEnvironment(Environment environment) { - this.environment = environment; + public ConstraintEnvironment(CompilationContext compilationContext) { + this.compilationContext = compilationContext; + this.environment = compilationContext.environment; } public Superconstraint[] getSuperconstraints(TPred constraint) { @@ -48,7 +51,7 @@ public class ConstraintEnvironment { return result; } - public Reduction reduce(TPred constraint) { + public Reduction reduce(long location, TPred constraint) { // VecComp if(constraint.typeClass == Types.VEC_COMP) { Type parameter = Types.canonical(constraint.parameters[0]); @@ -143,7 +146,17 @@ public class ConstraintEnvironment { if(reductions.size() == 1) return reductions.get(0); else if(reductions.size() > 1) { - throw new InternalCompilerError("Found more than one matching instances for " + constraint.typeClass + "."); + StringBuilder b = new StringBuilder(); + b.append("Found more than one matching instances for ").append(constraint.typeClass).append(": "); + boolean first = true; + for(Reduction reduction : reductions) { + if(first) + first = false; + else + b.append(", "); + b.append(reduction.generator); + } + compilationContext.errorLog.log(location, b.toString()); } return null; }