8 auto iter = std::ranges::find(m_keys, generic);
10 if (iter == m_keys.end())
13 return &m_values.at(std::distance(m_keys.begin(), iter));
17 auto iter = std::ranges::find(m_keys, generic);
19 if (iter == m_keys.end())
22 return &m_values.at(std::distance(m_keys.begin(), iter));
26 auto mapping = std::map<string, ty::Type>{};
28 for (
const auto& [k, v] : llvm::zip(m_keys, m_values))
29 if (k.holds_type() && !v.unassigned())
30 mapping.insert_or_assign(k.name, v.as_type());
35 auto iter = std::ranges::find(m_generic_type_fallbacks, generic_name, &
ty::Generic::name);
37 if (iter == m_generic_type_fallbacks.end())
An unsubstituted generic type variable, usually something like T.
auto name() const -> string override
auto get_generic_fallback(string_view generic_name) const -> ty::Generic *
auto mapping_ref_or_null(const GenericKey &generic) -> nullable< GenericValue * >
auto type_mappings() const -> std::map< string, ty::Type >