diff --git a/forge/forge.lisp b/forge/forge.lisp index 1d2ab1f..1703c5c 100644 --- a/forge/forge.lisp +++ b/forge/forge.lisp @@ -18,7 +18,9 @@ :accessor vocabulary))) (defun forge-env () - (make-instance 'forge-env)) + (let ((fe (make-instance 'forge-env))) + (push (make-hash-table :test 'equalp) (vocabulary fe)) + fe)) (defun exec-str (fe s) (exec fe (read-from-string @@ -44,12 +46,12 @@ (defun reg-b (key fn) (register *builtins* key fn)) -(reg-b 'add #'(lambda (fe) (pushd fe (+ (popd fe) (popd fe))))) -(reg-b 'mul #'(lambda (fe) (pushd fe (* (popd fe) (popd fe))))) +(reg-b "+" #'(lambda (fe) (pushd fe (+ (popd fe) (popd fe))))) +(reg-b "*" #'(lambda (fe) (pushd fe (* (popd fe) (popd fe))))) -(reg-b 'dup #'(lambda (fe) (pushd fe (car (data-stack fe))))) +(reg-b "dup" #'(lambda (fe) (pushd fe (car (data-stack fe))))) -(reg-b 'def #'(lambda (fe) +(reg-b "def" #'(lambda (fe) (let ((voc (car(vocabulary fe))) (name (popd fe)) (code (popd fe))) diff --git a/scratch.lisp b/scratch.lisp new file mode 100644 index 0000000..cb8c6c0 --- /dev/null +++ b/scratch.lisp @@ -0,0 +1,8 @@ + +(defun classes () + (let ((r nil)) + (maphash #'(lambda (k v) + (setf r (cons k r))) si:*class-name-hash-table*) + (sort r #'(lambda (x y) + (string<= (package-name (symbol-package x)) + (package-name (symbol-package y))))))) diff --git a/test/test-forge.lisp b/test/test-forge.lisp index eac7f56..89045f6 100644 --- a/test/test-forge.lisp +++ b/test/test-forge.lisp @@ -20,11 +20,11 @@ (sct:result tst))) (defun test-exec (tst fe) - (scf:exec fe '(4 2 add)) + (scf:exec fe '(4 2 +)) (sct:assert-eq tst (car (scf:data-stack fe)) 6)) (defun test-def (tst fe) - (scf:exec fe '((dup mul) "square" def)) + (scf:exec fe '((dup *) "square" def)) (scf:exec fe '(7 square)) (sct:assert-eq tst (car (scf:data-stack fe)) 49))