Commit ff3511e
ffonion
fix(vm): lower string ordered comparisons with lexicographic parity
Compiler-allowed string <, >, <=, >= currently reach the VM as Clt/Cgt
opcodes, but both the std interpreter and the no-std runtime route them
through numeric comparison and fail with TypeMismatch("number") on
string operands, while Ceq already had a string-string fast path.
Add a STRING_STRING operand-type-hint arm to the std Clt/Cgt handlers
backed by a new string_compare_op that applies Rust str lexicographic
ordering, and mirror it in pd-vm-nostd by replacing the numeric-only
numeric_compare with a compare helper that dispatches string-string to
str ordering and keeps int/float numeric semantics otherwise. Mixed
string/number ordering stays a typed TypeMismatch error in both runtimes.
Trace JIT and AOT cannot specialize string Clt/Cgt, so they defer to the
interpreter (trace abandonment / whole-program AOT refusal); the new JIT
tests pin that this produces the exact same result as a pure interpreter
run, i.e. no semantic divergence on the JIT path.
Tests: std compiler string ordering runtime cases (equality, empty,
ASCII prefix, non-ASCII UTF-8, <= >=), mixed-type rejection in both VMs,
no-std lexicographic parity via VMBC decode, trace-JIT fallback parity
and AOT defer-to-interpreter parity.1 parent d20d614 commit ff3511e
5 files changed
Lines changed: 329 additions & 11 deletions
File tree
- pd-vm-nostd
- src
- tests
- src/vm
- tests
- compiler
- jit
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
475 | 475 | | |
476 | 476 | | |
477 | 477 | | |
478 | | - | |
479 | | - | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
| 484 | + | |
| 485 | + | |
| 486 | + | |
| 487 | + | |
480 | 488 | | |
481 | 489 | | |
482 | 490 | | |
| |||
968 | 976 | | |
969 | 977 | | |
970 | 978 | | |
971 | | - | |
| 979 | + | |
972 | 980 | | |
973 | 981 | | |
974 | 982 | | |
| 983 | + | |
975 | 984 | | |
976 | | - | |
977 | | - | |
978 | | - | |
979 | | - | |
980 | | - | |
981 | | - | |
982 | | - | |
983 | | - | |
| 985 | + | |
| 986 | + | |
| 987 | + | |
| 988 | + | |
| 989 | + | |
| 990 | + | |
| 991 | + | |
| 992 | + | |
| 993 | + | |
| 994 | + | |
| 995 | + | |
| 996 | + | |
| 997 | + | |
| 998 | + | |
| 999 | + | |
| 1000 | + | |
| 1001 | + | |
| 1002 | + | |
| 1003 | + | |
984 | 1004 | | |
985 | 1005 | | |
986 | 1006 | | |
| |||
1080 | 1100 | | |
1081 | 1101 | | |
1082 | 1102 | | |
| 1103 | + | |
| 1104 | + | |
| 1105 | + | |
| 1106 | + | |
| 1107 | + | |
| 1108 | + | |
| 1109 | + | |
| 1110 | + | |
1083 | 1111 | | |
1084 | 1112 | | |
1085 | 1113 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
363 | 363 | | |
364 | 364 | | |
365 | 365 | | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
| 386 | + | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
| 394 | + | |
| 395 | + | |
| 396 | + | |
| 397 | + | |
| 398 | + | |
| 399 | + | |
| 400 | + | |
| 401 | + | |
| 402 | + | |
| 403 | + | |
| 404 | + | |
| 405 | + | |
| 406 | + | |
| 407 | + | |
| 408 | + | |
| 409 | + | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
| 414 | + | |
| 415 | + | |
| 416 | + | |
| 417 | + | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| 422 | + | |
| 423 | + | |
| 424 | + | |
| 425 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2780 | 2780 | | |
2781 | 2781 | | |
2782 | 2782 | | |
| 2783 | + | |
| 2784 | + | |
| 2785 | + | |
| 2786 | + | |
| 2787 | + | |
| 2788 | + | |
| 2789 | + | |
| 2790 | + | |
| 2791 | + | |
| 2792 | + | |
| 2793 | + | |
| 2794 | + | |
| 2795 | + | |
| 2796 | + | |
| 2797 | + | |
| 2798 | + | |
| 2799 | + | |
| 2800 | + | |
2783 | 2801 | | |
2784 | 2802 | | |
2785 | 2803 | | |
| |||
3669 | 3687 | | |
3670 | 3688 | | |
3671 | 3689 | | |
| 3690 | + | |
| 3691 | + | |
| 3692 | + | |
| 3693 | + | |
3672 | 3694 | | |
3673 | 3695 | | |
3674 | 3696 | | |
| |||
3686 | 3708 | | |
3687 | 3709 | | |
3688 | 3710 | | |
| 3711 | + | |
| 3712 | + | |
| 3713 | + | |
| 3714 | + | |
3689 | 3715 | | |
3690 | 3716 | | |
3691 | 3717 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3512 | 3512 | | |
3513 | 3513 | | |
3514 | 3514 | | |
| 3515 | + | |
| 3516 | + | |
| 3517 | + | |
| 3518 | + | |
| 3519 | + | |
| 3520 | + | |
| 3521 | + | |
| 3522 | + | |
| 3523 | + | |
| 3524 | + | |
| 3525 | + | |
| 3526 | + | |
| 3527 | + | |
| 3528 | + | |
| 3529 | + | |
| 3530 | + | |
| 3531 | + | |
| 3532 | + | |
| 3533 | + | |
| 3534 | + | |
| 3535 | + | |
| 3536 | + | |
| 3537 | + | |
| 3538 | + | |
| 3539 | + | |
| 3540 | + | |
| 3541 | + | |
| 3542 | + | |
| 3543 | + | |
| 3544 | + | |
| 3545 | + | |
| 3546 | + | |
| 3547 | + | |
| 3548 | + | |
| 3549 | + | |
| 3550 | + | |
| 3551 | + | |
| 3552 | + | |
| 3553 | + | |
| 3554 | + | |
| 3555 | + | |
| 3556 | + | |
| 3557 | + | |
| 3558 | + | |
| 3559 | + | |
| 3560 | + | |
| 3561 | + | |
| 3562 | + | |
| 3563 | + | |
| 3564 | + | |
| 3565 | + | |
| 3566 | + | |
| 3567 | + | |
| 3568 | + | |
| 3569 | + | |
| 3570 | + | |
| 3571 | + | |
| 3572 | + | |
| 3573 | + | |
| 3574 | + | |
| 3575 | + | |
| 3576 | + | |
| 3577 | + | |
| 3578 | + | |
| 3579 | + | |
| 3580 | + | |
| 3581 | + | |
| 3582 | + | |
| 3583 | + | |
| 3584 | + | |
| 3585 | + | |
| 3586 | + | |
| 3587 | + | |
| 3588 | + | |
| 3589 | + | |
| 3590 | + | |
| 3591 | + | |
| 3592 | + | |
| 3593 | + | |
| 3594 | + | |
| 3595 | + | |
| 3596 | + | |
| 3597 | + | |
| 3598 | + | |
| 3599 | + | |
| 3600 | + | |
| 3601 | + | |
| 3602 | + | |
| 3603 | + | |
| 3604 | + | |
| 3605 | + | |
| 3606 | + | |
| 3607 | + | |
| 3608 | + | |
| 3609 | + | |
| 3610 | + | |
| 3611 | + | |
| 3612 | + | |
3515 | 3613 | | |
3516 | 3614 | | |
3517 | 3615 | | |
| |||
0 commit comments