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
|
package parser
// ParserSnapshot holds the parser state fields that matter for equality
// (mirrors Rust's Parser::assert_eq).
type ParserSnapshot struct {
State State
// Params is only meaningful in CsiParam / DcsParam states.
Params [][]uint16
// Intermediate is only meaningful in EscapeIntermediate, CsiIntermediate,
// CsiParam, DcsIntermediate, DcsParam states.
Intermediate *rune
}
func (p *Parser) Snapshot() ParserSnapshot {
snap := ParserSnapshot{
State: p.State,
Intermediate: p.intermediate,
}
switch p.State {
case StateCsiParam, StateDcsParam:
for i := 0; i <= p.curParam; i++ {
parts := make([]uint16, p.params[i].curPart+1)
copy(parts, p.params[i].parts[:p.params[i].curPart+1])
snap.Params = append(snap.Params, parts)
}
}
return snap
}
|