X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Felaboration%2Frelations%2FTransitiveClosureRelation.java;h=03e3a7f27667e1fe915f28888e86ea62f531ff0b;hp=c9fa469d28f748fbea80fdfbd623399118437466;hb=3e457239db8dd214a3a10c74c2ecefa0f0f8dd1a;hpb=a5e69e900dcfcf54a9f39ab754f20467d99b64d3 diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/relations/TransitiveClosureRelation.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/relations/TransitiveClosureRelation.java index c9fa469d2..03e3a7f27 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/relations/TransitiveClosureRelation.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/relations/TransitiveClosureRelation.java @@ -8,7 +8,7 @@ import static org.simantics.scl.compiler.elaboration.expressions.Expressions.let 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; @@ -67,9 +67,13 @@ public class TransitiveClosureRelation extends AbstractRelation implements Compo 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) @@ -91,14 +95,14 @@ public class TransitiveClosureRelation extends AbstractRelation implements Compo 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); @@ -135,4 +139,14 @@ public class TransitiveClosureRelation extends AbstractRelation implements Compo return new SCLRelation[] { baseRelation }; } + @Override + public Type getEnforceEffect() { + return baseRelation.getEnforceEffect(); + } + + @Override + public Type getQueryEffect() { + return baseRelation.getQueryEffect(); + } + }