X-Git-Url: https://git.distorted.org.uk/~mdw/sod/blobdiff_plain/4b8e5c0347115ff30841f1d1e71afe59ecb6c82c..f7227b1a3d7052c17e6989b52170d8fa1a5d0a85:/src/codegen-proto.lisp?ds=sidebyside diff --git a/src/codegen-proto.lisp b/src/codegen-proto.lisp index 535839c..a96c6ff 100644 --- a/src/codegen-proto.lisp +++ b/src/codegen-proto.lisp @@ -55,18 +55,6 @@ (:documentation "Base class for temporary variable and argument names.")) -;; Important variables. - -(defparameter *temporary-index* 0 - "Index for temporary name generation. - - This is automatically reset to zero before the output functions are - invoked to write a file. This way, we can ensure that the same output - file is always produced from the same input.") - -(define-clear-the-decks reset-codegen-index - (setf *temporary-index* 0)) - ;; Important temporary names. (export '(*sod-ap* *sod-master-ap*)) @@ -346,10 +334,13 @@ During BODY, VAR will be marked in-use; when BODY ends, VAR will be marked available for re-use." - `(let ((,var (temporary-var ,codegen ,type))) - (unwind-protect - (progn ,@body) - (setf (var-in-use-p ,var) nil)))) + (multiple-value-bind (doc decls body) (parse-body body :docp nil) + (declare (ignore doc)) + `(let ((,var (temporary-var ,codegen ,type))) + ,@decls + (unwind-protect + (progn ,@body) + (setf (var-in-use-p ,var) nil))))) ;;;-------------------------------------------------------------------------- ;;; Code generation idioms.