diff --git a/forge/forge.lisp b/forge/forge.lisp index a4cbcf6..be7ed83 100644 --- a/forge/forge.lisp +++ b/forge/forge.lisp @@ -93,18 +93,11 @@ `(register ',sym #'(lambda () ,@body))) (defun lit () (pushd (isq-next (fip)))) -(defun wrap () (pushd (list #'lit (popd)))) -(defun defer () (comp-item (isq-next (fip)))) -(defun do-reg () +(defun do-reg (&optional (fn #'register)) (let* ((name (popd)) (code (popd))) - (register name #'(lambda () (call code)) :code code))) - -(defun do-regc () - (let* ((name (popd)) - (code (popd))) - (register-comp-word name #'(lambda () (call code)) :code code))) + (funcall fn name #'(lambda () (call code)) :code code))) (defun do-quote () (let ((quoted (read-next))) @@ -118,6 +111,9 @@ (comp-item (gethash w (comp-words))))) (defun setup-builtins () + (register 'lit #'lit) + (register 'reg #'do-reg) + (reg + (pushd (+ (popd) (popd)))) (reg * (pushd (* (popd) (popd)))) (reg dup (pushd (car (dstack)))) @@ -126,12 +122,9 @@ (reg ?? (format t "~a~%" (dstack))) (reg get (pushd (cadr (popd)))) (reg set (setf (cadr (popd)) (popd))) - - (register 'lit #'lit) - (register 'wrap #'wrap) - (register 'defer #'defer) - (register 'reg #'do-reg) - (register 'regc #'do-regc) + (reg wrap (pushd (list #'lit (popd)))) + (reg defer (comp-item (isq-next (fip)))) + (reg regc (do-reg #'register-comp-word)) (register-comp-word 'quote #'do-quote) (register-comp-word 'comp #'do-comp)