forge: define def in forge code
This commit is contained in:
parent
70bdac68a2
commit
ef7ee0b9f4
2 changed files with 3 additions and 10 deletions
|
@ -111,10 +111,8 @@
|
||||||
(comp-item (gethash w (comp-words)))))
|
(comp-item (gethash w (comp-words)))))
|
||||||
|
|
||||||
(defun setup-builtins ()
|
(defun setup-builtins ()
|
||||||
|
|
||||||
(reg + (pushd (+ (popd) (popd))))
|
(reg + (pushd (+ (popd) (popd))))
|
||||||
(reg * (pushd (* (popd) (popd))))
|
(reg * (pushd (* (popd) (popd))))
|
||||||
|
|
||||||
(reg dup (pushd (car (dstack))))
|
(reg dup (pushd (car (dstack))))
|
||||||
(reg swap (let ((a (popd)) (b (popd))) (pushd a) (pushd b)))
|
(reg swap (let ((a (popd)) (b (popd))) (pushd a) (pushd b)))
|
||||||
|
|
||||||
|
@ -127,12 +125,6 @@
|
||||||
(register-comp-word 'quote #'do-quote)
|
(register-comp-word 'quote #'do-quote)
|
||||||
(register-comp-word 'comp #'do-comp)
|
(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))
|
(activate-package :sf-user))
|
||||||
|
|
||||||
;;; compiler, interpreter
|
;;; compiler, interpreter
|
||||||
|
|
|
@ -34,8 +34,9 @@
|
||||||
(== (car (forge:dstack)) 6))
|
(== (car (forge:dstack)) 6))
|
||||||
|
|
||||||
(deftest test-def ()
|
(deftest test-def ()
|
||||||
;(forge:exec-str "def square (dup *)")
|
(forge:exec-str "(comp quote defer reg) quote def regc")
|
||||||
(forge:exec-str "(dup *) quote square reg")
|
;(forge:exec-str "(dup *) quote square reg")
|
||||||
|
(forge:exec-str "(dup *) def square")
|
||||||
(forge:exec-str "7 square")
|
(forge:exec-str "7 square")
|
||||||
(== (car (forge:dstack)) 49))
|
(== (car (forge:dstack)) 49))
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue