in meta/src/main/java/org/arend/lib/util/NamedParameter.java [118:136]
public void getAllValues(ConcreteExpression expression, Map<ArendRef, ConcreteExpression> parameters, Set<ArendRef> flags, List<ConcreteExpression> expressions, ErrorReporter errorReporter) {
List<? extends ConcreteExpression> fields = expression instanceof ConcreteTupleExpression ? ((ConcreteTupleExpression) expression).getFields() : Collections.singletonList(expression);
for (ConcreteExpression field : fields) {
Pair<ArendRef, ConcreteExpression> pair = getKeyAndValue(field);
if (pair != null) {
boolean ok;
if (pair.proj2 == null) {
ok = flags == null || flags.add(pair.proj1);
} else {
ok = parameters == null || parameters.putIfAbsent(pair.proj1, pair.proj2) == null;
}
if (!ok && errorReporter != null) {
errorReporter.report(new TypecheckingError((pair.proj2 == null ? "Flag" : "Parameter") + " '" + pair.proj1.getRefName() + "' is already set", field));
}
} else if (expressions != null) {
expressions.add(field);
}
}
}