]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/ast/CHRAstAtom.java
CHR query translation and support for assignment in CHR bodies
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / chr / ast / CHRAstAtom.java
index 031d8edd84d2e733f99292f6ea7561759d2534a6..7b5f4ffa6b97c42105cdde72f0bbf80865bbcd64 100644 (file)
@@ -86,11 +86,16 @@ public class CHRAstAtom extends CHRAstQuery {
     }
 
     @Override
-    protected void translate(TranslationContext context, boolean isHead, ArrayList<CHRLiteral> literals) {
-        literals.add(
-            isConstraint(context, expression) ?
-            convertConstraint(remove, expression) :
-            convertExpression(isHead, expression));
+    protected void translate(TranslationContext context, CHRQueryTranslationMode mode, ArrayList<CHRLiteral> literals) {
+        if(isConstraint(context, expression)) {
+            literals.add(convertConstraint(remove, expression));
+        }
+        else {
+            if(remove)
+                context.getErrorLog().log(location, "Only constraints can be marked for removal");
+            else
+                literals.add(convertExpression(mode, expression));
+        }
     }
     
     private static boolean isConstraint(TranslationContext context, Expression expression) {
@@ -110,8 +115,8 @@ public class CHRAstAtom extends CHRAstQuery {
         }
     }
     
-    private static CHRLiteral convertExpression(boolean isHead, Expression expression) {
-        if(isHead)
+    private static CHRLiteral convertExpression(CHRQueryTranslationMode mode, Expression expression) {
+        if(mode.isHead)
             return new CHRLiteral(expression.location, SpecialCHRRelation.CHECK, new Expression[] {expression}, false, false);
         else
             return new CHRLiteral(expression.location, SpecialCHRRelation.EXECUTE, new Expression[] {expression}, false, false);