use hash table for registering words, with *builtins* default registry
This commit is contained in:
parent
9c56ae475b
commit
dcb5208a25
1 changed files with 10 additions and 4 deletions
|
@ -8,6 +8,8 @@
|
|||
|
||||
(in-package :scopes/forge)
|
||||
|
||||
(defvar *builtins* (make-hash-table :test 'equalp))
|
||||
|
||||
(defclass forge-env ()
|
||||
((data-stack :initform nil
|
||||
:reader data-stack
|
||||
|
@ -19,13 +21,17 @@
|
|||
(defun exec (fe code)
|
||||
(dolist (x code)
|
||||
(if (symbolp x)
|
||||
(funcall (find-symbol (symbol-name x) :scopes/forge) fe)
|
||||
(funcall (gethash (string-downcase (symbol-name x)) *builtins*) fe)
|
||||
(pushd fe x))))
|
||||
|
||||
; forge primitives
|
||||
(defun register (voc key fn)
|
||||
(setf (gethash (string-downcase (symbol-name key)) voc) fn))
|
||||
|
||||
(defun add (fe)
|
||||
(pushd fe (+ (popd fe) (popd fe))))
|
||||
; built-in primitives
|
||||
|
||||
(defun reg-b (key fn) (register *builtins* key fn))
|
||||
|
||||
(reg-b 'add #'(lambda (fe) (pushd fe (+ (popd fe) (popd fe)))))
|
||||
|
||||
; internal definitions
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue