<- Back to shtanton's homepage
aboutsummaryrefslogtreecommitdiff
path: root/main/command.go
diff options
context:
space:
mode:
authorCharlie Stanton <charlie@shtanton.xyz>2023-04-24 13:16:06 +0100
committerCharlie Stanton <charlie@shtanton.xyz>2023-04-24 13:16:06 +0100
commit8e80185508a697ddfcfed4a04d3f4e1ac5a330a9 (patch)
treeae02915068a6f562ae2e6d154fc48d1106b9d826 /main/command.go
parent86ee39f44266cb314ab36c4f941377620fc0fead (diff)
downloadstred-go-8e80185508a697ddfcfed4a04d3f4e1ac5a330a9.tar
WalkItems are now made of Atoms instead of WalkValues, and I have rolled my own JSON parser and serialiser
These changes improve performance
Diffstat (limited to 'main/command.go')
-rw-r--r--main/command.go29
1 files changed, 13 insertions, 16 deletions
diff --git a/main/command.go b/main/command.go
index a0ac35e..c7b1aa9 100644
--- a/main/command.go
+++ b/main/command.go
@@ -16,16 +16,7 @@ func (cmd PrintValueCommand) exec(state *ProgramState) {
panic("Tried to convert invalid atoms to values")
}
path := walk.PathFromWalkValues(pathValues)
- values, err := walk.Compound(state.value)
- if err != nil {
- panic("Tried to convert invalid atoms to values")
- }
- for _, value := range values {
- state.out <- walk.WalkItem {
- Value: value,
- Path: path,
- }
- }
+ state.out.Print(path, state.value)
}
type SequenceCommand struct {
@@ -39,16 +30,22 @@ func (cmd SequenceCommand) exec(state *ProgramState) {
type NextCommand struct {}
func (cmd NextCommand) exec(state *ProgramState) {
- nextItem := <- state.in
- state.value = walk.Atomise([]walk.WalkValue{nextItem.Value})
- state.path = walk.Atomise(nextItem.Path.ToWalkValues())
+ nextItem, err := state.in.Read()
+ if err != nil {
+ panic("Missing next value")
+ }
+ state.value = nextItem.Value
+ state.path = nextItem.Path
}
type AppendNextCommand struct {}
func (cmd AppendNextCommand) exec(state *ProgramState) {
- nextItem := <- state.in
- state.value = append(state.value, walk.Atomise([]walk.WalkValue{nextItem.Value})...)
- state.path = walk.Atomise(nextItem.Path.ToWalkValues())
+ nextItem, err := state.in.Read()
+ if err != nil {
+ panic("Missing next value")
+ }
+ state.value = append(state.value, nextItem.Value...)
+ state.path = nextItem.Path
}
type DeleteValueCommand struct {}