From e5573634ce3668f2a4eac74be125262d28a5cb8a Mon Sep 17 00:00:00 2001 Message-Id: From: Mark Wooding Date: Tue, 5 Jan 2016 21:52:36 +0000 Subject: [PATCH] src/codegen-proto.lisp: Rewrite `block' printing longhand. Organization: Straylight/Edgeware From: Mark Wooding 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. --- src/codegen-proto.lisp | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) 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 @@ (definst continue (stream :export t) () ;; 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")) -- [mdw]