mirror of
https://github.com/DeusData/codebase-memory-mcp.git
synced 2026-11-06 08:35:21 +08:00
main does not compile. internal/cbm/lsp/type_registry.h declares type_short_buckets, type_short_entries and type_short_bucket_count twice, and cbm_registry_types_by_short_name twice with different parameter types. Two changes implemented the same feature independently:a4c0ffbcperf(cs): eliminate the C# corpus-proportional scans (2026-08-16, ours) CBMTypeShortIter, cbm_type_short_iter_next793716dcperf(lsp): index C++ short-name type lookups (PR #1679, astandrik) CBMTypeNameIter, cbm_type_name_iter_next They landed in different hunks of the same struct and the same header section, so git merged them with no conflict and nothing failed until the merge commit was built. This is the failure mode where a clean merge is not evidence that two changes compose. The two iterators are structurally identical -- same five fields, byte-identical _next bodies reading the same reg->type_short_entries chain. They differ in one place, and it matters: #1679 on aux-index allocation failure, sets tail_i = 0, so the iterator degrades to a full types[] scan and the candidate set is unchanged.a4c0ffbcsets tail_i = reg->type_qn_entry_count unconditionally, so on that same failure it SKIPS the first type_qn_entry_count types and silently yields an incomplete candidate set. So this keeps a4c0ffbc's names -- CBMTypeShortIter reads correctly beside its type_short_* members and beside CBMTypeEmbedIter and CBMFreeFuncIter -- and #1679's body, which is the correct one. The surviving declaration carries both rationales: the C++ short-name lookup and cs_resolve_type_name's step-9 fallback are now stated as two consumers of one index, which is what they are. The merge also broke two comment/member pairings, repaired here: the duplicated members had displaced the free-function index members from under their own comment, and the CBMTypeShortIter block had been interleaved between CBMFreeFuncIter's typedef and its declarations. No behaviour change for either consumer beyond the allocation-failure path, which strictly gains coverage for C#. c_lsp.c and cs_lsp.c now call one function. #1679's tests, including the fault-injection case that NULLs the buckets and asserts the full-scan fallback, carry over unchanged apart from the type name. Local: c_lsp, cs_lsp and registry -- 881 passed, 0 failed. Co-Authored-By: astandrik <astandrik@yandex-team.ru> Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>