import java.util.ArrayList;
+import org.simantics.scl.compiler.compilation.CompilationContext;
import org.simantics.scl.compiler.elaboration.contexts.ReplaceContext;
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.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;
-import org.simantics.scl.compiler.internal.elaboration.utils.ExpressionDecorator;
import org.simantics.scl.compiler.types.Type;
import org.simantics.scl.compiler.types.Types;
import org.simantics.scl.compiler.types.kinds.Kinds;
}
@Override
- public IVal toVal(Environment env, CodeWriter w) {
+ public IVal toVal(CompilationContext context, CodeWriter w) {
ArrayList<Row> rows = new ArrayList<Row>(cases.length);
for(Case case_ : cases)
rows.add(new Row(case_.patterns, case_.value));
IVal[] scrutineeVals = new IVal[scrutinee.length];
for(int i=0;i<scrutinee.length;++i)
- scrutineeVals[i] = scrutinee[i].toVal(env, w);
+ scrutineeVals[i] = scrutinee[i].toVal(context, w);
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);
+ PatternMatchingCompiler.split(w, context, scrutineeVals, joinPoint.getContinuation(), failurePoint.getContinuation(), rows);
failurePoint.throw_(location, Throw.MatchingException, "Matching failure at: " + toString());
w.continueAs(joinPoint);
return w.getParameters()[0];
return this;
}
- @Override
- public Expression decorate(ExpressionDecorator decorator) {
- for(int i=0;i<scrutinee.length;++i)
- scrutinee[i] = scrutinee[i].decorate(decorator);
- for(Case case_ : cases)
- case_.decorate(decorator);
- return decorator.decorate(this);
- }
-
@Override
public void collectEffects(THashSet<Type> effects) {
for(Expression s : scrutinee)
public Case[] getCases() {
return cases;
}
-
- @Override
- public void forVariables(VariableProcedure procedure) {
- for(Expression s : scrutinee)
- s.forVariables(procedure);
- for(Case case_ : cases)
- case_.forVariables(procedure);
- }
@Override
public Expression accept(ExpressionTransformer transformer) {