Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Overload lookup is changed to match the old compiler: Callee symbols no longer use
FindAll
, they use a new lookup modeFindOverloads
, which only considers overloads of unambiguous symbols if they are overloadable.InnerMost
always returns a symbol if it is unambiguous, even if it is overloadable. (beforeInnerMost
behaved likeFindOverloads
)This means callee symbols prefer local unambiguous symbols to outer overloads. To deal with this when the local symbols are not procs (i.e.
let len = arr.len
), in the case where the callee symbol is not callable, all overloads are considered.For this to work, symchoice callees now ignore non-callable symbols and give an error if none of the choices were callable (the previous error would have been "undeclared identifier").
This also means when local unoverloadable symbols do have proc types, they are matched directly and outer overloads are not considered, which is also the behavior of the old compiler (local types are the same):
But it's open how this should behave. nim-lang/Nim#24357
Also
when
where no branch is evaluated is fixed to produce avoid
type instead ofauto
.