import org.simantics.scl.compiler.elaboration.expressions.visitors.CollectEffectsVisitor;
import org.simantics.scl.compiler.elaboration.expressions.visitors.CollectFreeVariablesVisitor;
import org.simantics.scl.compiler.elaboration.expressions.visitors.CollectRefsVisitor;
+import org.simantics.scl.compiler.elaboration.expressions.visitors.CollectVarsVisitor;
import org.simantics.scl.compiler.elaboration.expressions.visitors.ForVariablesUsesVisitor;
import org.simantics.scl.compiler.elaboration.expressions.visitors.StandardExpressionVisitor;
import org.simantics.scl.compiler.elaboration.query.QAtom;
try {
updateType();
} catch (MatchException e) {
- throw new InternalCompilerError(e);
+ throw new InternalCompilerError(location, e);
}
if(type == null)
- throw new InternalCompilerError(getClass().getSimpleName() +
+ throw new InternalCompilerError(location, getClass().getSimpleName() +
".updateType couldn't compute its type.");
}
return type;
accept(new CollectRefsVisitor(allRefs, refs));
}
- public abstract void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars);
+ public final void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars) {
+ accept(new CollectVarsVisitor(allVars, vars));
+ }
public final void forVariableUses(VariableProcedure procedure) {
accept(new ForVariablesUsesVisitor(procedure));
public void getParameters(TranslationContext translationContext,
ArrayList<Expression> parameters) {
- throw new InternalCompilerError("Class " + getClass().getSimpleName() + " does not support getParameters.");
+ throw new InternalCompilerError(location, "Class " + getClass().getSimpleName() + " does not support getParameters.");
}
public Expression resolveAsPattern(TranslationContext context) {
public Expression checkTypeAsPattern(TypingContext context, Type requiredType) {
if(context.isInPattern())
- throw new InternalCompilerError("Already in a pattern.");
+ throw new InternalCompilerError(location, "Already in a pattern.");
context.setInPattern(true);
Expression expression = checkType(context, requiredType);
context.setInPattern(false);
}
public Expression replace(ReplaceContext context) {
- throw new InternalCompilerError(getClass().getSimpleName() + " does not support replace.");
+ throw new InternalCompilerError(location, getClass().getSimpleName() + " does not support replace.");
}
public static Expression[] replace(ReplaceContext context, Expression[] expressions) {