diff options
-rw-r--r-- | pkg/pointer/exec.go | 17 | ||||
-rw-r--r-- | pkg/pointer/pointer.go | 5 | ||||
-rw-r--r-- | pkg/pointer/stack-stack.go | 2 |
3 files changed, 7 insertions, 17 deletions
diff --git a/pkg/pointer/exec.go b/pkg/pointer/exec.go index 2a0776d..9859360 100644 --- a/pkg/pointer/exec.go +++ b/pkg/pointer/exec.go @@ -21,7 +21,6 @@ func (p *Pointer) Exec(f *field.Field) (done bool, returnValue *int) { } if c == '"' { p.stringMode = false - p.lastCharWasSpace = false } else { if c == ' ' { p.lastCharWasSpace = true @@ -65,27 +64,19 @@ func (p *Pointer) eval(c int, f *field.Field) (done bool, returnValue *int) { v := p.ss.head.Pop() return true, &v case 'k': + x, y := p.x, p.y n := p.ss.head.Pop() c = p.StepAndGet(*f) - steps := 1 for jumpingMode := false; jumpingMode || c == ' ' || c == ';'; c = p.StepAndGet(*f) { - steps += 1 if c == ';' { jumpingMode = !jumpingMode } } if n > 0 { - // we need to reverse that step - p.Reverse() - for i := 0; i < steps; i++ { - p.Step(*f) - } - p.Reverse() + p.x, p.y = x, y if c != ' ' && c != ';' { - if n > 0 { - for i := 0; i < n; i++ { - p.eval(c, f) - } + for i := 0; i < n; i++ { + p.eval(c, f) } } } diff --git a/pkg/pointer/pointer.go b/pkg/pointer/pointer.go index 1465145..4467235 100644 --- a/pkg/pointer/pointer.go +++ b/pkg/pointer/pointer.go @@ -99,9 +99,8 @@ func (p *Pointer) Redirect(c int) bool { case 'r': p.Reverse() case 'x': - dy := p.ss.head.Pop() - dx := p.ss.head.Pop() - p.RedirectTo(dx, dy) + p.dy = p.ss.head.Pop() + p.dx = p.ss.head.Pop() default: return false } diff --git a/pkg/pointer/stack-stack.go b/pkg/pointer/stack-stack.go index 404542c..4bbfb73 100644 --- a/pkg/pointer/stack-stack.go +++ b/pkg/pointer/stack-stack.go @@ -80,7 +80,7 @@ func (ss *StackStack) End(p *Pointer) (reflect bool) { } } ss.height-- - ss.head = ss.head.next + ss.head = soss return false } |