<- Back to shtanton's homepage
aboutsummaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorCharlie Stanton <charlie@shtanton.xyz>2023-04-20 09:25:51 +0100
committerCharlie Stanton <charlie@shtanton.xyz>2023-04-20 09:25:51 +0100
commit6a77b63c3cd4edb992b94e42c5a222a1480a3f33 (patch)
tree26402941684af420cf6f489ec7b56a74fdf473aa /main
parent773c5e115fbb4e8b432e95e02216af9b23415ca8 (diff)
downloadstred-go-6a77b63c3cd4edb992b94e42c5a222a1480a3f33.tar
Add commands to append to and swap with the path and X registers
Diffstat (limited to 'main')
-rw-r--r--main/command.go26
-rw-r--r--main/parse.go8
2 files changed, 33 insertions, 1 deletions
diff --git a/main/command.go b/main/command.go
index ea6fb59..e676255 100644
--- a/main/command.go
+++ b/main/command.go
@@ -135,4 +135,28 @@ type Command interface {
}
type NoopCommand struct {}
-func (cmd NoopCommand) exec(state *ProgramState) {} \ No newline at end of file
+func (cmd NoopCommand) exec(state *ProgramState) {}
+
+type SwapXRegCommand struct {}
+func (cmd SwapXRegCommand) exec(state *ProgramState) {
+ v := state.value
+ state.value = state.xreg
+ state.xreg = v
+}
+
+type AppendXRegCommand struct {}
+func (cmd AppendXRegCommand) exec(state *ProgramState) {
+ state.xreg = append(state.xreg, state.value...)
+}
+
+type SwapPathCommand struct {}
+func (cmd SwapPathCommand) exec(state *ProgramState) {
+ v := state.value
+ state.value = state.path
+ state.path = v
+}
+
+type AppendPathCommand struct {}
+func (cmd AppendPathCommand) exec(state *ProgramState) {
+ state.path = append(state.path, state.value...)
+} \ No newline at end of file
diff --git a/main/parse.go b/main/parse.go
index 9cc93e7..8211444 100644
--- a/main/parse.go
+++ b/main/parse.go
@@ -251,6 +251,14 @@ func (p *parser) parseBasicCommand(commandChar rune) Command {
return PrintLiteralsCommand {items: items}
case 'o':
return NoopCommand{}
+ case 'x':
+ return SwapXRegCommand{}
+ case 'X':
+ return AppendXRegCommand{}
+ case 'k':
+ return SwapPathCommand{}
+ case 'K':
+ return AppendPathCommand{}
default:
panic("Invalid command")
}