Commit b930a85
committed
Skip overload resolution when splat arguments have uninformative element types
The previous fix (ae9dccc) skips overload resolution when positional
arguments have no type information. However, splat arguments bypass
this check because the positional vertex holds Array types (non-empty)
while the array *element* vertex may be empty or conflicting.
This causes oscillation: get_rest_args flattens element vertices from
all Array types into a single list, and the universal typecheck in
match_arguments? fails when elements from different array sources
conflict (e.g. Integer from [42] vs String from [@x]). The cycle is:
empty elements -> all overloads match -> types flow -> conflicting
elements -> no overload matches -> types removed -> empty again.
Extend the uninformative-args check to also inspect element vertices
of splatted Array types. When any element vertex is empty, skip
overload resolution and set up dependency edges, consistent with the
existing positional-args fix.1 parent c1f0dbe commit b930a85
3 files changed
Lines changed: 61 additions & 1 deletion
File tree
- lib/typeprof/core/graph
- scenario/regressions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
259 | 259 | | |
260 | 260 | | |
261 | 261 | | |
262 | | - | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
263 | 283 | | |
264 | 284 | | |
265 | 285 | | |
| |||
Lines changed: 19 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
0 commit comments