import static org.simantics.scl.compiler.elaboration.expressions.Expressions.tuple;
import static org.simantics.scl.compiler.elaboration.expressions.Expressions.var;
-import org.simantics.scl.compiler.common.names.Name;
+import org.simantics.scl.compiler.common.names.Names;
import org.simantics.scl.compiler.elaboration.expressions.EApply;
import org.simantics.scl.compiler.elaboration.expressions.EVariable;
import org.simantics.scl.compiler.elaboration.expressions.Expression;
type = type.replace(getTypeVariables(), typeParameters);
Expression continuation = context.getContinuation();
+ System.out.println("continuation = " + continuation + " :: " + continuation.getType());
Variable set = new Variable("set", Types.apply(Types.con("MSet", "T"), type));
Variable f = new Variable("f", Types.functionE(type, Types.PROC, continuation.getType()));
Variable innerSolved = new Variable("tcTemp", solved.getType());
+ System.out.println("set :: " + set.getType());
+ System.out.println("f :: " + f.getType());
+ System.out.println("tcTemp :: " + innerSolved.getType());
QueryCompilationContext newContext = context.createSubcontext(new EApply(
new EVariable(f), new EVariable(innerSolved)
innerParameters, boundVariables);
continuation = context.disjunction(continuation, newContext.getContinuation());
- continuation = if_(apply(context, Types.PROC, Name.create("MSet", "add"), type,
+ continuation = if_(apply(context.getCompilationContext(), Types.PROC, Names.MSet_add, type,
var(set), var(solved)),
continuation,
context.failure());
continuation = lambda(Types.PROC, solved, continuation);
continuation = letRec(f, continuation, apply(var(f), var(bound)));
continuation = let(set,
- apply(context, Types.PROC, Name.create("MSet", "create"), type, tuple()),
+ apply(context.getCompilationContext(), Types.PROC, Names.MSet_create, type, tuple()),
continuation);
context.setContinuation(continuation);
return new SCLRelation[] { baseRelation };
}
+ @Override
+ public Type getEnforceEffect() {
+ return baseRelation.getEnforceEffect();
+ }
+
+ @Override
+ public Type getQueryEffect() {
+ return baseRelation.getQueryEffect();
+ }
+
}