X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Felaboration%2Fexpressions%2FERuleset.java;h=9e863a7a6e1f42fe3eccfee067593d547a3c1a5e;hb=cb5fc8d606d8b322563e9345c441eecfa7f01753;hp=e512460298d5bb40e0316d5b4020d0c21f8184a3;hpb=969bd23cab98a79ca9101af33334000879fb60c5;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ERuleset.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ERuleset.java index e51246029..9e863a7a6 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ERuleset.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ERuleset.java @@ -21,7 +21,7 @@ import java.util.ArrayList; import java.util.Set; import org.simantics.scl.compiler.common.exceptions.InternalCompilerError; -import org.simantics.scl.compiler.common.names.Name; +import org.simantics.scl.compiler.common.names.Names; import org.simantics.scl.compiler.elaboration.contexts.TranslationContext; import org.simantics.scl.compiler.elaboration.contexts.TypingContext; import org.simantics.scl.compiler.elaboration.expressions.printing.ExpressionToStringVisitor; @@ -36,7 +36,6 @@ import org.simantics.scl.compiler.internal.elaboration.utils.ExpressionDecorator import org.simantics.scl.compiler.internal.elaboration.utils.ForcedClosure; import org.simantics.scl.compiler.internal.elaboration.utils.StronglyConnectedComponents; import org.simantics.scl.compiler.top.SCLCompilerConfiguration; -import org.simantics.scl.compiler.types.TCon; import org.simantics.scl.compiler.types.Type; import org.simantics.scl.compiler.types.Types; import org.simantics.scl.compiler.types.exceptions.MatchException; @@ -131,6 +130,13 @@ public class ERuleset extends SimplifiableExpression { return compile(context); } + @Override + public Expression checkIgnoredType(TypingContext context) { + checkRuleTypes(context); + in = in.checkIgnoredType(context); + return compile(context); + } + @Override public void collectFreeVariables(THashSet vars) { for(DatalogRule rule : rules) { @@ -184,15 +190,6 @@ public class ERuleset extends SimplifiableExpression { Variable handleFunc; } - public static final TCon MSet = Types.con("MSet", "T"); - private static final Name MSet_add = Name.create("MSet", "add"); - private static final Name MSet_create = Name.create("MSet", "create"); - - private static final TCon MList = Types.con("MList", "T"); - private static final Name MList_add = Name.create("MList", "add"); - private static final Name MList_create = Name.create("MList", "create"); - private static final Name MList_removeLast = Name.create("MList", "removeLast"); - public Expression compile(TypingContext context) { // Create a map from relations to their ids TObjectIntHashMap relationsToIds = new TObjectIntHashMap(relations.length, @@ -277,7 +274,7 @@ public class ERuleset extends SimplifiableExpression { LocalRelation relation = relations[i]; Type[] parameterTypes = relation.getParameterTypes(); stacks[i] = newVar("stack" + relation.getName(), - Types.apply(MList, Types.tuple(parameterTypes)) + Types.apply(Names.MList_T, Types.tuple(parameterTypes)) ); } @@ -298,7 +295,7 @@ public class ERuleset extends SimplifiableExpression { ArrayList seedExpressions = new ArrayList(); for(DatalogRule rule : rules) { int id = diffables.get(rule.headRelation).id; - Expression appendExp = apply(context, Types.PROC, MList_add, Types.tuple(rule.headRelation.getParameterTypes()), + Expression appendExp = apply(context.getCompilationContext(), Types.PROC, Names.MList_add, Types.tuple(rule.headRelation.getParameterTypes()), var(stacks[id]), tuple(rule.headParameters) ); @@ -342,7 +339,7 @@ public class ERuleset extends SimplifiableExpression { for(Expression updateExpression : updateExpressions[i]) handleRow = seq(updateExpression, handleRow); handleRow = if_( - apply(context, Types.PROC, MSet_add, rowType, + apply(context.getCompilationContext(), Types.PROC, Names.MSet_add, rowType, var(relation.table), var(row)), handleRow, tuple() @@ -354,7 +351,7 @@ public class ERuleset extends SimplifiableExpression { apply(Types.PROC, var(loops[(i+1)%relations.length]), addInteger(var(counter), integer(-1))) ); Expression body = matchWithDefault( - apply(context, Types.PROC, MList_removeLast, rowType, var(stacks[i])), + apply(context.getCompilationContext(), Types.PROC, Names.MList_removeLast, rowType, var(stacks[i])), Just(as(row, tuple(vars(parameters)))), handleRow, failure); @@ -369,7 +366,7 @@ public class ERuleset extends SimplifiableExpression { // Create stacks for(int i=0;i