Catch browse back beyond start

This commit is contained in:
lash 2023-04-12 08:42:37 +01:00
parent 4da19b3047
commit 719368301b
Signed by untrusted user who does not match committer: lash
GPG Key ID: 21D2E7BB88C2A746
2 changed files with 20 additions and 2 deletions

View File

@ -6,6 +6,13 @@ import (
"strings"
)
type IndexError struct {
}
func(err *IndexError) Error() string {
return fmt.Sprintf("already at first index")
}
// State holds the command stack, error condition of a unique execution session.
//
// It also holds cached values for all results of executed symbols.
@ -208,7 +215,7 @@ func(st *State) Previous() (uint16, error) {
return 0, fmt.Errorf("state root node not yet defined")
}
if st.sizeIdx == 0 {
return 0, fmt.Errorf("already at first index")
return 0, &IndexError{} // ("already at first index")
}
st.sizeIdx -= 1
s, idx := st.Where()

View File

@ -313,7 +313,18 @@ func(vm *Vm) RunInCmp(b []byte, ctx context.Context) ([]byte, error) {
}
target, _, err = applyTarget([]byte(target), vm.st, vm.ca, ctx)
if err != nil {
_, ok := err.(*state.IndexError)
if ok {
_, err = vm.st.ResetFlag(state.FLAG_INMATCH)
if err != nil {
panic(err)
}
_, err = vm.st.SetFlag(state.FLAG_READIN)
if err != nil {
panic(err)
}
return b, nil
} else if err != nil {
return b, err
}
vm.Reset()