Commit 557325f
Remove Int.Ref and the %incr, %decr and %refget builtins
None of these were designed for ReScript. %incr, %decr and %refget arrived
with OCaml's Pervasives in the 2016 initial export and were carried unexamined
through every stdlib reshuffle since. Int.Ref itself was created in April 2025
(#7371) not because anyone wanted it, but as somewhere for the Pervasives.incr
deprecation to point; the primitives it wrapped were removed for v13 two weeks
ago. Outside this repository, GitHub code search finds no user of either the
externals or the API.
What the primitive bought was unboxing: expanding at the call site kept the
field write syntactically visible, so Lam_pass_eliminate_ref could still turn
a local ref into a mutable variable. A call through an ordinary function
cannot - the reference appears as a bare Lvar and the pass gives up. That is
not special to increment. Its body is six nodes against a small_inline_size of
five, and cross-module inlining is off, so the inliner cannot reach it.
Writing the update directly does keep the unboxing, and is shorter than the
call it replaces:
Int.Ref.increment(v) -> v.contents = v.contents + 1
53 call sites across 30 test files change that way, and their generated
JavaScript is byte-identical. Only two outputs move: Stdlib_Int loses an empty
Ref object and its export, and test_incr_ref loses onExpression - added to pin
that the primitive bound its argument before mentioning it twice, which has
nothing left to test now that no expansion happens.
Lambda.offset_ref and the Offset_ref builtin go with them. Nothing in lambda.ml
now builds a term outside the constructors and the traversals.
Int.Ref.t went too. It was a type alias for ref<int> introduced alongside the
two functions, and with them gone the module held nothing else.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W8g8qwBARAcvW9MyuKQq8H1 parent 67cbb86 commit 557325f
39 files changed
Lines changed: 54 additions & 153 deletions
File tree
- compiler/ml
- packages/@rescript/runtime
- lib
- es6
- js
- tests
- belt_tests/src
- tests/src
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
22 | 22 | | |
23 | 23 | | |
24 | 24 | | |
| 25 | + | |
25 | 26 | | |
26 | 27 | | |
27 | 28 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
351 | 351 | | |
352 | 352 | | |
353 | 353 | | |
354 | | - | |
355 | | - | |
356 | | - | |
357 | 354 | | |
358 | 355 | | |
359 | 356 | | |
| |||
490 | 487 | | |
491 | 488 | | |
492 | 489 | | |
493 | | - | |
494 | | - | |
495 | | - | |
496 | | - | |
497 | | - | |
498 | | - | |
499 | | - | |
500 | | - | |
501 | | - | |
502 | | - | |
503 | | - | |
504 | | - | |
505 | | - | |
506 | | - | |
507 | | - | |
508 | | - | |
509 | | - | |
510 | | - | |
511 | | - | |
512 | | - | |
513 | | - | |
514 | | - | |
515 | | - | |
516 | | - | |
517 | | - | |
518 | | - | |
519 | | - | |
520 | | - | |
521 | | - | |
522 | 490 | | |
523 | 491 | | |
524 | 492 | | |
| |||
1269 | 1237 | | |
1270 | 1238 | | |
1271 | 1239 | | |
1272 | | - | |
1273 | | - | |
1274 | | - | |
1275 | | - | |
1276 | 1240 | | |
1277 | 1241 | | |
1278 | 1242 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
321 | 321 | | |
322 | 322 | | |
323 | 323 | | |
324 | | - | |
325 | | - | |
326 | | - | |
327 | 324 | | |
328 | 325 | | |
329 | 326 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
252 | 252 | | |
253 | 253 | | |
254 | 254 | | |
255 | | - | |
256 | | - | |
257 | 255 | | |
258 | 256 | | |
259 | 257 | | |
| |||
268 | 266 | | |
269 | 267 | | |
270 | 268 | | |
271 | | - | |
272 | 269 | | |
273 | 270 | | |
274 | 271 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
127 | 127 | | |
128 | 128 | | |
129 | 129 | | |
130 | | - | |
131 | | - | |
132 | | - | |
133 | | - | |
134 | | - | |
135 | | - | |
136 | | - | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
520 | 520 | | |
521 | 521 | | |
522 | 522 | | |
523 | | - | |
524 | | - | |
525 | | - | |
526 | | - | |
527 | | - | |
528 | | - | |
529 | | - | |
530 | | - | |
531 | | - | |
532 | | - | |
533 | | - | |
534 | | - | |
535 | | - | |
536 | | - | |
537 | | - | |
538 | | - | |
539 | | - | |
540 | | - | |
541 | | - | |
542 | | - | |
543 | | - | |
544 | | - | |
545 | | - | |
546 | | - | |
547 | | - | |
548 | | - | |
549 | | - | |
550 | | - | |
551 | | - | |
552 | | - | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
75 | 75 | | |
76 | 76 | | |
77 | 77 | | |
78 | | - | |
79 | | - | |
80 | 78 | | |
81 | 79 | | |
82 | 80 | | |
| |||
89 | 87 | | |
90 | 88 | | |
91 | 89 | | |
92 | | - | |
93 | 90 | | |
94 | 91 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
75 | 75 | | |
76 | 76 | | |
77 | 77 | | |
78 | | - | |
79 | | - | |
80 | 78 | | |
81 | 79 | | |
82 | 80 | | |
| |||
88 | 86 | | |
89 | 87 | | |
90 | 88 | | |
91 | | - | |
92 | 89 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
116 | 116 | | |
117 | 117 | | |
118 | 118 | | |
119 | | - | |
| 119 | + | |
120 | 120 | | |
121 | 121 | | |
122 | 122 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
16 | | - | |
| 16 | + | |
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
| |||
0 commit comments