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%2Fexpressions%2FECHRSelect.java;h=db651684f0ee124252abc9adb73721ce05d094be;hp=71c4a43e02df08078e6c6b16aa43731ba5bcae32;hb=4ebc60b24db646dc2c64dd54190b029b8e28d030;hpb=6dfe20b0f514b91337fcac4de0267ffd8268be07 diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ECHRSelect.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ECHRSelect.java index 71c4a43e0..db651684f 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ECHRSelect.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ECHRSelect.java @@ -2,6 +2,7 @@ package org.simantics.scl.compiler.elaboration.expressions; import java.util.ArrayList; +import org.simantics.scl.compiler.common.exceptions.InternalCompilerError; import org.simantics.scl.compiler.common.names.Names; import org.simantics.scl.compiler.compilation.CompilationContext; import org.simantics.scl.compiler.constants.NoRepConstant; @@ -11,6 +12,7 @@ import org.simantics.scl.compiler.elaboration.chr.plan.PlanContext; import org.simantics.scl.compiler.elaboration.chr.plan.PlanOp; import org.simantics.scl.compiler.elaboration.chr.plan.PlanRealizer; import org.simantics.scl.compiler.elaboration.chr.planning.QueryPlanningContext; +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; @@ -21,9 +23,6 @@ import org.simantics.scl.compiler.types.Types; import org.simantics.scl.compiler.types.exceptions.MatchException; import org.simantics.scl.compiler.types.kinds.Kinds; -import gnu.trove.map.hash.TObjectIntHashMap; -import gnu.trove.set.hash.TIntHashSet; - public class ECHRSelect extends Expression { public CHRQuery query; public Variable[] existentialVariables; @@ -36,12 +35,6 @@ public class ECHRSelect extends Expression { this.query = query; } - @Override - public void collectVars(TObjectIntHashMap allVars, TIntHashSet vars) { - query.collectVars(allVars, vars); - expression.collectVars(allVars, vars); - } - @Override protected void updateType() throws MatchException { setType(Types.list(expression.getType())); @@ -60,17 +53,16 @@ public class ECHRSelect extends Expression { public Expression simplify(SimplificationContext simplificationContext) { this.expression = expression.simplify(simplificationContext); query.simplify(simplificationContext); - - CompilationContext compilationContext = simplificationContext.getCompilationContext(); - QueryPlanningContext context = new QueryPlanningContext(compilationContext, existentialVariables); - if(query.createQueryPlan(context, null, -1, null)) - planOps = context.getPlanOps(); return this; } @Override public IVal toVal(CompilationContext context, CodeWriter w) { + QueryPlanningContext queryContext = new QueryPlanningContext(context, existentialVariables); + if(query.createQueryPlan(queryContext, null, -1, null)) + planOps = queryContext.getPlanOps(); + IVal list = w.apply(location, context.getValue(Names.MList_create).getValue(), NoRepConstant.UNIT); planOps.add(new PlanOp(location) { @Override @@ -112,4 +104,25 @@ public class ECHRSelect extends Expression { public Expression accept(ExpressionTransformer transformer) { return transformer.transform(this); } + + @Override + public Expression replace(ReplaceContext context) { + Variable[] newExistentialVariables = new Variable[existentialVariables.length]; + for(int i=0;i(planOps.size()); + throw new InternalCompilerError(location, "Copying of ECHRSelect is not supported."); + //for(PlanOp op : planOps) + // copy.planOps.add(op.replace(context)); + } + return copy; + } }