Commit 0fab4be
rsscript: module free call lowers by value, not borrow
A bare lowercase `m.fn(args)` parses as a ReceiverCall, but a module
free function has no receiver to borrow. module_isolation wrapped the
converted call in an Expr::Effect using the receiver-call's effect, which
defaults to Read for a bare call -> the result lowered to `&(m__fn(..))`.
rustc rejected this (E0308, expected `T` found `&T`) but only at `rss
run`; `rss check` missed it, so de-prefixed modules (divmod/linearizer/
expander) silently broke execution.
Fix: make ReceiverCall.effect an Option<DataEffect> (None = bare call,
Some = explicit `read`/`mut`). A bare module call now collapses to the
plain by-value free call; only an explicit `read m.fn()` re-applies the
effect (`read (m__fn())`). Consumers treat None as the default Read
receiver borrow.
Regression test: value_position_module_call_lowers_by_value_not_borrow.
Full suite green (lib 118 / frontend 199 / lowering 225 / ...).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>1 parent f4136c1 commit 0fab4be
14 files changed
Lines changed: 88 additions & 36 deletions
File tree
- crates/rsscript
- src
- checks
- package
- rust_lower
- syntax
- tests/checker_lowering
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6250 | 6250 | | |
6251 | 6251 | | |
6252 | 6252 | | |
6253 | | - | |
| 6253 | + | |
6254 | 6254 | | |
6255 | 6255 | | |
6256 | 6256 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3355 | 3355 | | |
3356 | 3356 | | |
3357 | 3357 | | |
3358 | | - | |
| 3358 | + | |
3359 | 3359 | | |
3360 | 3360 | | |
3361 | 3361 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1993 | 1993 | | |
1994 | 1994 | | |
1995 | 1995 | | |
1996 | | - | |
| 1996 | + | |
1997 | 1997 | | |
1998 | 1998 | | |
1999 | 1999 | | |
2000 | 2000 | | |
2001 | 2001 | | |
2002 | | - | |
| 2002 | + | |
2003 | 2003 | | |
2004 | 2004 | | |
2005 | 2005 | | |
| |||
4509 | 4509 | | |
4510 | 4510 | | |
4511 | 4511 | | |
4512 | | - | |
| 4512 | + | |
4513 | 4513 | | |
4514 | 4514 | | |
4515 | 4515 | | |
| |||
4533 | 4533 | | |
4534 | 4534 | | |
4535 | 4535 | | |
4536 | | - | |
| 4536 | + | |
4537 | 4537 | | |
4538 | 4538 | | |
4539 | 4539 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1441 | 1441 | | |
1442 | 1442 | | |
1443 | 1443 | | |
1444 | | - | |
| 1444 | + | |
1445 | 1445 | | |
1446 | 1446 | | |
1447 | 1447 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
987 | 987 | | |
988 | 988 | | |
989 | 989 | | |
990 | | - | |
991 | | - | |
| 990 | + | |
| 991 | + | |
992 | 992 | | |
993 | 993 | | |
994 | 994 | | |
| |||
1209 | 1209 | | |
1210 | 1210 | | |
1211 | 1211 | | |
1212 | | - | |
| 1212 | + | |
1213 | 1213 | | |
1214 | 1214 | | |
1215 | | - | |
| 1215 | + | |
1216 | 1216 | | |
1217 | 1217 | | |
1218 | 1218 | | |
| |||
1233 | 1233 | | |
1234 | 1234 | | |
1235 | 1235 | | |
1236 | | - | |
| 1236 | + | |
1237 | 1237 | | |
1238 | 1238 | | |
1239 | 1239 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1862 | 1862 | | |
1863 | 1863 | | |
1864 | 1864 | | |
1865 | | - | |
| 1865 | + | |
1866 | 1866 | | |
1867 | 1867 | | |
1868 | 1868 | | |
| |||
3384 | 3384 | | |
3385 | 3385 | | |
3386 | 3386 | | |
3387 | | - | |
| 3387 | + | |
3388 | 3388 | | |
3389 | 3389 | | |
3390 | 3390 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1821 | 1821 | | |
1822 | 1822 | | |
1823 | 1823 | | |
1824 | | - | |
| 1824 | + | |
1825 | 1825 | | |
1826 | 1826 | | |
1827 | 1827 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1451 | 1451 | | |
1452 | 1452 | | |
1453 | 1453 | | |
1454 | | - | |
| 1454 | + | |
1455 | 1455 | | |
1456 | 1456 | | |
1457 | 1457 | | |
1458 | | - | |
| 1458 | + | |
1459 | 1459 | | |
1460 | 1460 | | |
1461 | 1461 | | |
1462 | 1462 | | |
1463 | 1463 | | |
1464 | 1464 | | |
1465 | 1465 | | |
1466 | | - | |
| 1466 | + | |
1467 | 1467 | | |
1468 | | - | |
| 1468 | + | |
1469 | 1469 | | |
1470 | 1470 | | |
1471 | 1471 | | |
| |||
2443 | 2443 | | |
2444 | 2444 | | |
2445 | 2445 | | |
2446 | | - | |
| 2446 | + | |
2447 | 2447 | | |
2448 | 2448 | | |
2449 | 2449 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
812 | 812 | | |
813 | 813 | | |
814 | 814 | | |
815 | | - | |
| 815 | + | |
816 | 816 | | |
817 | 817 | | |
818 | 818 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2650 | 2650 | | |
2651 | 2651 | | |
2652 | 2652 | | |
2653 | | - | |
| 2653 | + | |
2654 | 2654 | | |
2655 | 2655 | | |
2656 | 2656 | | |
| |||
3420 | 3420 | | |
3421 | 3421 | | |
3422 | 3422 | | |
3423 | | - | |
| 3423 | + | |
3424 | 3424 | | |
3425 | 3425 | | |
3426 | 3426 | | |
| |||
0 commit comments