d63ba9f66d
Per-case-verified callable-sourcing fixes (AST-confirmed via a standalone dumper).
PRODUCTION BUGS:
- Clojure/Scheme/Racket: [CBM_LANG_*] had empty function_node_types, so no
SCOPE_FUNC was pushed and every in-body call sourced to Module. Wire
clojure_func_types={"list_lit"}, scheme/racket={"list"}. Since these kinds also
match plain call forms, gate def-vs-call in compute_func_qn (extract_unified.c,
which has ctx->source; the shared resolver does not): compute_lisp_func_qn
returns the def name only when the list head is a def-form (defn/define/...),
NULL otherwise, so non-def lists like (add x 1) push no scope.
- Elixir: def/defp/defmacro are `call` nodes (so are in-body calls); the shared
resolver returned NULL for them. compute_elixir_func_qn names a def call (gated
strictly on the def-macro target) and returns NULL for non-def calls.
BROKEN FIXTURE (production correct) -- Starlark: extraction works; the in-body
go_binary(...) callee is an EXTERNAL undefined rule, so it correctly yields no
CALLS edge (unresolved callee -> no edge, universal behavior). Added a same-file
_base_deps() def called inside make_binary's body for a resolvable in-body call
-> Function-sourced edge. go_binary(...) kept (dim-6 callee assertion preserved).
Reproduced by repro_grammar_{functional,scripting,config} (Clojure/Scheme/Racket/
Elixir/Starlark callable-sourcing were RED). AWK (rule-naming) + Dart (structural)
deferred to focused tasks.
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>