]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/translation/CHRTranslation.java
(refs #7371) Support for select keyword for CHR constraints
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / chr / translation / CHRTranslation.java
index 367960dfafc0a35f5f2ddb0d9870bd9152c6924c..d4f21a7265178bfe2b629066b423349066cd917f 100644 (file)
@@ -3,7 +3,6 @@ package org.simantics.scl.compiler.elaboration.chr.translation;
 import java.util.ArrayList;
 import java.util.Arrays;
 
-import org.simantics.scl.compiler.common.exceptions.InternalCompilerError;
 import org.simantics.scl.compiler.elaboration.chr.CHRLiteral;
 import org.simantics.scl.compiler.elaboration.chr.CHRQuery;
 import org.simantics.scl.compiler.elaboration.chr.CHRRule;
@@ -131,22 +130,20 @@ public class CHRTranslation {
         }
     }
 
-    public static CHRRule convertCHRStatement(TranslationContext context, CHRStatement statement) {
-        ArrayList<CHRLiteral> head = new ArrayList<CHRLiteral>(statement.head.length);
-        for(ListQualifier qualifier : statement.head) {
-            CHRLiteral literal = convertListQualifier(context, true, qualifier);
-            if(literal != null)
-                head.add(literal);
-        }
-        ArrayList<CHRLiteral> body = new ArrayList<CHRLiteral>(statement.body.length);
-        for(ListQualifier qualifier : statement.body) {
-            CHRLiteral literal = convertListQualifier(context, false, qualifier);
+    public static CHRQuery convertCHRQuery(TranslationContext context, boolean isHead, ListQualifier[] lqs) {
+        ArrayList<CHRLiteral> query = new ArrayList<CHRLiteral>(lqs.length);
+        for(ListQualifier qualifier : lqs) {
+            CHRLiteral literal = convertListQualifier(context, isHead, qualifier);
             if(literal != null)
-                body.add(literal);
+                query.add(literal);
         }
+        return new CHRQuery(query.toArray(new CHRLiteral[query.size()]));
+    }
+    
+    public static CHRRule convertCHRStatement(TranslationContext context, CHRStatement statement) {
         return new CHRRule(statement.location,
-                new CHRQuery(head.toArray(new CHRLiteral[head.size()])),
-                new CHRQuery(body.toArray(new CHRLiteral[body.size()])),
+                convertCHRQuery(context, true, statement.head),
+                convertCHRQuery(context, false, statement.body),
                 null);
     }