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%2FLocalRelation.java;h=0e0016df9f3f0a14daa79e5aef5eb1e8d334b1bb;hp=900c9627bc1fbbd2b98acedff7d44c45364de4c3;hb=3e457239db8dd214a3a10c74c2ecefa0f0f8dd1a;hpb=969bd23cab98a79ca9101af33334000879fb60c5 diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/relations/LocalRelation.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/relations/LocalRelation.java index 900c9627b..0e0016df9 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/relations/LocalRelation.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/relations/LocalRelation.java @@ -1,10 +1,13 @@ package org.simantics.scl.compiler.elaboration.relations; -import static org.simantics.scl.compiler.elaboration.expressions.Expressions.*; +import static org.simantics.scl.compiler.elaboration.expressions.Expressions.apply; +import static org.simantics.scl.compiler.elaboration.expressions.Expressions.newVar; +import static org.simantics.scl.compiler.elaboration.expressions.Expressions.tuple; +import static org.simantics.scl.compiler.elaboration.expressions.Expressions.var; +import static org.simantics.scl.compiler.elaboration.expressions.Expressions.vars; import org.simantics.scl.compiler.common.exceptions.InternalCompilerError; -import org.simantics.scl.compiler.common.names.Name; -import org.simantics.scl.compiler.elaboration.expressions.ERuleset; +import org.simantics.scl.compiler.common.names.Names; import org.simantics.scl.compiler.elaboration.expressions.EVariable; import org.simantics.scl.compiler.elaboration.expressions.Expressions; import org.simantics.scl.compiler.elaboration.expressions.Variable; @@ -35,7 +38,7 @@ public class LocalRelation extends AbstractRelation { private void createTable() { this.table = newVar("table" + name, - Types.apply(ERuleset.MSet, Types.tuple(parameterTypes))); + Types.apply(Names.MSet_T, Types.tuple(parameterTypes))); } public int getArity() { @@ -70,8 +73,6 @@ public class LocalRelation extends AbstractRelation { return 0; } - private static final Name MSet_contains = Name.create("MSet", "contains"); - private static final Name EQ = Name.create("Prelude", "=="); @Override public void generate(long location, QueryCompilationContext context, @@ -79,8 +80,8 @@ public class LocalRelation extends AbstractRelation { if(table == null) throw new InternalCompilerError(location, "Variable table is undefined."); if(boundVariables + 1 == 1 << parameters.length) - context.condition(apply(context, Types.PROC, - MSet_contains, Types.tuple(parameterTypes), + context.condition(apply(context.getCompilationContext(), Types.PROC, + Names.MSet_contains, Types.tuple(parameterTypes), var(table), tuple(vars(parameters)) )); @@ -94,9 +95,8 @@ public class LocalRelation extends AbstractRelation { Variable row = new Variable("row", Types.tuple(parameterTypes)); for(int i=0;i>i)&1) == 1) - context.condition(apply(context, Types.NO_EFFECTS, - EQ, parameterTypes[i], - context.getEvidence(location, Types.pred(Types.EQ, parameterTypes[i])), + context.condition(apply(context.getCompilationContext(), Types.NO_EFFECTS, + Names.Builtin_equals, parameterTypes[i], var(aux[i]), var(parameters[i]) )); @@ -109,4 +109,14 @@ public class LocalRelation extends AbstractRelation { public String toString() { return name; } + + @Override + public Type getEnforceEffect() { + return Types.PROC; + } + + @Override + public Type getQueryEffect() { + return Types.PROC; + } }