mirror of
https://github.com/DeusData/codebase-memory-mcp.git
synced 2026-11-05 08:23:53 +08:00
Overloads that share a base QN (Java/C#/C++/Kotlin/Swift/Scala/ObjC) merge
into one graph node today, and that node collects the CALLS of every
overload. The agreed cure is one signature-qualified callable identity for
all overloading languages:
callable_qn := base_qn [<tparams>] (params) [cvref]
This change lands the plumbing with every language still at
CBM_CALLABLE_ID_NONE, so the graph is byte-identical; each language is
switched on later in its own change (with its index-format bump).
- internal/cbm/callable_sig.{c,h}: the per-language mode side table
(NONE|TYPED|LABELED_TYPED|LABELED|ARITY; kept out of CBMLangSpec like
cbm_string_dispatch_suffixes, since ~160 positional rows would otherwise
all need the member under -Wmissing-field-initializers), the shared
builder cbm_callable_sig[_mode] for the def and the call-scope QN, and
the inverse cbm_qn_callable_base_len[_named]. Suffix contract: no '.',
'::' or '->'; whitespace-normalized; comments/annotations/attributes
dropped; qualified types keep their last segment; '->' spelled '=>';
variadic '[]' (Java) / '~'; C++ top-level cv dropped, arrays decay,
cvref kept; <= 200 bytes, longer ones keep whole leading entries and end
in '#<fnv1a64 of the full suffix>)'. The builder is iterative (cursor
walk, bounded declarator loop) and self-checks against the inverse.
- The inverse is anchored to the node's bare name wherever the name is
known: real QNs already end in ')' without being callables (a Java field
whose name is its declarator `X = f()`, make `$(VAR)` targets), and only
the anchor makes the inverse exact on them.
- Leaf splitters strip a suffix first (no-op today): registry by-name key
(indexed by the bare name for a suffixed callable), cbm_lsp_bare_segment,
cbm_pipeline_qn_class_method_tail, pxc_last_component, pxc_qn_leaf,
go_index_visit_node, collect_prod_defs, sg_qn_prefix_len.
- New unused fields: CBMDefinition.qn_sig_off, CBMResolvedCall.callee_sig
(relocated by result compaction), CBMRegisteredFunc.sig, CBMLSPDef.sig.
The lsp_surface codec is unchanged (no format bump in this change).
- get_code_snippet and trace_path gain base-QN tiers
(cbm_store_find_nodes_by_qn_base) that find nothing until suffixes exist.
- store: cbm_store_find_nodes_by_qn_suffix built its LIKE pattern in a
512-byte buffer (a long suffix was truncated into a pattern that matched
nothing) and did not escape '_'/'%' (`my_func` also matched `myXfunc`).
The pattern is now heap-built, escaped, and matched with ESCAPE '\'.
Proof: full sorted node+edge+lsp_surface dumps are byte-identical before
and after on 7 corpora (this repo, elasticsearch libs, Exposed, dotnet
System.Linq, System.Collections, coreclr/gc, a C corpus).
Refs #2061
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
91 lines
2.6 KiB
Plaintext
91 lines
2.6 KiB
Plaintext
# memory-core-baseline.txt -- raw allocator call sites per file.
|
|
# Generated by scripts/lint-memory-core.py --write-baseline.
|
|
# A file may only ever go DOWN. Lower a line in the same change that
|
|
# migrates the file to src/foundation/mem_core.h; never raise one.
|
|
|
|
internal/cbm/ac.c 20
|
|
internal/cbm/arena.c 3
|
|
internal/cbm/cbm.c 13
|
|
internal/cbm/extract_defs.c 4
|
|
internal/cbm/helpers.c 3
|
|
internal/cbm/lsp/c_lsp.c 4
|
|
internal/cbm/lsp/perl_lsp.c 21
|
|
internal/cbm/lsp/py_lsp.c 2
|
|
internal/cbm/macro_table.c 1
|
|
internal/cbm/service_patterns.c 2
|
|
internal/cbm/sqlite_writer.c 74
|
|
src/cli/activation_transaction.c 80
|
|
src/cli/agent_clients.c 73
|
|
src/cli/agent_profiles.c 7
|
|
src/cli/cli.c 170
|
|
src/cli/client_adapter.c 3
|
|
src/cli/config_edit_path.c 2
|
|
src/cli/config_json_like.c 142
|
|
src/cli/config_text_edit.c 72
|
|
src/cli/config_toml_edit.c 85
|
|
src/cli/config_yaml_edit.c 117
|
|
src/cli/hook_augment.c 31
|
|
src/cypher/cypher.c 132
|
|
src/daemon/application.c 107
|
|
src/daemon/bootstrap.c 13
|
|
src/daemon/daemon.c 31
|
|
src/daemon/frontend.c 12
|
|
src/daemon/ipc.c 146
|
|
src/daemon/project_lock.c 6
|
|
src/daemon/runtime.c 45
|
|
src/daemon/service.c 6
|
|
src/daemon/version_cohort.c 9
|
|
src/discover/discover.c 31
|
|
src/discover/gitignore.c 12
|
|
src/discover/userconfig.c 15
|
|
src/foundation/diagnostics.c 7
|
|
src/foundation/lock_registry.c 18
|
|
src/foundation/platform.c 11
|
|
src/foundation/platform.h 5
|
|
src/foundation/private_file_lock.c 56
|
|
src/foundation/str_intern.c 7
|
|
src/foundation/subprocess.c 24
|
|
src/foundation/win_utf8.h 17
|
|
src/foundation/workspace.c 3
|
|
src/foundation/yaml.c 10
|
|
src/git/git_context.c 18
|
|
src/main.c 32
|
|
src/mcp/compact_out.c 39
|
|
src/mcp/index_supervisor.c 8
|
|
src/mcp/mcp.c 778
|
|
src/pipeline/artifact.c 38
|
|
src/pipeline/fqn.c 23
|
|
src/pipeline/lsp_resolve.h 4
|
|
src/pipeline/lsp_surface.c 5
|
|
src/pipeline/pass_calls.c 22
|
|
src/pipeline/pass_compile_commands.c 17
|
|
src/pipeline/pass_complexity.c 15
|
|
src/pipeline/pass_configlink.c 3
|
|
src/pipeline/pass_cross_repo.c 8
|
|
src/pipeline/pass_definitions.c 14
|
|
src/pipeline/pass_enrichment.c 15
|
|
src/pipeline/pass_ensemble_routing.c 10
|
|
src/pipeline/pass_envscan.c 2
|
|
src/pipeline/pass_githistory.c 27
|
|
src/pipeline/pass_importance.c 4
|
|
src/pipeline/pass_infrascan.c 2
|
|
src/pipeline/pass_k8s.c 6
|
|
src/pipeline/pass_lsp_cross.c 50
|
|
src/pipeline/pass_parallel.c 31
|
|
src/pipeline/pass_pkgmap.c 82
|
|
src/pipeline/pass_semantic.c 3
|
|
src/pipeline/pass_tests.c 3
|
|
src/pipeline/pass_usages.c 4
|
|
src/pipeline/path_alias.c 42
|
|
src/pipeline/pipeline.c 134
|
|
src/pipeline/pipeline_delta.c 19
|
|
src/pipeline/pipeline_incremental.c 144
|
|
src/pipeline/registry.c 17
|
|
src/pipeline/worker_pool.c 2
|
|
src/store/store.c 358
|
|
src/ui/config.c 12
|
|
src/ui/http_server.c 31
|
|
src/ui/httpd.c 21
|
|
src/ui/layout3d.c 66
|
|
src/watcher/watcher.c 33
|