julia
775aed7c - inference: Respect function-level `@max_methods` (#63420)

Commit
29 days ago
inference: Respect function-level `@max_methods` (#63420) * inference: respect function-level `@max_methods` for splatted and keyword calls A function-level `@max_methods` setting (`typeof(f).name.max_methods`) was only consulted when `f` itself was the head of the call. Splatted calls go through `Core._apply_iterate`, and `abstract_apply` forwarded the value resolved for `_apply_iterate` (the module or global default) to the callee as an explicit override. Keyword calls go through `Core.kwcall`, whose own setting was used instead of `f`'s. So `f(x)`, `f(x...)` and `f(x; k)` could infer differently for the same argument types, in either direction. `abstract_apply` no longer takes or forwards a `max_methods` value and lets `abstract_call` resolve it for each splatted callee, and that resolution now looks through `Core.kwcall` to the function it calls. In Base, the only inference results this changes are `print` splats in `printstyled` and stacktrace printing, whose return values are unused. Assisted-by: Claude Code (Opus 5.5) --- * inference: respect function-level `@max_methods` in `applicable` resolve `max_methods` for the signature `applicable` looks up, like `abstract_apply` does, so `applicable(f, x...; kw...)` uses `f`'s setting Assisted-by: Claude Code (Opus 5.5)
Author
Parents
Loading