From: Mark Wooding Date: Tue, 15 Dec 2015 18:31:42 +0000 (+0000) Subject: src/: Make pretty-printing better at handling tight margins. X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/sod/commitdiff_plain/243cffbf70b9e0155a17563a66efbb6bf34c820c src/: Make pretty-printing better at handling tight margins. Insert some more newlines, and make existing ones less miserly. Also, make sure margins are set before the newlines, rather than after. Printing for `var' is lightly hacked to allow a break before the initializer. --- diff --git a/src/c-types-impl.lisp b/src/c-types-impl.lisp index 89a7c27..5bd9703 100644 --- a/src/c-types-impl.lisp +++ b/src/c-types-impl.lisp @@ -472,6 +472,7 @@ (defun pprint-c-function-type (return-type stream print-args print-kernel) (when spacep (c-type-space stream)) (funcall print-kernel stream 2 nil) (pprint-indent :block 4 stream) + (pprint-newline :linear stream) (pprint-logical-block (stream nil :prefix "(" :suffix ")") (funcall print-args stream)))))) @@ -513,8 +514,9 @@ (defmethod print-c-type (stream (type c-function-type) &optional colon atsign) (declare (ignore colon atsign)) (format stream "~:@<~ - FUN ~@_~:I~/sod:print-c-type/~ - ~{ ~_~:<~S ~@_~/sod:print-c-type/~:>~}~ + FUN ~@_~:I~ + ~/sod:print-c-type/~:[~; ~]~:*~_~ + ~<~@{~:<~S ~@_~/sod:print-c-type/~:>~^ ~_~}~:>~ ~:>" (c-type-subtype type) (mapcar (lambda (arg) diff --git a/src/c-types-test.lisp b/src/c-types-test.lisp index 06af0d4..483d122 100644 --- a/src/c-types-test.lisp +++ b/src/c-types-test.lisp @@ -241,10 +241,10 @@ (def-test-method commentify-non-recursive ((test c-types-test) :run nil) ("nopenfd" int)))) "ftw" (format nil "~ -int ftw(const char */*dirpath*/, - int (*/*fn*/)(const char *fpath, - const struct stat *sb, - int typeflag), +int ftw + (const char */*dirpath*/, + int (*/*fn*/) + (const char *fpath, const struct stat *sb, int typeflag), int /*nopenfd*/)"))) ;;;-------------------------------------------------------------------------- diff --git a/src/codegen-proto.lisp b/src/codegen-proto.lisp index e663fb5..831b23c 100644 --- a/src/codegen-proto.lisp +++ b/src/codegen-proto.lisp @@ -191,13 +191,13 @@ (defun format-compound-statement* (stream child morep thunk) (pprint-indent :block 2 stream) (pprint-newline :linear stream) (princ child stream) - (pprint-indent :block 0 stream) - (case morep - (:space - (write-char #\space stream) - (pprint-newline :linear stream)) - ((t) - (pprint-newline :mandatory stream))))))) + (pprint-indent :block 0 stream)) + (case morep + (:space + (write-char #\space stream) + (pprint-newline :linear stream)) + ((t) + (pprint-newline :mandatory stream)))))) (export 'format-compound-statement) (defmacro format-compound-statement @@ -221,10 +221,11 @@ (defun format-banner-comment (stream control &rest args) ;; prevent them from leaking. (definst var (stream :export t) (name #1=#:type &optional init) - (pprint-c-type #1# stream name) - (when init - (format stream " = ~A" init)) - (write-char #\; stream)) + (pprint-logical-block (stream nil) + (pprint-c-type #1# stream name) + (when init + (format stream " = ~2I~_~A" init)) + (write-char #\; stream))) (definst function (stream :export t) (name #1=#:type body &optional #2=#:banner &rest banner-args) @@ -240,13 +241,13 @@ (definst function (stream :export t) (definst expr (stream :export t) (#1=#:expr) (format stream "~A;" #1#)) (definst set (stream :export t) (var #1=#:expr) - (format stream "~@<~A = ~@_~2I~A;~:>" var #1#)) + (format stream "~@<~A = ~2I~_~A;~:>" var #1#)) (definst update (stream :export t) (var op #1=#:expr) - (format stream "~@<~A ~A= ~@_~2I~A;~:>" var op #1#)) + (format stream "~@<~A ~A= ~2I~_~A;~:>" var op #1#)) ;; Special kinds of expressions. (definst call (stream :export t) (#1=#:func &rest args) - (format stream "~A(~@<~{~A~^, ~_~}~:>)" #1# args)) + (format stream "~@<~A~4I~_(~@<~{~A~^, ~_~}~:>)~:>" #1# args)) (definst cond (stream :export t) (#1=#:cond conseq alt) (format stream "~@<~A ~2I~@_~@~:>" #1# conseq alt))