Commit a2998a1
fix(analyser): walk back scope.rs incompat filter to preserve runtime narrowing 🔄
The previous push pushed the incompat-Dynamic check from the analyser
down to scope.rs, returning Binding::None for calls where no overload's
params accepted the call's args. That works for trivially broken calls
(returns_int("…") etc.) but breaks code that relies on the static type
being wider than the runtime value — e.g. the common
`for line in lines { line = line.split(...); line.remove(0); }` shape,
where `line`'s static type widens to `Sequence<String>` via LUB even
though the runtime value is always a `List<String>`. The stricter
analyser dropped `remove(List, Int)` for being incompatible with
`Sequence<String>`, blocking valid runtime-dispatchable code (see
issue #143 for the underlying inference limitation).
Move the check back to the analyser's Dynamic-LUB path: candidates
still get filtered before contributing to the inferred return type
(so we don't synthesise a misleading concrete return for a doomed
call), but the candidate list flows through to the compiler/runtime
intact so runtime narrowing still has a chance to succeed.
Also reverts the `Map<Any, ()>` → `Map<Any, Any>` empty-value default
since it was tied to the same overly-strict story. The default-value
folding into `value_type` stays — strictly sound and orthogonal.
Test updates: bug0022 now expects "mismatched types: found Any but
expected String" (the call result widens to Any rather than blocking
the call); 013_002 substring reverted to the runtime-side wording.
Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>1 parent c21253e commit a2998a1
4 files changed
Lines changed: 75 additions & 58 deletions
File tree
- ndc_analyser/src
- tests/functional/programs
- 013_vector_math
- 900_bugs
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
| 4 | + | |
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
| |||
464 | 464 | | |
465 | 465 | | |
466 | 466 | | |
467 | | - | |
468 | | - | |
469 | | - | |
| 467 | + | |
| 468 | + | |
470 | 469 | | |
471 | 470 | | |
472 | 471 | | |
473 | 472 | | |
474 | 473 | | |
475 | 474 | | |
476 | | - | |
| 475 | + | |
477 | 476 | | |
478 | 477 | | |
479 | 478 | | |
| |||
542 | 541 | | |
543 | 542 | | |
544 | 543 | | |
545 | | - | |
546 | | - | |
547 | | - | |
548 | | - | |
549 | | - | |
550 | | - | |
551 | | - | |
552 | | - | |
553 | | - | |
554 | | - | |
| 544 | + | |
| 545 | + | |
| 546 | + | |
| 547 | + | |
| 548 | + | |
| 549 | + | |
| 550 | + | |
| 551 | + | |
| 552 | + | |
| 553 | + | |
| 554 | + | |
| 555 | + | |
555 | 556 | | |
556 | | - | |
557 | | - | |
558 | | - | |
| 557 | + | |
| 558 | + | |
| 559 | + | |
| 560 | + | |
| 561 | + | |
| 562 | + | |
| 563 | + | |
| 564 | + | |
| 565 | + | |
| 566 | + | |
559 | 567 | | |
560 | 568 | | |
561 | 569 | | |
| |||
934 | 942 | | |
935 | 943 | | |
936 | 944 | | |
| 945 | + | |
| 946 | + | |
| 947 | + | |
| 948 | + | |
| 949 | + | |
| 950 | + | |
| 951 | + | |
| 952 | + | |
| 953 | + | |
| 954 | + | |
| 955 | + | |
| 956 | + | |
| 957 | + | |
| 958 | + | |
| 959 | + | |
| 960 | + | |
| 961 | + | |
| 962 | + | |
| 963 | + | |
| 964 | + | |
| 965 | + | |
| 966 | + | |
| 967 | + | |
| 968 | + | |
| 969 | + | |
| 970 | + | |
| 971 | + | |
| 972 | + | |
| 973 | + | |
| 974 | + | |
| 975 | + | |
| 976 | + | |
| 977 | + | |
| 978 | + | |
| 979 | + | |
| 980 | + | |
| 981 | + | |
| 982 | + | |
937 | 983 | | |
938 | 984 | | |
939 | 985 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
12 | | - | |
| 12 | + | |
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
| |||
563 | 563 | | |
564 | 564 | | |
565 | 565 | | |
566 | | - | |
567 | | - | |
568 | | - | |
569 | | - | |
570 | | - | |
571 | | - | |
572 | | - | |
573 | | - | |
574 | | - | |
575 | | - | |
576 | | - | |
577 | | - | |
578 | | - | |
579 | | - | |
580 | | - | |
581 | | - | |
582 | | - | |
583 | | - | |
584 | | - | |
585 | | - | |
586 | | - | |
587 | | - | |
588 | | - | |
589 | | - | |
590 | | - | |
591 | | - | |
592 | | - | |
593 | | - | |
594 | | - | |
595 | | - | |
| 566 | + | |
| 567 | + | |
596 | 568 | | |
597 | 569 | | |
598 | 570 | | |
| |||
Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
| 1 | + | |
2 | 2 | | |
Lines changed: 7 additions & 8 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
| 1 | + | |
2 | 2 | | |
3 | | - | |
4 | | - | |
5 | | - | |
6 | | - | |
7 | | - | |
8 | | - | |
9 | | - | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
10 | 9 | | |
11 | 10 | | |
0 commit comments