in source/model-generator/ModelTemplates.cpp [547:600]
bool ForAllParameters::instantiate(Model& model, const Method* method) const {
bool updated = false;
ParameterPosition index = method->first_parameter_index();
for (auto type : *method->get_proto()->get_args()) {
if (constraints_->satisfy(type)) {
LOG(3, "Type {} satifies constraints in for_all_parameters", show(type));
TemplateVariableMapping variable_mapping;
variable_mapping.insert(variable_, index);
for (const auto& sink_template : sink_templates_) {
sink_template.instantiate(variable_mapping, model);
updated = true;
}
for (const auto& parameter_source_template :
parameter_source_templates_) {
parameter_source_template.instantiate(variable_mapping, model);
updated = true;
}
for (const auto& generation_template : generation_templates_) {
generation_template.instantiate(variable_mapping, model);
updated = true;
}
for (const auto& source_template : source_templates_) {
source_template.instantiate(variable_mapping, model);
updated = true;
}
for (const auto& propagation_template : propagation_templates_) {
propagation_template.instantiate(variable_mapping, model);
updated = true;
}
for (const auto& attach_to_sources_template :
attach_to_sources_templates_) {
attach_to_sources_template.instantiate(variable_mapping, model);
updated = true;
}
for (const auto& attach_to_sinks_template : attach_to_sinks_templates_) {
attach_to_sinks_template.instantiate(variable_mapping, model);
updated = true;
}
for (const auto& attach_to_propagations_template :
attach_to_propagations_templates_) {
attach_to_propagations_template.instantiate(variable_mapping, model);
updated = true;
}
for (const auto& add_features_to_arguments_template :
add_features_to_arguments_templates_) {
add_features_to_arguments_template.instantiate(variable_mapping, model);
updated = true;
}
}
index++;
}
return updated;
}