public CHRRelation relation;
public Type[] typeParameters;
public Expression[] parameters;
+ public Expression[] typeConstraintEvidenceParameters;
public boolean killAfterMatch;
public boolean negated;
public boolean passive = true;
public void collectRefs(TObjectIntHashMap<Object> 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) {
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();
else
for(int i=0;i<parameters.length;++i)
parameters[i] = parameters[i].checkType(context, parameterTypes[i]);
+
+ typeConstraintEvidenceParameters = context.addConstraints(Types.replace(relation.getTypeConstraints(), typeVariables, typeParameters));
}
}
public void collectVars(TObjectIntHashMap<Variable> 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<Variable> vars) {
for(Expression parameter : parameters)
parameter.collectFreeVariables(vars);
+ if(typeConstraintEvidenceParameters != null)
+ for(Expression parameter : typeConstraintEvidenceParameters)
+ parameter.collectFreeVariables(vars);
}
public void setLocationDeep(long loc) {
public void simplify(SimplificationContext context) {
for(int i=0;i<parameters.length;++i)
parameters[i] = parameters[i].simplify(context);
+ if(typeConstraintEvidenceParameters != null)
+ for(int i=0;i<typeConstraintEvidenceParameters.length;++i)
+ typeConstraintEvidenceParameters[i] = typeConstraintEvidenceParameters[i].simplify(context);
}
public String toString() {