diff options
| -rw-r--r-- | main/command.go | 26 | ||||
| -rw-r--r-- | main/parse.go | 8 | 
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")  	} | 
