From 33afa42f24f4b065debbe67adef52a8687d591ae Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Sat, 14 Sep 2024 16:09:33 +0200 Subject: [PATCH] forge/sf: more basic builtin words --- forge/sf.lisp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/forge/sf.lisp b/forge/sf.lisp index f151f60..9663d27 100644 --- a/forge/sf.lisp +++ b/forge/sf.lisp @@ -127,10 +127,12 @@ (defpackage :sf-builtin (:use :common-lisp) (:local-nicknames (:f :scopes/forge/sf) - (:iter :scopes/util/iter)) + (:iter :scopes/util/iter) + (:util :scopes/util)) (:export #:add #:mul #:dup #:swp + #:ptr #:get #:put #:in #:next - #:call #:comp + #:call #:call-if #:call-while #:comp #:)) (in-package :sf-builtin) @@ -156,10 +158,16 @@ (f:reg 'dup #'(lambda () (f:pushd (f:peekd)))) (f:reg 'swp #'(lambda () (let ((a (f:popd)) (b (f:popd))) (f:pushd a) (f:pushd b)))) +(f:reg 'ptr #'(lambda () (f:pushd (util:ptr (f:popd))))) +(f:reg 'get #'(lambda () (f:pushd (aref (f:popd))))) +(f:reg 'put #'(lambda () (setf (aref (f:popd)) (f:popd)))) + (f:reg 'in #'(lambda () (f:pushd (iter:next-value f:*input*)))) (f:reg 'next #'f:next) (f:reg 'call #'(lambda () (f:call (popd)))) +(f:reg 'call-if #'call-if) +(f:reg 'call-while #'call-while) (f:reg 'comp #'(lambda () (f:comp-item (popd)))) (f:reg '