X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Felaboration%2Fchr%2FCHRLiteral.java;h=b34328a53ebb494d0586d331b712b9c361bcb6ab;hb=b2c6aed4003ef264fb48eed9ac9f2d0f6c2d5b13;hp=be34361c24ecdca939c654b9302257648655fd92;hpb=8561e498009a25473db94b0e667866aa79de90b1;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/CHRLiteral.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/CHRLiteral.java index be34361c2..b34328a53 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/CHRLiteral.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/CHRLiteral.java @@ -29,6 +29,7 @@ public class CHRLiteral extends Symbol { public CHRRelation relation; public Type[] typeParameters; public Expression[] parameters; + public Expression[] typeConstraintEvidenceParameters; public boolean killAfterMatch; public boolean negated; public boolean passive = true; @@ -73,6 +74,9 @@ public class CHRLiteral extends Symbol { public void collectRefs(TObjectIntHashMap allRefs, TIntHashSet refs) { for(Expression parameter : parameters) parameter.collectRefs(allRefs, refs); + if(typeConstraintEvidenceParameters != null) + for(Expression parameter : typeConstraintEvidenceParameters) + parameter.collectRefs(allRefs, refs); } public void checkType(TypingContext context) { @@ -80,6 +84,7 @@ public class CHRLiteral extends Symbol { if(parameters.length != 1) throw new InternalCompilerError("Wrong number of parameters for EXECUTE constraint."); parameters[0] = parameters[0].checkIgnoredType(context); + typeConstraintEvidenceParameters = Expression.EMPTY_ARRAY; } else { TVar[] typeVariables = relation.getTypeVariables(); @@ -92,22 +97,33 @@ public class CHRLiteral extends Symbol { else for(int i=0;i allVars, TIntHashSet vars) { for(Expression parameter : parameters) parameter.collectVars(allVars, vars); + if(typeConstraintEvidenceParameters != null) + for(Expression parameter : typeConstraintEvidenceParameters) + parameter.collectVars(allVars, vars); } public void forVariables(VariableProcedure procedure) { for(Expression parameter : parameters) parameter.forVariables(procedure); + if(typeConstraintEvidenceParameters != null) + for(Expression parameter : typeConstraintEvidenceParameters) + parameter.forVariables(procedure); } public void collectFreeVariables(THashSet vars) { for(Expression parameter : parameters) parameter.collectFreeVariables(vars); + if(typeConstraintEvidenceParameters != null) + for(Expression parameter : typeConstraintEvidenceParameters) + parameter.collectFreeVariables(vars); } public void setLocationDeep(long loc) { @@ -121,6 +137,9 @@ public class CHRLiteral extends Symbol { public void simplify(SimplificationContext context) { for(int i=0;i