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%2Fchr%2Fplan%2FAccessFactOp.java;fp=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Felaboration%2Fchr%2Fplan%2FAccessFactOp.java;h=befcfdd5b99f6e44414256533281acc507e99b99;hp=0000000000000000000000000000000000000000;hb=a8758de5bc19e5adb3f618d3038743a164f09912;hpb=12d9af17384d960b75d58c3935d2b7b46d93e87b diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/plan/AccessFactOp.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/plan/AccessFactOp.java new file mode 100644 index 000000000..befcfdd5b --- /dev/null +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/plan/AccessFactOp.java @@ -0,0 +1,51 @@ +package org.simantics.scl.compiler.elaboration.chr.plan; + +import org.simantics.scl.compiler.compilation.CompilationContext; +import org.simantics.scl.compiler.constants.BooleanConstant; +import org.simantics.scl.compiler.elaboration.chr.relations.CHRConstraint; +import org.simantics.scl.compiler.elaboration.expressions.Expression; +import org.simantics.scl.compiler.elaboration.expressions.Variable; +import org.simantics.scl.compiler.internal.codegen.references.IVal; +import org.simantics.scl.compiler.internal.codegen.writer.CodeWriter; + +public class AccessFactOp extends PlanOp { + + Expression inputFact; + CHRConstraint constraint; + Variable[] variables; + boolean killAfterMatch; + + public AccessFactOp(long location, Expression inputFact, CHRConstraint constraint, Variable[] variables, + boolean killAfterMatch) { + super(location); + this.inputFact = inputFact; + this.constraint = constraint; + this.variables = variables; + this.killAfterMatch = killAfterMatch; + } + + @Override + public void toString(StringBuilder b) { + b.append("ACCESS "); + if(killAfterMatch) + b.append("- "); + b.append(constraint); + for(Variable variable : variables) + b.append(' ').append(variable); + b.append(" = ").append(inputFact); + } + + @Override + public void generateCode(CompilationContext context, PlanContext planContext, CodeWriter w) { + IVal inputVal = inputFact.toVal(context.environment, w); + for(int i=0;i