X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/sod/blobdiff_plain/3be8c2bfe0ac3b376c2b1c58b2c10df71d3ec1f1..a07d8d005f69c0f9f5da2e09c6ee39cb1e1801aa:/module-output.lisp diff --git a/module-output.lisp b/module-output.lisp index dedbe97..891ff54 100644 --- a/module-output.lisp +++ b/module-output.lisp @@ -60,7 +60,13 @@ (defun guess-output-file (module type) (module-name module))) (defun output-module (module reason stream) - (let ((sequencer (make-instance 'sequencer))) + (let ((sequencer (make-instance 'sequencer)) + (stream (if (typep stream 'position-aware-output-stream) + stream + (make-instance 'position-aware-output-stream + :stream stream + :file (or (stream-pathname stream) + #p""))))) (add-output-hooks module reason sequencer) (invoke-sequencer-items sequencer stream))) @@ -71,6 +77,18 @@ (defmethod add-output-hooks progn ((module module) reason sequencer) (dolist (item (module-items module)) (add-output-hooks item reason sequencer))) +(defmethod add-output-hooks progn + ((frag code-fragment-item) reason sequencer) + (when (eq reason (code-fragment-reason frag)) + (dolist (constraint (code-fragment-constraints frag)) + (add-sequencer-constraint sequencer constraint)) + (add-sequencer-item-function sequencer (code-fragment-name frag) + (lambda (stream) + (write (code-fragment frag) + :stream stream + :pretty nil + :escape nil))))) + ;;;-------------------------------------------------------------------------- ;;; Header output. @@ -81,7 +99,7 @@ (defmethod add-output-hooks progn (:guard :start) (:typedefs :start) :typedefs (:typedefs :end) (:includes :start) :includes (:includes :end) - (:classes :start) (:classes :end) + (:classes :start) :classes (:classes :end) (:guard :end) :epilogue)