diff options
| author | Charlie Stanton <charlie@shtanton.xyz> | 2024-04-21 17:30:05 +0100 | 
|---|---|---|
| committer | Charlie Stanton <charlie@shtanton.xyz> | 2024-04-21 17:30:05 +0100 | 
| commit | f6e27ecd8881498776428c0ae5b674f65192058e (patch) | |
| tree | c8a9988adb29d555f9f4cff232cbc3f2e4bcb7ca | |
| parent | 1e66aaece6ea7cd3c705ca56ce5558e8f87681b8 (diff) | |
| download | stred-go-f6e27ecd8881498776428c0ae5b674f65192058e.tar | |
Modify merge to no longer read a new value
Now just merges the last two values in the space
| -rw-r--r-- | main/command.go | 24 | ||||
| -rw-r--r-- | main/main_test.go | 2 | 
2 files changed, 9 insertions, 17 deletions
| diff --git a/main/command.go b/main/command.go index 04ac7f6..736dce5 100644 --- a/main/command.go +++ b/main/command.go @@ -119,24 +119,16 @@ func (cmd SubstituteAppendNextCommand) String() string {  type MergeCommand struct {}  func (cmd MergeCommand) exec(state *ProgramState) { -	nextItem, err := state.Read() -	if err != nil { -		panic("Missing next value") +	if len(state.value) <= 1 { +		state.pc++ +		return  	} -	state.prevStart = nextItem.PrevStart -	state.start = nextItem.Start -	state.end = nextItem.End -	state.nextEnd = nextItem.NextEnd - -	if len(state.value) == 0 { -		state.value = []walk.Value {nextItem.Value} -	} else { -		state.value = append( -			state.value[:len(state.value) - 1], -			walk.Merge(state.value[len(state.value) - 1], nextItem.Value)... -		) -	} +	newVals := walk.Merge(state.value[len(state.value) - 2], state.value[len(state.value) - 1]) +	state.value = append( +		state.value[:len(state.value) - 2], +		newVals... +	)  	state.pc++  } diff --git a/main/main_test.go b/main/main_test.go index be439a3..1510497 100644 --- a/main/main_test.go +++ b/main/main_test.go @@ -75,7 +75,7 @@ func TestMain(t *testing.T) {  		},  		{  			name: "Change full names in place", -			program: "s/#(\"people\" @(. #(\"first_name\" .)#)@)#/{ ms/#(\"people\" @(. (#(\"first_name\" \".{-0}$a\" \"last_name\" \".{-0}$b\")#$_) `#(\"name\" \"$a $b\")#`)@)#/ }", +			program: "s/#(\"people\" @(. #(\"first_name\" .)#)@)#/{ Nms/#(\"people\" @(. (#(\"first_name\" \".{-0}$a\" \"last_name\" \".{-0}$b\")#$_) `#(\"name\" \"$a $b\")#`)@)#/ }",  			input: miscInput,  			expected: `{"something":{"nested":"Here is my test value"},"array":["Hello","world","these","are","values"],"people":[{"name":"Charlie Johnson","age":22},{"name":"Tom Johnson","age":18},{"name":"Charlie Chaplin","age":122},{"name":"John Johnson","age":48}]}`,  		}, | 
