diff options
Diffstat (limited to 'util.lisp')
-rw-r--r-- | util.lisp | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/util.lisp b/util.lisp new file mode 100644 index 0000000..813f55b --- /dev/null +++ b/util.lisp @@ -0,0 +1,47 @@ +(in-package :cl-forth) + +(eval-when (:compile-toplevel :load-toplevel :execute) + (defmacro eval-always (&body body) + `(eval-when (:compile-toplevel :load-toplevel :execute) + ,@body))) + +(eval-always + (defmacro with-gensyms (syms &body body) + `(let ,(mapcar (lambda (sym) `(,sym (gensym ,(string sym)))) syms) + ,@body))) + +(defmacro init-hash (&body body) + (with-gensyms (table) + `(let ((,table (make-hash-table))) + ,@(iter (for (k v) in body) + (collect `(setf (gethash ',k ,table) ,v))) + ,table))) + +(defun mklist (form) + (if (listp form) form (list form))) + +;; (defmacro run (args) +;; (let ((sym (gensym))) +;; `(let ((,sym ,args)) +;; (format t "~{~a~^ ~}~%" ,sym) +;; (uiop:run-program ,sym)))) + +(defun run (args) + (format t "~{~a~^ ~}~%" args) + (uiop:run-program args :output *standard-output*)) + +;; ,(file-namestring +;; (make-pathname :name (pathname-name path) +;; :type "o")) + +(defparameter *test-program* + '((push 34) + (push 35) + (plus) + (dump) + (push 500) + (push 80) + (minus) + (dump))) + + |