]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/relations/SCLRelation.java
(refs #7250) Support for record syntax for CHR relations
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / relations / SCLRelation.java
index 9642762cb220cfa5a247ea7a2a3119e1aadb33aa..e93ff6e8fe16a7b5eb1aeb5a45164a86302c0be2 100644 (file)
@@ -6,6 +6,7 @@ import org.simantics.scl.compiler.elaboration.expressions.Variable;
 import org.simantics.scl.compiler.elaboration.query.compilation.EnforcingContext;
 import org.simantics.scl.compiler.elaboration.query.compilation.QueryCompilationContext;
 import org.simantics.scl.compiler.internal.codegen.writer.CodeWriter;
+import org.simantics.scl.compiler.types.TPred;
 import org.simantics.scl.compiler.types.TVar;
 import org.simantics.scl.compiler.types.Type;
 
@@ -30,8 +31,11 @@ public interface SCLRelation {
     
     TVar[] getTypeVariables();
     Type[] getParameterTypes();
+    default TPred[] getTypeConstraints() {
+        return TPred.EMPTY_ARRAY;
+    }
     int getPhase();
-    
+
     double getSelectivity(int boundVariables);
     int getRequiredVariablesMask();
     void generate(long location,
@@ -41,17 +45,22 @@ public interface SCLRelation {
     Expression generateEnforce(long location, EnforcingContext context,
             Type[] typeParameters,
             Variable[] parameters);
-
+    default String[] getFieldNames() {
+        return null;
+    }
+    
     void generateIterate(
             PlanContext context,
             CodeWriter w,
             long location,
             int boundMask,
             Variable[] variables,
-            Expression[] expressions);
+            Expression[] expressions,
+            Expression[] typeConstraintEvidenceParameters);
     void generateEnforce(
             PlanContext context,
             CodeWriter w,
             long location,
-            Expression[] parameters);
+            Expression[] parameters,
+            Expression[] typeConstraintEvidenceParameters);
 }