Commit efe009e
committed
fix(ssa): autounbox values read from
Counterpart to the autobox-on-store fix in `1f438e8`. When user
code accesses a field whose declared type is `Type::Any` AND the
use-site has a concrete target type (let binding annotation,
function parameter, return statement, …), the field-load now
routes through the matching `zyntax_box_get_X` runtime helper so
the user gets the stored value back instead of the raw `*mut
DynamicBox` pointer.
Together with the autobox-on-store side this closes the round-trip
loop: `let bag = Bag { payload: 1.5 } ; let v: f64 = bag.payload`
now does the right thing — `Bag` literal boxes `1.5` via
`zyntax_box_f64`, field read uses `zyntax_box_get_f64` because the
let binding constrains the use-site type. Before this commit, the
read returned an i64 box pointer that the user would have to
manually unwrap, which was — to use the technical term — silly.
Runtime side: added the missing getter helpers
`zyntax_box_get_{i32,f32,f64,bool}` in `zrtl.rs` mirroring the
existing `_i64` shape. Sizes are read from the box's `size` field
so source values that were narrower than the requested type widen
losslessly (i8 → i32, f32 → f64 etc.).
Test: new `bench_any_field` kernel exercises 1M round-trips of
storing f64 1.5 through an `Any` field and reading back as f64,
sums them, and asserts `Int(1500000)`. The bench harness's value
gate catches any regression that would re-introduce silent
miscompiles.
Existing kernels unchanged — none use `Any` fields, so both the
autobox and autounbox helpers are no-ops for them.Type::Any struct fields1 parent 1f438e8 commit efe009e
4 files changed
Lines changed: 170 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4405 | 4405 | | |
4406 | 4406 | | |
4407 | 4407 | | |
4408 | | - | |
| 4408 | + | |
| 4409 | + | |
| 4410 | + | |
| 4411 | + | |
| 4412 | + | |
| 4413 | + | |
| 4414 | + | |
| 4415 | + | |
| 4416 | + | |
| 4417 | + | |
| 4418 | + | |
4409 | 4419 | | |
4410 | 4420 | | |
4411 | 4421 | | |
| |||
4510 | 4520 | | |
4511 | 4521 | | |
4512 | 4522 | | |
4513 | | - | |
| 4523 | + | |
| 4524 | + | |
| 4525 | + | |
| 4526 | + | |
| 4527 | + | |
| 4528 | + | |
| 4529 | + | |
| 4530 | + | |
| 4531 | + | |
4514 | 4532 | | |
4515 | 4533 | | |
4516 | 4534 | | |
| |||
7481 | 7499 | | |
7482 | 7500 | | |
7483 | 7501 | | |
| 7502 | + | |
| 7503 | + | |
| 7504 | + | |
| 7505 | + | |
| 7506 | + | |
| 7507 | + | |
| 7508 | + | |
| 7509 | + | |
| 7510 | + | |
| 7511 | + | |
| 7512 | + | |
| 7513 | + | |
| 7514 | + | |
| 7515 | + | |
| 7516 | + | |
| 7517 | + | |
| 7518 | + | |
| 7519 | + | |
| 7520 | + | |
| 7521 | + | |
| 7522 | + | |
| 7523 | + | |
| 7524 | + | |
| 7525 | + | |
| 7526 | + | |
| 7527 | + | |
| 7528 | + | |
| 7529 | + | |
| 7530 | + | |
| 7531 | + | |
| 7532 | + | |
| 7533 | + | |
| 7534 | + | |
| 7535 | + | |
| 7536 | + | |
| 7537 | + | |
| 7538 | + | |
| 7539 | + | |
| 7540 | + | |
| 7541 | + | |
| 7542 | + | |
| 7543 | + | |
| 7544 | + | |
| 7545 | + | |
| 7546 | + | |
| 7547 | + | |
| 7548 | + | |
| 7549 | + | |
| 7550 | + | |
| 7551 | + | |
| 7552 | + | |
| 7553 | + | |
| 7554 | + | |
| 7555 | + | |
| 7556 | + | |
| 7557 | + | |
| 7558 | + | |
| 7559 | + | |
| 7560 | + | |
| 7561 | + | |
| 7562 | + | |
| 7563 | + | |
7484 | 7564 | | |
7485 | 7565 | | |
7486 | 7566 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1587 | 1587 | | |
1588 | 1588 | | |
1589 | 1589 | | |
| 1590 | + | |
| 1591 | + | |
| 1592 | + | |
| 1593 | + | |
| 1594 | + | |
| 1595 | + | |
| 1596 | + | |
| 1597 | + | |
| 1598 | + | |
| 1599 | + | |
| 1600 | + | |
| 1601 | + | |
| 1602 | + | |
| 1603 | + | |
| 1604 | + | |
| 1605 | + | |
| 1606 | + | |
| 1607 | + | |
| 1608 | + | |
| 1609 | + | |
| 1610 | + | |
| 1611 | + | |
| 1612 | + | |
| 1613 | + | |
| 1614 | + | |
| 1615 | + | |
| 1616 | + | |
| 1617 | + | |
| 1618 | + | |
| 1619 | + | |
| 1620 | + | |
| 1621 | + | |
| 1622 | + | |
| 1623 | + | |
| 1624 | + | |
| 1625 | + | |
| 1626 | + | |
| 1627 | + | |
| 1628 | + | |
| 1629 | + | |
| 1630 | + | |
| 1631 | + | |
| 1632 | + | |
| 1633 | + | |
| 1634 | + | |
| 1635 | + | |
| 1636 | + | |
| 1637 | + | |
| 1638 | + | |
| 1639 | + | |
| 1640 | + | |
| 1641 | + | |
| 1642 | + | |
| 1643 | + | |
| 1644 | + | |
| 1645 | + | |
| 1646 | + | |
| 1647 | + | |
1590 | 1648 | | |
1591 | 1649 | | |
1592 | 1650 | | |
| |||
| 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 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
196 | 196 | | |
197 | 197 | | |
198 | 198 | | |
| 199 | + | |
199 | 200 | | |
200 | 201 | | |
201 | 202 | | |
| |||
0 commit comments