aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pkg/pointer/exec.go17
-rw-r--r--pkg/pointer/pointer.go5
-rw-r--r--pkg/pointer/stack-stack.go2
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
}