From f86b5724e530ec86eed04ebeb257293244f4be69 Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Thu, 23 Sep 2021 14:59:14 +0200 Subject: Moved the character execution's to the pointer in order to handle the k command --- pkg/pointer/exec.go | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 pkg/pointer/exec.go (limited to 'pkg/pointer/exec.go') diff --git a/pkg/pointer/exec.go b/pkg/pointer/exec.go new file mode 100644 index 0000000..9d55136 --- /dev/null +++ b/pkg/pointer/exec.go @@ -0,0 +1,39 @@ +package pointer + +import ( + "log" + + "git.adyxax.org/adyxax/gofunge/pkg/field" +) + +func (p *Pointer) Exec(f *field.Field) (done bool, returnValue *int) { + c := p.Get(*f) + for jumpingMode := false; jumpingMode || c == ' ' || c == ';'; c = p.StepAndGet(*f) { + if jumpingMode { + if c == ';' { + jumpingMode = false + } + continue + } + } + switch c { + case '@': + return true, nil + case '#': + p.Step(*f) + case 'j': + n := p.Ss.Pop() + for j := 0; j < n; j++ { + p.Step(*f) + } + case 'q': + v := p.Ss.Pop() + return true, &v + default: + if !p.Redirect(c) { + log.Fatalf("Non implemented instruction code %d : %c", c, c) + } + } + p.Step(*f) + return +} -- cgit v1.2.3