Commit 04a224d
authored
HLL::Compiler.compile: balance backend per-compile state on early exit
HLL::Backend.start (MoarVM) pushes a frame list onto
%COMPILING<moar><frames> at every compile's 'start' stage. The matching
pop runs at the 'mast' stage in QASTCompilerMAST.to_mast. A compile
that stops before 'mast' (e.g. with `:target('ast')`), or one whose
stage call throws, leaves the push dangling. The next nested compile's
MAST migration then attaches its frames to the dangling level rather
than the outer compile's, leaving those MAST::Frames unreachable from
any compunit's @!frames. The outer's deserialization code dies later
with `Could not find frame <unit>`.
Snapshot the backend's per-compile state before the stages loop and
rebalance it afterwards via two optional backend hooks
(compile_snapshot, compile_cleanup). Wrap each stage call in CATCH so
the cleanup also runs when a stage throws, capture the exception, exit
the stages loop, then rethrow with its original payload.
The legacy Rakudo frontend never stops short of 'mast' and never
throws across the stages loop boundary, so on every existing
non-RakuAST compile the snapshot matches the post-loop depth, the
cleanup pop loop runs no iterations, and the caught variable stays
null.1 parent e37642d commit 04a224d
4 files changed
Lines changed: 130 additions & 3 deletions
File tree
- src
- HLL
- vm/moar
- HLL
- QAST
- t/moar
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
503 | 503 | | |
504 | 504 | | |
505 | 505 | | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
| 510 | + | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
| 514 | + | |
| 515 | + | |
| 516 | + | |
506 | 517 | | |
507 | 518 | | |
508 | 519 | | |
| |||
511 | 522 | | |
512 | 523 | | |
513 | 524 | | |
514 | | - | |
515 | | - | |
516 | | - | |
| 525 | + | |
| 526 | + | |
| 527 | + | |
| 528 | + | |
| 529 | + | |
| 530 | + | |
| 531 | + | |
| 532 | + | |
| 533 | + | |
| 534 | + | |
| 535 | + | |
| 536 | + | |
| 537 | + | |
| 538 | + | |
| 539 | + | |
| 540 | + | |
517 | 541 | | |
518 | 542 | | |
519 | 543 | | |
| |||
532 | 556 | | |
533 | 557 | | |
534 | 558 | | |
| 559 | + | |
| 560 | + | |
| 561 | + | |
| 562 | + | |
| 563 | + | |
535 | 564 | | |
536 | 565 | | |
537 | 566 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
761 | 761 | | |
762 | 762 | | |
763 | 763 | | |
| 764 | + | |
| 765 | + | |
| 766 | + | |
| 767 | + | |
764 | 768 | | |
765 | 769 | | |
766 | 770 | | |
| |||
780 | 784 | | |
781 | 785 | | |
782 | 786 | | |
| 787 | + | |
| 788 | + | |
| 789 | + | |
| 790 | + | |
| 791 | + | |
| 792 | + | |
| 793 | + | |
| 794 | + | |
| 795 | + | |
| 796 | + | |
| 797 | + | |
| 798 | + | |
| 799 | + | |
| 800 | + | |
| 801 | + | |
| 802 | + | |
| 803 | + | |
| 804 | + | |
783 | 805 | | |
784 | 806 | | |
785 | 807 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
358 | 358 | | |
359 | 359 | | |
360 | 360 | | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
361 | 365 | | |
362 | 366 | | |
363 | 367 | | |
| |||
| 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 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
0 commit comments