Repository navigation
Commit 3764732
committed
fix(emacs-core): type byte-code structural keys
GNU Emacs compares PVEC_CLOSURE objects element-wise and requires structurally equal closures to produce the same sxhash. The PR's shared structural view established that contract, but its equal-table projection encoded an absent field as the ordinary text key #<absent>. A byte-code object with a present Lisp string of that value therefore aliased an unequal object whose environment was absent.
Represent byte-code table keys as a dedicated HashKey::ByteCode containing domain-tagged ByteCodeKeyPart values. Preserve observable shape, Lisp values, retained bytes, decoded operations, constant vectors, GNU string contents, and absence as distinct enum variants, and teach the pdump conversion and object codec to round-trip that typed representation.
Replace the allocating structural Vec with an ExactSizeIterator over a fixed array plus extra slots. Derive Eq and Hash for decoded Op values so sxhash no longer allocates a debug-formatted string, and keep observable closure shape in the same structural evidence stream consumed by equality, sxhash, and equal-table keys.
Add a red-first regression proving absent state cannot collide with Lisp-reachable sentinel text, correct the tests to honor the one-way sxhash contract instead of demanding distinct hashes for unequal values, and add a GNU 31.0.90 differential oracle covering byte-code objects, make-closure, equal tables, and delete.
Verified with release-mode neovm-core checks, seven focused release tests including pdump codec round-trip, and the live release differential oracle against the pinned GNU Emacs 31.0.90 binary.1 parent dab1bf0 commit 3764732
10 files changed
Lines changed: 480 additions & 118 deletions
File tree
- crates
- neovm-core/src/emacs_core/runtime
- bytecode
- hashtab
- pdump
- value
- tests
- neovm-oracle-tests/src/equality
Lines changed: 77 additions & 39 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
122 | 122 | | |
123 | 123 | | |
124 | 124 | | |
125 | | - | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
126 | 132 | | |
127 | | - | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
128 | 137 | | |
129 | 138 | | |
130 | 139 | | |
| |||
135 | 144 | | |
136 | 145 | | |
137 | 146 | | |
138 | | - | |
| 147 | + | |
139 | 148 | | |
140 | 149 | | |
141 | 150 | | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
142 | 178 | | |
143 | 179 | | |
144 | 180 | | |
| |||
634 | 670 | | |
635 | 671 | | |
636 | 672 | | |
637 | | - | |
638 | | - | |
639 | | - | |
| 673 | + | |
| 674 | + | |
| 675 | + | |
640 | 676 | | |
641 | 677 | | |
642 | 678 | | |
| |||
645 | 681 | | |
646 | 682 | | |
647 | 683 | | |
648 | | - | |
649 | | - | |
650 | | - | |
651 | | - | |
652 | | - | |
653 | | - | |
654 | | - | |
655 | | - | |
656 | | - | |
657 | | - | |
| 684 | + | |
| 685 | + | |
| 686 | + | |
| 687 | + | |
| 688 | + | |
| 689 | + | |
| 690 | + | |
| 691 | + | |
| 692 | + | |
| 693 | + | |
| 694 | + | |
658 | 695 | | |
659 | 696 | | |
660 | 697 | | |
661 | 698 | | |
662 | 699 | | |
663 | 700 | | |
664 | 701 | | |
665 | | - | |
666 | | - | |
667 | | - | |
668 | | - | |
669 | | - | |
670 | | - | |
671 | | - | |
672 | | - | |
673 | | - | |
674 | | - | |
675 | | - | |
676 | | - | |
677 | | - | |
678 | | - | |
679 | | - | |
680 | | - | |
681 | | - | |
682 | | - | |
683 | | - | |
684 | | - | |
685 | | - | |
686 | | - | |
687 | | - | |
| 702 | + | |
| 703 | + | |
| 704 | + | |
| 705 | + | |
| 706 | + | |
| 707 | + | |
| 708 | + | |
| 709 | + | |
| 710 | + | |
| 711 | + | |
| 712 | + | |
| 713 | + | |
| 714 | + | |
| 715 | + | |
| 716 | + | |
| 717 | + | |
| 718 | + | |
| 719 | + | |
| 720 | + | |
| 721 | + | |
| 722 | + | |
| 723 | + | |
| 724 | + | |
| 725 | + | |
688 | 726 | | |
689 | 727 | | |
690 | 728 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
16 | | - | |
| 16 | + | |
17 | 17 | | |
18 | 18 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
10 | | - | |
| 10 | + | |
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
73 | 73 | | |
74 | 74 | | |
75 | 75 | | |
| 76 | + | |
76 | 77 | | |
77 | 78 | | |
78 | 79 | | |
| |||
251 | 252 | | |
252 | 253 | | |
253 | 254 | | |
254 | | - | |
| 255 | + | |
255 | 256 | | |
256 | 257 | | |
257 | 258 | | |
258 | 259 | | |
259 | 260 | | |
260 | | - | |
| 261 | + | |
261 | 262 | | |
262 | | - | |
263 | | - | |
264 | | - | |
265 | | - | |
266 | | - | |
267 | | - | |
268 | | - | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
269 | 281 | | |
270 | 282 | | |
271 | 283 | | |
| |||
277 | 289 | | |
278 | 290 | | |
279 | 291 | | |
280 | | - | |
281 | | - | |
| 292 | + | |
| 293 | + | |
282 | 294 | | |
283 | | - | |
| 295 | + | |
284 | 296 | | |
285 | 297 | | |
286 | 298 | | |
| |||
Lines changed: 103 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
51 | 51 | | |
52 | 52 | | |
53 | 53 | | |
54 | | - | |
55 | | - | |
| 54 | + | |
| 55 | + | |
56 | 56 | | |
57 | 57 | | |
58 | 58 | | |
| |||
3046 | 3046 | | |
3047 | 3047 | | |
3048 | 3048 | | |
| 3049 | + | |
| 3050 | + | |
| 3051 | + | |
| 3052 | + | |
| 3053 | + | |
| 3054 | + | |
3049 | 3055 | | |
3050 | 3056 | | |
3051 | 3057 | | |
| |||
3066 | 3072 | | |
3067 | 3073 | | |
3068 | 3074 | | |
| 3075 | + | |
| 3076 | + | |
| 3077 | + | |
| 3078 | + | |
| 3079 | + | |
| 3080 | + | |
| 3081 | + | |
| 3082 | + | |
| 3083 | + | |
| 3084 | + | |
| 3085 | + | |
| 3086 | + | |
| 3087 | + | |
| 3088 | + | |
| 3089 | + | |
| 3090 | + | |
| 3091 | + | |
| 3092 | + | |
| 3093 | + | |
| 3094 | + | |
| 3095 | + | |
| 3096 | + | |
| 3097 | + | |
| 3098 | + | |
| 3099 | + | |
3069 | 3100 | | |
3070 | 3101 | | |
3071 | 3102 | | |
| |||
4701 | 4732 | | |
4702 | 4733 | | |
4703 | 4734 | | |
| 4735 | + | |
| 4736 | + | |
| 4737 | + | |
| 4738 | + | |
| 4739 | + | |
| 4740 | + | |
| 4741 | + | |
4704 | 4742 | | |
4705 | 4743 | | |
4706 | 4744 | | |
| |||
4725 | 4763 | | |
4726 | 4764 | | |
4727 | 4765 | | |
| 4766 | + | |
| 4767 | + | |
| 4768 | + | |
| 4769 | + | |
| 4770 | + | |
| 4771 | + | |
| 4772 | + | |
| 4773 | + | |
| 4774 | + | |
| 4775 | + | |
| 4776 | + | |
| 4777 | + | |
| 4778 | + | |
| 4779 | + | |
| 4780 | + | |
| 4781 | + | |
| 4782 | + | |
| 4783 | + | |
| 4784 | + | |
| 4785 | + | |
| 4786 | + | |
| 4787 | + | |
| 4788 | + | |
| 4789 | + | |
| 4790 | + | |
| 4791 | + | |
| 4792 | + | |
| 4793 | + | |
4728 | 4794 | | |
4729 | 4795 | | |
4730 | 4796 | | |
| |||
4755 | 4821 | | |
4756 | 4822 | | |
4757 | 4823 | | |
| 4824 | + | |
| 4825 | + | |
| 4826 | + | |
| 4827 | + | |
| 4828 | + | |
| 4829 | + | |
| 4830 | + | |
4758 | 4831 | | |
4759 | 4832 | | |
4760 | 4833 | | |
| |||
4779 | 4852 | | |
4780 | 4853 | | |
4781 | 4854 | | |
| 4855 | + | |
| 4856 | + | |
| 4857 | + | |
| 4858 | + | |
| 4859 | + | |
| 4860 | + | |
| 4861 | + | |
| 4862 | + | |
| 4863 | + | |
| 4864 | + | |
| 4865 | + | |
| 4866 | + | |
| 4867 | + | |
| 4868 | + | |
| 4869 | + | |
| 4870 | + | |
| 4871 | + | |
| 4872 | + | |
| 4873 | + | |
| 4874 | + | |
| 4875 | + | |
| 4876 | + | |
| 4877 | + | |
| 4878 | + | |
| 4879 | + | |
| 4880 | + | |
| 4881 | + | |
| 4882 | + | |
4782 | 4883 | | |
4783 | 4884 | | |
4784 | 4885 | | |
| |||
0 commit comments