import org.simantics.scl.compiler.common.exceptions.InternalCompilerError;
import org.simantics.scl.compiler.common.precedence.Precedence;
+import org.simantics.scl.compiler.compilation.CompilationContext;
import org.simantics.scl.compiler.constants.NoRepConstant;
import org.simantics.scl.compiler.elaboration.contexts.ReplaceContext;
import org.simantics.scl.compiler.elaboration.contexts.SimplificationContext;
import org.simantics.scl.compiler.elaboration.expressions.printing.ExpressionToStringVisitor;
import org.simantics.scl.compiler.elaboration.query.QAtom;
import org.simantics.scl.compiler.elaboration.relations.SCLRelation;
-import org.simantics.scl.compiler.environment.Environment;
import org.simantics.scl.compiler.internal.codegen.references.IVal;
import org.simantics.scl.compiler.internal.codegen.writer.CodeWriter;
import org.simantics.scl.compiler.internal.elaboration.decomposed.DecomposedExpression;
-import org.simantics.scl.compiler.internal.elaboration.utils.ExpressionDecorator;
import org.simantics.scl.compiler.internal.interpreted.IExpression;
import org.simantics.scl.compiler.internal.parsing.Symbol;
import org.simantics.scl.compiler.top.ExpressionInterpretationContext;
throw new TypeValidationException(loc);
}
- public abstract IVal toVal(Environment env, CodeWriter w);
+ public abstract IVal toVal(CompilationContext context, CodeWriter w);
public Expression closure(TVar ... vars) {
if(vars.length == 0)
return expression;
}
+ /**
+ * Used during simplification and in toIExpression
+ */
public THashSet<Variable> getFreeVariables() {
THashSet<Variable> result = new THashSet<Variable>();
collectFreeVariables(result);
return result;
- }
+ }
public static Expression[] concat(Expression[] a, Expression[] b) {
if(a.length == 0)
throw new NotPatternException(this);
}
- public IVal lambdaToVal(Environment env, CodeWriter w) {
- DecomposedExpression decomposed = DecomposedExpression.decompose(this);
+ public IVal lambdaToVal(CompilationContext context, CodeWriter w) {
+ DecomposedExpression decomposed = DecomposedExpression.decompose(context.errorLog, this);
CodeWriter newW = w.createFunction(decomposed.typeParameters, decomposed.effect, decomposed.returnType, decomposed.parameterTypes);
IVal[] parameters = newW.getParameters();
IVal functionVal = newW.getFunction().getTarget();
for(int i=0;i<parameters.length;++i)
decomposed.parameters[i].setVal(parameters[i]);
- newW.return_(decomposed.body.toVal(env, newW));
+ newW.return_(decomposed.body.toVal(context, newW));
return functionVal;
}
public Expression applyType(Type type) {
return new EApplyType(location, this, type);
}
-
- public abstract Expression decorate(ExpressionDecorator decorator);
public boolean isEffectful() {
return true;