42#ifndef COMPILER_MODULE_NAME_RESOLVER_H
43#define COMPILER_MODULE_NAME_RESOLVER_H
118 return "Missing_Module";
120 return "Missing_Name";
124 return "Ambiguous_Name";
130namespace Compiler_Module_Name_Resolver_Detail {
152 const std::string_view module_name,
153 const std::string_view symbol_name,
156 if (
issue.module_name != module_name)
158 if (
issue.symbol_name != symbol_name)
180 const std::string_view module_name,
181 const std::string_view symbol_name,
190 for (
size_t i = 0; i < bindings.
modules.size(); ++i)
191 if (bindings.
modules.access(i).module_name == module_name)
207 if (current.name != symbol_name)
221 for (
size_t i = 0; i < bindings.
issues.size(); ++i)
223 bindings.
issues.access(i), module_name, symbol_name,
filter))
244 const std::string_view module_name,
245 const std::string_view symbol_name,
254 for (
size_t i = 0; i < table.
modules.size(); ++i)
255 if (table.
modules.access(i).module_name == module_name)
271 if (current.name != symbol_name)
285 for (
size_t i = 0; i <
bound_module->ambiguous_names.size(); ++i)
287 const auto ¤t =
bound_module->ambiguous_names.access(i);
288 if (current.name != symbol_name)
Reusable binding helpers for linked module surfaces.
Reusable per-module cache for top-level name resolution.
size_t blossom_maximum_cardinality_matching(const GT &g, DynDlist< typename GT::Arc * > &matching, SA sa=SA())
Alias of compute_maximum_cardinality_general_matching().
bool issue_matches_query(const Compiler_Module_Binding_Issue &issue, const std::string_view module_name, const std::string_view symbol_name, const Compiler_Module_Name_Filter filter) noexcept
bool matches_filter(const Compiler_Module_Bound_Name &binding, const Compiler_Module_Name_Filter filter) noexcept
Main namespace for Aleph-w library functions.
Compiler_Module_Name_Resolution_Status
Result status for one module-name query.
@ Value
Regular runtime payload stored as Interpreter_Value.
const char * compiler_module_name_filter_name(const Compiler_Module_Name_Filter filter) noexcept
Returns the stable debug name for one module-name filter.
Container2< typename Container1::Item_Type > filter(Container1 &container, Operation &operation)
Filter elements that satisfy operation.
and
Check uniqueness with explicit hash + equality functors.
const char * compiler_module_name_resolution_status_name(const Compiler_Module_Name_Resolution_Status status) noexcept
Returns the stable debug name for one module-name resolution status.
Compiler_Module_Name_Resolution compiler_resolve_module_name(const Compiler_Module_Binding_Result &bindings, const std::string_view module_name, const std::string_view symbol_name, const Compiler_Module_Name_Filter filter=Compiler_Module_Name_Filter::Any)
Resolves one top-level name through reusable per-module bindings.
Compiler_Module_Name_Filter
Query filters supported by reusable module-name resolution.
@ Function
Function type such as fn(Int) -> Bool.
One structural issue reported by the reusable module binder.
Binding result over one linked module-surface view.
DynArray< Compiler_Module_Bindings > modules
DynArray< Compiler_Module_Binding_Issue > issues
Bound top-level names visible from one module.
One top-level name successfully bound in a module namespace.
Structured result returned by reusable module-name resolution.
Compiler_Module_Name_Filter filter
Compiler_Module_Name_Resolution_Status status
bool ok() const noexcept
Returns whether the query resolved to one concrete bound name.
Compiler_Module_Bound_Name binding
Cached top-level names for one module.
Cached top-level name table over all visible modules.
DynArray< Compiler_Module_Name_Table_Entry > modules