42#ifndef COMPILER_MODULE_RESOLVER_H
43#define COMPILER_MODULE_RESOLVER_H
100 return "Missing_Dependency";
102 return "Cyclic_Dependency";
112 std::ostringstream
out;
113 out <<
"ImportOrder\n";
114 for (
size_t i = 0; i < order.
size(); ++i)
116 const auto index = order.
access(i);
117 const auto name = index < modules.
size() ? modules.
access(index).name :
"<invalid-module>";
118 out <<
" [" << i <<
"] " << name <<
'\n';
123namespace Compiler_Module_Resolver_Detail {
125 const std::string &name)
noexcept
127 for (
size_t i = 0; i < modules.size(); ++i)
128 if (modules.access(i).name == name)
130 return static_cast<size_t>(-1);
138 const auto state = states.
access(index);
141 if (state == 1
or state == 3)
145 const auto &
module = modules.access(index);
146 for (
size_t i = 0; i <
module.imports.size(); ++i)
148 const auto &
dep =
module.imports.access(i);
150 if (
dep_index ==
static_cast<size_t>(-1))
152 result.
valid =
false;
155 static_cast<size_t>(-1),
164 result.
valid =
false;
176 result.
valid =
false;
211 for (
size_t i = 0; i < modules.
size(); ++i)
214 for (
size_t i = 0; i < modules.
size(); ++i)
215 if (states.
access(i) == 0)
Source file and span management utilities for compiler-style tooling.
size_t size_t int32_t * out
size_t size() const noexcept
Return the current dimension of array.
T & access(const size_t i) const noexcept
Fast access without checking allocation and bound_min_clock checking.
T & append()
Allocate a new entry to the end of array.
size_t blossom_maximum_cardinality_matching(const GT &g, DynDlist< typename GT::Arc * > &matching, SA sa=SA())
Alias of compute_maximum_cardinality_general_matching().
size_t find_module_index(const DynArray< Compiler_Module_Descriptor > &modules, const std::string &name) noexcept
bool resolve_visit(const DynArray< Compiler_Module_Descriptor > &modules, const size_t index, DynArray< unsigned char > &states, Compiler_Module_Resolution_Result &result)
Main namespace for Aleph-w library functions.
and
Check uniqueness with explicit hash + equality functors.
std::string compiler_render_module_order(const DynArray< size_t > &order, const DynArray< Compiler_Module_Descriptor > &modules)
Renders one deterministic text artifact for a module order.
Compiler_Module_Resolution_Result compiler_resolve_module_order(const DynArray< Compiler_Module_Descriptor > &modules)
Resolves one dependency-first order for exact-name module imports.
const char * compiler_module_resolution_issue_name(const Compiler_Module_Resolution_Issue_Kind kind) noexcept
Returns the stable debug name of one module-resolution issue kind.
Compiler_Module_Resolution_Issue_Kind
Structural issue kinds produced by module dependency resolution.
One source-name dependency edge originating from one module.
std::string module_name
Exact imported source name.
Source_Span span
Source location where the import was declared.
One module descriptor consumed by the reusable resolver.
DynArray< Compiler_Module_Dependency > imports
Ordered dependency list.
std::string name
Stable module/source name.
One structured issue emitted by the reusable module resolver.
Source_Span span
Source location of the problematic import.
std::string dependency_name
Missing or cyclic dependency name.
Compiler_Module_Resolution_Issue_Kind kind
std::string module_name
Stable importer name.
size_t module_index
Module whose import triggered the issue.
size_t dependency_index
Known dependency index when available.
Resolution result for one set of source-name module descriptors.
DynArray< size_t > order
Stable dependency-first module order.
bool valid
true when no missing dependencies or cycles were found.
DynArray< Compiler_Module_Resolution_Issue > issues
Structured issues, if any.
Half-open byte range inside a source file.
Lazy and scalable dynamic array implementation.