package org.simantics.scl.compiler.elaboration.expressions; import org.simantics.scl.compiler.common.exceptions.InternalCompilerError; import org.simantics.scl.compiler.elaboration.contexts.SimplificationContext; import org.simantics.scl.compiler.elaboration.contexts.TranslationContext; import org.simantics.scl.compiler.elaboration.contexts.TypingContext; import org.simantics.scl.compiler.errors.ErrorLog; import org.simantics.scl.compiler.errors.Locations; import org.simantics.scl.compiler.types.Skeletons; import org.simantics.scl.compiler.types.TMetaVar; import org.simantics.scl.compiler.types.Type; import org.simantics.scl.compiler.types.Types; import org.simantics.scl.compiler.types.exceptions.MatchException; import org.simantics.scl.compiler.types.exceptions.UnificationException; import org.simantics.scl.compiler.types.util.TypeListener; import org.simantics.scl.compiler.types.util.TypeUnparsingContext; import gnu.trove.map.hash.THashMap; public class EAmbiguous extends SimplifiableExpression { public static final boolean DEBUG = false; Alternative[] alternatives; boolean[] active; int activeCount; transient TypingContext context; public Expression resolvedExpression; public abstract static class Alternative { public abstract Type getType(); public abstract Expression realize(); } public EAmbiguous(Alternative[] alternatives) { this.alternatives = alternatives; this.active = new boolean[alternatives.length]; for(int i=0;i unifications = new THashMap(); Type requiredType = getType(); if(DEBUG) System.out.println("EAmbigious.filterActive with " + requiredType); for(int i=0;i, but no alternatives match the type: "); for(int i=0;i, but multiple values match the type: "); for(int i=0;i