Commit f73ca40
committed
ZJIT: Use dedicated ArraySplice HIR instruction for splice safety
Replace bare CCall to rb_jit_ary_aset_by_rb_ary_splice with a dedicated
ArraySplice instruction that carries frame state, following the
HashAset/ArrayPop pattern. Codegen uses gen_prepare_non_leaf_call to
save PC/SP and spill locals before the C call, ensuring correct GC and
exception handling.
Also add tests for IndexError (negative length, out-of-bounds index) and
single-value splice (exercises rb_ary_to_ary allocation path).1 parent ea4d991 commit f73ca40
File tree
5 files changed
+77
-10
lines changed- zjit/src
- hir
5 files changed
+77
-10
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
480 | 480 | | |
481 | 481 | | |
482 | 482 | | |
| 483 | + | |
| 484 | + | |
| 485 | + | |
483 | 486 | | |
484 | 487 | | |
485 | 488 | | |
| |||
1712 | 1715 | | |
1713 | 1716 | | |
1714 | 1717 | | |
| 1718 | + | |
| 1719 | + | |
| 1720 | + | |
| 1721 | + | |
| 1722 | + | |
1715 | 1723 | | |
1716 | 1724 | | |
1717 | 1725 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2847 | 2847 | | |
2848 | 2848 | | |
2849 | 2849 | | |
| 2850 | + | |
| 2851 | + | |
| 2852 | + | |
| 2853 | + | |
| 2854 | + | |
| 2855 | + | |
| 2856 | + | |
| 2857 | + | |
| 2858 | + | |
| 2859 | + | |
| 2860 | + | |
| 2861 | + | |
| 2862 | + | |
| 2863 | + | |
| 2864 | + | |
| 2865 | + | |
| 2866 | + | |
| 2867 | + | |
| 2868 | + | |
| 2869 | + | |
| 2870 | + | |
| 2871 | + | |
| 2872 | + | |
| 2873 | + | |
| 2874 | + | |
| 2875 | + | |
| 2876 | + | |
| 2877 | + | |
| 2878 | + | |
| 2879 | + | |
| 2880 | + | |
| 2881 | + | |
| 2882 | + | |
| 2883 | + | |
| 2884 | + | |
| 2885 | + | |
| 2886 | + | |
| 2887 | + | |
| 2888 | + | |
| 2889 | + | |
| 2890 | + | |
| 2891 | + | |
| 2892 | + | |
2850 | 2893 | | |
2851 | 2894 | | |
2852 | 2895 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
392 | 392 | | |
393 | 393 | | |
394 | 394 | | |
395 | | - | |
396 | | - | |
397 | | - | |
398 | | - | |
399 | | - | |
400 | | - | |
401 | | - | |
| 395 | + | |
| 396 | + | |
402 | 397 | | |
403 | 398 | | |
404 | 399 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
777 | 777 | | |
778 | 778 | | |
779 | 779 | | |
| 780 | + | |
| 781 | + | |
780 | 782 | | |
781 | 783 | | |
782 | 784 | | |
| |||
1070 | 1072 | | |
1071 | 1073 | | |
1072 | 1074 | | |
1073 | | - | |
| 1075 | + | |
1074 | 1076 | | |
1075 | 1077 | | |
1076 | 1078 | | |
| |||
1137 | 1139 | | |
1138 | 1140 | | |
1139 | 1141 | | |
| 1142 | + | |
1140 | 1143 | | |
1141 | 1144 | | |
1142 | 1145 | | |
| |||
1347 | 1350 | | |
1348 | 1351 | | |
1349 | 1352 | | |
| 1353 | + | |
| 1354 | + | |
| 1355 | + | |
1350 | 1356 | | |
1351 | 1357 | | |
1352 | 1358 | | |
| |||
2386 | 2392 | | |
2387 | 2393 | | |
2388 | 2394 | | |
| 2395 | + | |
2389 | 2396 | | |
2390 | 2397 | | |
2391 | 2398 | | |
| |||
2460 | 2467 | | |
2461 | 2468 | | |
2462 | 2469 | | |
2463 | | - | |
| 2470 | + | |
| 2471 | + | |
2464 | 2472 | | |
2465 | 2473 | | |
2466 | 2474 | | |
| |||
4802 | 4810 | | |
4803 | 4811 | | |
4804 | 4812 | | |
| 4813 | + | |
| 4814 | + | |
| 4815 | + | |
| 4816 | + | |
| 4817 | + | |
| 4818 | + | |
| 4819 | + | |
4805 | 4820 | | |
4806 | 4821 | | |
4807 | 4822 | | |
| |||
5619 | 5634 | | |
5620 | 5635 | | |
5621 | 5636 | | |
| 5637 | + | |
| 5638 | + | |
| 5639 | + | |
| 5640 | + | |
| 5641 | + | |
| 5642 | + | |
5622 | 5643 | | |
5623 | 5644 | | |
5624 | 5645 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8421 | 8421 | | |
8422 | 8422 | | |
8423 | 8423 | | |
8424 | | - | |
| 8424 | + | |
8425 | 8425 | | |
8426 | 8426 | | |
8427 | 8427 | | |
| |||
0 commit comments