summaryrefslogtreecommitdiff
path: root/util.lisp
diff options
context:
space:
mode:
Diffstat (limited to 'util.lisp')
-rw-r--r--util.lisp47
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)))
+
+