forge: define def in forge code

This commit is contained in:
Helmut Merz 2024-05-29 10:21:17 +02:00
parent 70bdac68a2
commit ef7ee0b9f4
2 changed files with 3 additions and 10 deletions

View file

@ -111,10 +111,8 @@
(comp-item (gethash w (comp-words)))))
(defun setup-builtins ()
(reg + (pushd (+ (popd) (popd))))
(reg * (pushd (* (popd) (popd))))
(reg dup (pushd (car (dstack))))
(reg swap (let ((a (popd)) (b (popd))) (pushd a) (pushd b)))
@ -127,12 +125,6 @@
(register-comp-word 'quote #'do-quote)
(register-comp-word 'comp #'do-comp)
(register-comp-word 'def
#'(lambda ()
(let* ((name (read-next))
(code (comp (read-next))))
(register name #'(lambda () (call code))))))
(activate-package :sf-user))
;;; compiler, interpreter

View file

@ -34,8 +34,9 @@
(== (car (forge:dstack)) 6))
(deftest test-def ()
;(forge:exec-str "def square (dup *)")
(forge:exec-str "(dup *) quote square reg")
(forge:exec-str "(comp quote defer reg) quote def regc")
;(forge:exec-str "(dup *) quote square reg")
(forge:exec-str "(dup *) def square")
(forge:exec-str "7 square")
(== (car (forge:dstack)) 49))