X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Felaboration%2Frelations%2FSCLRelation.java;h=58d69f4d9264a321de0597ec9b5b5c706780708d;hb=624ab61bd302e999952f792e619a691e027ff1d2;hp=a14ddaf062b7435d96dcea3c7b974d3fa6c9e858;hpb=969bd23cab98a79ca9101af33334000879fb60c5;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/relations/SCLRelation.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/relations/SCLRelation.java index a14ddaf06..58d69f4d9 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/relations/SCLRelation.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/relations/SCLRelation.java @@ -1,9 +1,11 @@ package org.simantics.scl.compiler.elaboration.relations; +import org.simantics.scl.compiler.elaboration.chr.plan.PlanContext; import org.simantics.scl.compiler.elaboration.expressions.Expression; 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; @@ -29,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, @@ -40,5 +45,24 @@ 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[] typeConstraintEvidenceParameters); + void generateEnforce( + PlanContext context, + CodeWriter w, + long location, + Expression[] parameters, + Expression[] typeConstraintEvidenceParameters); + Type getEnforceEffect(); + Type getQueryEffect(); }