<- Back to shtanton's homepage
aboutsummaryrefslogtreecommitdiff
path: root/subex/subexast.go
diff options
context:
space:
mode:
Diffstat (limited to 'subex/subexast.go')
-rw-r--r--subex/subexast.go49
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 {