(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)))