45 lines
1.0 KiB
Common Lisp
45 lines
1.0 KiB
Common Lisp
(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)))
|
|
|
|
(defun run (args &rest options)
|
|
(format t "~{~a~^ ~}~%" args)
|
|
(apply #'uiop:run-program args options))
|
|
|
|
(defun from-root (path)
|
|
(merge-pathnames path (asdf:system-source-directory :cl-forth)))
|
|
|
|
;; ,(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)))
|
|
|
|
|