aboutsummaryrefslogtreecommitdiff
path: root/pkg/pointer/exec.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/pointer/exec.go')
-rw-r--r--pkg/pointer/exec.go39
1 files changed, 39 insertions, 0 deletions
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
+}