[Git][cmucl/cmucl][master] 2 commits: Fix #173: Add pprinter for define-assembly-routine

Raymond Toy pushed to branch master at cmucl / cmucl Commits: b2f6ab4c by Raymond Toy at 2023-03-06T17:07:46+00:00 Fix #173: Add pprinter for define-assembly-routine - - - - - 7a15c464 by Raymond Toy at 2023-03-06T17:07:49+00:00 Merge branch 'issue-173-pprint-def-assem-routine' into 'master' Fix #173: Add pprinter for define-assembly-routine Closes #173 See merge request cmucl/cmucl!126 - - - - - 1 changed file: - src/code/pprint.lisp Changes: ===================================== src/code/pprint.lisp ===================================== @@ -1920,6 +1920,42 @@ When annotations are present, invoke them at the right positions." (pprint-newline :mandatory stream))) (pprint-exit-if-list-exhausted) (pprint-newline :mandatory stream)))) + +(defun pprint-define-assembly (stream list &rest noise) + (declare (ignore noise)) + (pprint-logical-block (stream list :prefix "(" :suffix ")") + ;; Output "define-assembly-routine" + (output-object (pprint-pop) stream) + (pprint-exit-if-list-exhausted) + (write-char #\space stream) + ;; Output routine name and options. + (pprint-logical-block (stream (pprint-pop) :prefix "(" :suffix ")") + ;; Output the routine name + (output-object (pprint-pop) stream) + (pprint-exit-if-list-exhausted) + (pprint-newline :mandatory stream) + (pprint-indent :block 0 stream) + ;; Output options, one per line, neatly lined up and indented + ;; below the routine name. + (loop + (output-object (pprint-pop) stream) + (pprint-exit-if-list-exhausted) + (pprint-newline :mandatory stream))) + ;; Now output the args, results, and temps used by the assembly + ;; routine. Instead of lining up with the routine name, let's + ;; just indent it 4 spaces from the "define-assembly-routine" so + ;; it doesn't look so top-heavy. + (pprint-indent :block 4 stream) + (pprint-newline :mandatory stream) + (pprint-logical-block (stream (pprint-pop) :prefix "(" :suffix ")") + (loop + (output-object (pprint-pop) stream) + (pprint-exit-if-list-exhausted) + (pprint-newline :mandatory stream))) + ;; Now print out the assembly code as if it were a tagbody. Then + ;; labels are outdented by one to make them easy to see. + (pprint-newline :mandatory stream) + (pprint-tagbody-guts stream))) ;;;; Interface seen by regular (ugly) printer and initialization routines. @@ -2037,7 +2073,8 @@ When annotations are present, invoke them at the right positions." (stream::with-stream-class pprint-with-like) (lisp::with-array-data pprint-with-like) (c:define-vop pprint-define-vop) - (c:sc-case pprint-sc-case))) + (c:sc-case pprint-sc-case) + (c:define-assembly-routine pprint-define-assembly))) (defun pprint-init () (setf *initial-pprint-dispatch* (make-pprint-dispatch-table)) View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/-/compare/9d32d69a918d3542444ab30... -- View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/-/compare/9d32d69a918d3542444ab30... You're receiving this email because of your account on gitlab.common-lisp.net.
participants (1)
-
Raymond Toy (@rtoy)