]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/plan/AccessFactOp.java
SCL compiler generates line numbers to bytecode
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / chr / plan / AccessFactOp.java
index befcfdd5b99f6e44414256533281acc507e99b99..c0cb00184770119175520905e9a3837b0b1873b6 100644 (file)
@@ -1,51 +1,50 @@
-package org.simantics.scl.compiler.elaboration.chr.plan;\r
-\r
-import org.simantics.scl.compiler.compilation.CompilationContext;\r
-import org.simantics.scl.compiler.constants.BooleanConstant;\r
-import org.simantics.scl.compiler.elaboration.chr.relations.CHRConstraint;\r
-import org.simantics.scl.compiler.elaboration.expressions.Expression;\r
-import org.simantics.scl.compiler.elaboration.expressions.Variable;\r
-import org.simantics.scl.compiler.internal.codegen.references.IVal;\r
-import org.simantics.scl.compiler.internal.codegen.writer.CodeWriter;\r
-\r
-public class AccessFactOp extends PlanOp {\r
-\r
-    Expression inputFact;\r
-    CHRConstraint constraint;\r
-    Variable[] variables;\r
-    boolean killAfterMatch;\r
-    \r
-    public AccessFactOp(long location, Expression inputFact, CHRConstraint constraint, Variable[] variables,\r
-            boolean killAfterMatch) {\r
-        super(location);\r
-        this.inputFact = inputFact;\r
-        this.constraint = constraint;\r
-        this.variables = variables;\r
-        this.killAfterMatch = killAfterMatch;\r
-    }\r
-\r
-    @Override\r
-    public void toString(StringBuilder b) {\r
-        b.append("ACCESS  ");\r
-        if(killAfterMatch)\r
-            b.append("- ");\r
-        b.append(constraint);\r
-        for(Variable variable : variables)\r
-            b.append(' ').append(variable);\r
-        b.append(" = ").append(inputFact);\r
-    }\r
-\r
-    @Override\r
-    public void generateCode(CompilationContext context, PlanContext planContext, CodeWriter w) {\r
-        IVal inputVal = inputFact.toVal(context.environment, w);\r
-        for(int i=0;i<variables.length;++i)\r
-            variables[i].setVal(w.apply(location, constraint.accessComponent(i), inputVal));\r
-        IVal activeId = w.apply(location, constraint.accessId, inputVal);\r
-        CodeWriter end = constraint.mayBeRemoved() ? w.createBlock() : null;\r
-        planContext.partnerFacts.add(new PartnerFact(true, activeId, constraint, inputVal, constraint.mayBeRemoved(), killAfterMatch, null, null, end == null ? null : end.getContinuation()));\r
-        planContext.nextOp(w);\r
-        if(end != null)\r
-            end.return_(BooleanConstant.FALSE);\r
-    }\r
-\r
-}\r
+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, w);
+        for(int i=0;i<variables.length;++i)
+            variables[i].setVal(constraint.accessComponent(location, w, inputVal, i));
+        IVal activeId = w.apply(location, constraint.accessId, inputVal);
+        CodeWriter end = constraint.mayBeRemoved() ? w.createBlock() : null;
+        planContext.partnerFacts.add(new PartnerFact(true, activeId, constraint, inputVal, constraint.mayBeRemoved(), killAfterMatch, null, null, end == null ? null : end.getContinuation()));
+        planContext.nextOp(w);
+        if(end != null)
+            end.return_(location, BooleanConstant.FALSE);
+    }
+}