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
use crate::types::{InsnId, Pos, RuleId, SyntaxKind};
#[derive(Clone, Copy)]
pub(super) struct SnapEntry {
pub(super) word: u32,
pub(super) val: u64,
}
#[derive(Clone, Copy, Debug)]
pub(super) enum Frame {
Backtrack {
alt: u32,
saved_pos: Pos,
/// Mark into `events` (legacy captures).
capture_mark: u32,
/// Mark into `tree_events` (green/red tree events).
tree_mark: u32,
/// Mark into `open_tokens` (in-progress token spans).
open_tokens_mark: u32,
/// Mark into `context_stack` (diagnostic "while parsing" context).
context_mark: u32,
},
Return {
ret_ip: u32,
},
#[cfg(feature = "std")]
MemoReturn {
ret_ip: u32,
rule: RuleId,
start_pos: Pos,
events_mark: u32,
tree_mark: u32,
},
ContextSave {
snapshot_mark: u32,
},
/// Error recovery: on failure, skip until `sync_rule` matches then continue at resume.
Recover {
sync_rule: RuleId,
resume: InsnId,
},
/// Marker when trying the sync rule during recovery; popped by `RecoveryResume`.
RecoverSync {
sync_rule: RuleId,
resume: InsnId,
},
/// Defensive: carried over from older designs.
#[allow(dead_code)]
_Reserved {
_kind: SyntaxKind,
},
}