Expand description
The analyzer-resident products C++’s language logic resolves through.
CppAnalyzer owns five moka caches, three Arc<OnceLock<..>> cells and one
PoolSafeMemo; every one of them stays in brokk-bifrost-analysis because
IAnalyzer::update/update_all rebuild the analyzer wholesale through
Self::from_inner. What crosses the crate line is the decision that fills
each cell – the builders in crate::hierarchy, crate::identity and
crate::imports – plus this trait, which is how a free function reaches
back for a memoized product without naming the analyzer type.
The census found no re-entrancy among these accessors, so this is a single
tier rather than the two-tier split some fleet languages needed: the #1134
reconciliation reads visible_type_units, which reads include_target_index
and the supertrait’s import_statements, and none of those reads back into
reconciliation.
Three members are load-bearing beyond their signature:
CppSource::visible_type_unitsis the moka-cached include-closure class table. Its builder iscrate::hierarchy::build_cpp_visible_type_units; the cell and itstest-supportbuild counter stay analyzer-side, so this accessor is the only way the reconciler reaches a warm table.CppSource::raw_supertypes_ofisTreeSitterAnalyzer::raw_supertypes_of, whose rows are crate-private to analysis; the analyzer hands the decoded base-specifier strings across.