diff options
Diffstat (limited to 'subex/subexast.go')
-rw-r--r-- | subex/subexast.go | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/subex/subexast.go b/subex/subexast.go index 87686b1..baf7a3b 100644 --- a/subex/subexast.go +++ b/subex/subexast.go @@ -134,6 +134,55 @@ func (ast SubexASTCopyAtom) compileWith(next SubexState) SubexState { } } +// Read in a single atom that must be a boolean and output it unchanged +type SubexASTCopyBool struct {} +func (ast SubexASTCopyBool) compileWith(next SubexState) SubexState { + return &SubexCopyBoolState {next} +} + +// Read in a single atom that must be a number and output it unchanged +type SubexASTCopyNumber struct {} +func (ast SubexASTCopyNumber) compileWith(next SubexState) SubexState { + return &SubexCopyNumberState {next} +} + +// Read in a single atom that must be a string atom and output it unchanged +type SubexASTCopyStringAtom struct {} +func (ast SubexASTCopyStringAtom) compileWith(next SubexState) SubexState { + return &SubexCopyStringAtomState {next} +} + +// Read in a full string value and copy it out unchanged +// # is equivalent to "_{-0}" +type SubexASTCopyString struct {} +func (ast SubexASTCopyString) compileWith(next SubexState) SubexState { + stringAtomState := &SubexCopyStringAtomState { + next: nil, + } + stringContentState := &SubexGroupState { + &SubexCopyAtomState { + atom: walk.StringTerminal{}, + next: next, + }, + stringAtomState, + } + stringAtomState.next = stringContentState + return &SubexCopyAtomState { + atom: walk.StringTerminal{}, + next: stringContentState, + } +} + +// Read in a value and copy it out unchanged +// , is equivalent to `null`|?|%|#|[`{}[]`] +type SubexASTCopyValue struct {} +func (ast SubexASTCopyValue) compileWith(next SubexState) SubexState { + return &SubexGroupState { + SubexASTCopyString{}.compileWith(next), + &SubexCopyNonStringAtomState {next}, + } +} + // Read in any single Atom and output it unchanged type SubexASTCopyAny struct {} func (ast SubexASTCopyAny) compileWith(next SubexState) SubexState { |