From: Mark Wooding Date: Tue, 5 Jan 2016 21:52:36 +0000 (+0000) Subject: src/codegen-proto.lisp: Rewrite `block' printing longhand. X-Git-Url: https://git.distorted.org.uk/~mdw/sod/commitdiff_plain/e5573634ce3668f2a4eac74be125262d28a5cb8a?ds=sidebyside src/codegen-proto.lisp: Rewrite `block' printing longhand. There are going to be some changes made to it, so it has to be written out suitably. Nothing should be very different. The way newlines are handled is a little tricksy. A shame, really, because the old `format' string was quite fun. --- diff --git a/src/codegen-proto.lisp b/src/codegen-proto.lisp index 7a6be33..767f35b 100644 --- a/src/codegen-proto.lisp +++ b/src/codegen-proto.lisp @@ -251,8 +251,26 @@ ;; Compound statements. (definst block (stream :export t) (decls body) - (format stream "{~:@_~@< ~2I~@[~{~A~:@_~}~:@_~]~{~A~^~:@_~}~:>~:@_}" - decls body)) + (write-char #\{ stream) + (pprint-newline :mandatory stream) + (pprint-logical-block (stream nil) + (let ((newlinep nil)) + (flet ((newline () + (if newlinep + (pprint-newline :mandatory stream) + (setf newlinep t)))) + (pprint-indent :block 2 stream) + (write-string " " stream) + (when decls + (dolist (decl decls) + (newline) + (write decl :stream stream)) + (when body (newline))) + (dolist (inst body) + (newline) + (write inst :stream stream))))) + (pprint-newline :mandatory stream) + (write-char #\} stream)) (definst if (stream :export t) (#1=#:cond conseq &optional alt) (let ((stmt "if"))