diff --git a/forge/forge.lisp b/forge/forge.lisp index a054b7d..77f41b4 100644 --- a/forge/forge.lisp +++ b/forge/forge.lisp @@ -8,21 +8,20 @@ (in-package :scopes/forge) -(defun new-forge-env () - (vector nil)) +(defclass forge-env () + ((data-stack :initform 0 + :reader data-stack + :accessor data-stack!))) -(defun exec (fe code) +(defun new-forge-env () + (make-instance 'forge-env)) + +(defmethod exec ((fe forge-env) code) (dolist (x code) (if (symbolp x) (funcall (find-symbol (symbol-name x) :scopes/forge) fe) (pushd fe x)))) -(defun data-stack (fe) - (elt fe 0)) - -(defmacro data-stack! (fe) - `(elt ,fe 0)) - ; forge primitives (defun add (fe) diff --git a/testing.lisp b/testing.lisp index babcc40..d0951da 100644 --- a/testing.lisp +++ b/testing.lisp @@ -11,12 +11,11 @@ (defun test-suite () (vector nil)) -(defun assert-eq (tst have wanted) - (push (equalp have wanted) (result! tst))) - (defun result (tst) (elt tst 0)) (defmacro result! (tst) `(elt ,tst 0)) +(defun assert-eq (tst have wanted) + (push (equalp have wanted) (result! tst)))