in meta/src/main/java/org/arend/lib/pattern/PatternUtils.java [52:70]
public static List<ConcretePattern> toConcrete(List<? extends CorePattern> patterns, List<? extends ArendRef> asRefs, VariableRenamerFactory renamer, ConcreteFactory factory, Map<CoreBinding, ArendRef> bindings, CoreParameter parameters) {
assert asRefs == null || patterns.size() == asRefs.size();
List<ConcretePattern> result = new ArrayList<>(patterns.size());
for (int i = 0; i < patterns.size(); i++) {
ArendRef asRef = asRefs != null ? asRefs.get(i) : null;
CoreBinding binding = patterns.get(i).getBinding();
boolean setMap = binding != null && bindings == null && asRef != null;
if (setMap) {
bindings = Collections.singletonMap(binding, asRef);
}
ConcretePattern pattern = toConcrete(patterns.get(i), renamer, factory, bindings, parameters == null || !parameters.hasNext() || parameters.isExplicit());
result.add(asRef != null && binding == null ? pattern.as(asRefs.get(i), null) : pattern);
if (setMap) {
bindings = null;
}
if (parameters != null && parameters.hasNext()) parameters = parameters.getNext();
}
return result;
}