Artifact
a3d716dbc4f3760ac849bc63817bae3c80b0cd36:
- File
fmt/c.sls
— part of check-in
[cd7a31d87b]
at
2017-05-03 18:01:41
on branch trunk
— many fixes to usb.sls
(user:
aldo
size: 1539)
0000: 3b 3b 3b 3b 20 66 6d 74 2d 63 2e 73 63 6d 20 2d ;;;; fmt-c.scm -
0010: 2d 20 66 6d 74 20 6d 6f 64 75 6c 65 20 66 6f 72 - fmt module for
0020: 20 65 6d 69 74 74 69 6e 67 2f 70 72 65 74 74 79 emitting/pretty
0030: 2d 70 72 69 6e 74 69 6e 67 20 43 20 63 6f 64 65 -printing C code
0040: 0a 3b 3b 0a 3b 3b 20 43 6f 70 79 72 69 67 68 74 .;;.;; Copyright
0050: 20 28 63 29 20 32 30 30 37 20 41 6c 65 78 20 53 (c) 2007 Alex S
0060: 68 69 6e 6e 2e 20 20 41 6c 6c 20 72 69 67 68 74 hinn. All right
0070: 73 20 72 65 73 65 72 76 65 64 2e 0a 3b 3b 20 42 s reserved..;; B
0080: 53 44 2d 73 74 79 6c 65 20 6c 69 63 65 6e 73 65 SD-style license
0090: 3a 20 68 74 74 70 3a 2f 2f 73 79 6e 74 68 63 6f : http://synthco
00a0: 64 65 2e 63 6f 6d 2f 6c 69 63 65 6e 73 65 2e 74 de.com/license.t
00b0: 78 74 0a 0a 23 21 72 36 72 73 0a 28 6c 69 62 72 xt..#!r6rs.(libr
00c0: 61 72 79 0a 20 28 66 6d 74 20 63 29 0a 20 28 65 ary. (fmt c). (e
00d0: 78 70 6f 72 74 0a 20 20 66 6d 74 2d 69 6e 2d 6d xport. fmt-in-m
00e0: 61 63 72 6f 3f 20 66 6d 74 2d 65 78 70 72 65 73 acro? fmt-expres
00f0: 73 69 6f 6e 3f 20 66 6d 74 2d 72 65 74 75 72 6e sion? fmt-return
0100: 3f 20 66 6d 74 2d 64 65 66 61 75 6c 74 2d 74 79 ? fmt-default-ty
0110: 70 65 0a 20 20 66 6d 74 2d 6e 65 77 6c 69 6e 65 pe. fmt-newline
0120: 2d 62 65 66 6f 72 65 2d 62 72 61 63 65 3f 20 66 -before-brace? f
0130: 6d 74 2d 62 72 61 63 65 6c 65 73 73 2d 62 6f 64 mt-braceless-bod
0140: 69 65 73 3f 0a 20 20 66 6d 74 2d 69 6e 64 65 6e ies?. fmt-inden
0150: 74 2d 73 70 61 63 65 20 66 6d 74 2d 73 77 69 74 t-space fmt-swit
0160: 63 68 2d 69 6e 64 65 6e 74 2d 73 70 61 63 65 20 ch-indent-space
0170: 66 6d 74 2d 6f 70 20 66 6d 74 2d 67 65 6e 0a 20 fmt-op fmt-gen.
0180: 20 63 2d 69 6e 2d 65 78 70 72 20 63 2d 69 6e 2d c-in-expr c-in-
0190: 73 74 6d 74 20 63 2d 69 6e 2d 74 65 73 74 0a 20 stmt c-in-test.
01a0: 20 63 2d 70 61 72 65 6e 20 63 2d 6d 61 79 62 65 c-paren c-maybe
01b0: 2d 70 61 72 65 6e 20 63 2d 74 79 70 65 20 63 2d -paren c-type c-
01c0: 6c 69 74 65 72 61 6c 3f 20 63 2d 6c 69 74 65 72 literal? c-liter
01d0: 61 6c 20 63 68 61 72 2d 3e 63 2d 63 68 61 72 0a al char->c-char.
01e0: 20 20 63 2d 73 74 72 75 63 74 20 63 2d 75 6e 69 c-struct c-uni
01f0: 6f 6e 20 63 2d 63 6c 61 73 73 20 63 2d 65 6e 75 on c-class c-enu
0200: 6d 20 63 2d 74 79 70 65 64 65 66 20 63 2d 63 61 m c-typedef c-ca
0210: 73 74 0a 20 20 63 2d 65 78 70 72 20 63 2d 65 78 st. c-expr c-ex
0220: 70 72 2f 73 65 78 70 20 63 2d 61 70 70 6c 79 20 pr/sexp c-apply
0230: 63 2d 6f 70 20 63 2d 69 6e 64 65 6e 74 20 63 2d c-op c-indent c-
0240: 63 75 72 72 65 6e 74 2d 69 6e 64 65 6e 74 2d 73 current-indent-s
0250: 74 72 69 6e 67 0a 20 20 63 2d 77 72 61 70 2d 73 tring. c-wrap-s
0260: 74 6d 74 20 63 2d 6f 70 65 6e 2d 62 72 61 63 65 tmt c-open-brace
0270: 20 63 2d 63 6c 6f 73 65 2d 62 72 61 63 65 0a 20 c-close-brace.
0280: 20 63 2d 62 6c 6f 63 6b 20 63 2d 62 72 61 63 65 c-block c-brace
0290: 64 2d 62 6c 6f 63 6b 20 63 2d 62 65 67 69 6e 0a d-block c-begin.
02a0: 20 20 63 2d 66 75 6e 20 63 2d 76 61 72 20 63 2d c-fun c-var c-
02b0: 70 72 6f 74 6f 74 79 70 65 20 63 2d 70 61 72 61 prototype c-para
02c0: 6d 20 63 2d 70 61 72 61 6d 2d 6c 69 73 74 0a 20 m c-param-list.
02d0: 20 63 2d 77 68 69 6c 65 20 63 2d 66 6f 72 20 63 c-while c-for c
02e0: 2d 69 66 20 63 2d 73 77 69 74 63 68 0a 20 20 63 -if c-switch. c
02f0: 2d 63 61 73 65 20 63 2d 63 61 73 65 2f 66 61 6c -case c-case/fal
0300: 6c 74 68 72 6f 75 67 68 20 63 2d 64 65 66 61 75 lthrough c-defau
0310: 6c 74 0a 20 20 63 2d 62 72 65 61 6b 20 63 2d 63 lt. c-break c-c
0320: 6f 6e 74 69 6e 75 65 20 63 2d 72 65 74 75 72 6e ontinue c-return
0330: 20 63 2d 67 6f 74 6f 20 63 2d 6c 61 62 65 6c 0a c-goto c-label.
0340: 20 20 63 2d 73 74 61 74 69 63 20 63 2d 63 6f 6e c-static c-con
0350: 73 74 20 63 2d 65 78 74 65 72 6e 20 63 2d 76 6f st c-extern c-vo
0360: 6c 61 74 69 6c 65 20 63 2d 61 75 74 6f 20 63 2d latile c-auto c-
0370: 72 65 73 74 72 69 63 74 20 63 2d 69 6e 6c 69 6e restrict c-inlin
0380: 65 0a 20 20 63 2b 2b 20 63 2d 2d 20 63 2b 20 63 e. c++ c-- c+ c
0390: 2d 20 63 2a 20 63 2f 20 63 25 20 63 26 20 63 5e - c* c/ c% c& c^
03a0: 20 63 7e 20 63 21 20 63 26 26 20 63 3c 3c 20 63 c~ c! c&& c<< c
03b0: 3e 3e 20 63 3d 3d 20 63 21 3d 20 3b 20 20 7c 63 >> c== c!= ; |c
03c0: 5c 7c 7c 20 20 7c 63 5c 7c 5c 7c 7c 0a 20 20 63 \|| |c\|\||. c
03d0: 3c 20 63 3e 20 63 3c 3d 20 63 3e 3d 20 63 3d 20 < c> c<= c>= c=
03e0: 63 2b 3d 20 63 2d 3d 20 63 2a 3d 20 63 2f 3d 20 c+= c-= c*= c/=
03f0: 63 25 3d 20 63 26 3d 20 63 5e 3d 20 63 3c 3c 3d c%= c&= c^= c<<=
0400: 20 63 3e 3e 3d 20 3b 2b 2b 63 20 2d 2d 63 20 3b c>>= ;++c --c ;
0410: 20 20 7c 63 5c 7c 3d 7c 0a 20 20 63 2b 2b 2f 70 |c\|=|. c++/p
0420: 6f 73 74 20 63 2d 2d 2f 70 6f 73 74 20 63 2e 20 ost c--/post c.
0430: 63 2d 3e 0a 20 20 63 2d 62 69 74 2d 6f 72 20 63 c->. c-bit-or c
0440: 2d 6f 72 20 63 2d 62 69 74 2d 6f 72 3d 0a 20 20 -or c-bit-or=.
0450: 63 70 70 2d 69 66 20 63 70 70 2d 69 66 64 65 66 cpp-if cpp-ifdef
0460: 20 63 70 70 2d 69 66 6e 64 65 66 20 63 70 70 2d cpp-ifndef cpp-
0470: 65 6c 69 66 20 63 70 70 2d 65 6e 64 69 66 20 63 elif cpp-endif c
0480: 70 70 2d 65 6c 73 65 20 63 70 70 2d 75 6e 64 65 pp-else cpp-unde
0490: 66 0a 20 20 63 70 70 2d 69 6e 63 6c 75 64 65 20 f. cpp-include
04a0: 63 70 70 2d 64 65 66 69 6e 65 20 63 70 70 2d 77 cpp-define cpp-w
04b0: 72 61 70 2d 68 65 61 64 65 72 20 63 70 70 2d 70 rap-header cpp-p
04c0: 72 61 67 6d 61 20 63 70 70 2d 6c 69 6e 65 0a 20 ragma cpp-line.
04d0: 20 63 70 70 2d 65 72 72 6f 72 20 63 70 70 2d 77 cpp-error cpp-w
04e0: 61 72 6e 69 6e 67 20 63 70 70 2d 73 74 72 69 6e arning cpp-strin
04f0: 67 69 66 79 20 63 70 70 2d 73 79 6d 2d 63 61 74 gify cpp-sym-cat
0500: 0a 20 20 63 2d 63 6f 6d 6d 65 6e 74 20 63 2d 62 . c-comment c-b
0510: 6c 6f 63 6b 2d 63 6f 6d 6d 65 6e 74 20 63 2d 61 lock-comment c-a
0520: 74 74 72 69 62 75 74 65 0a 20 20 29 0a 0a 20 28 ttribute. ).. (
0530: 69 6d 70 6f 72 74 20 28 63 68 65 7a 73 63 68 65 import (chezsche
0540: 6d 65 29 20 0a 09 20 28 66 6d 74 20 66 6d 74 29 me) .. (fmt fmt)
0550: 0a 09 20 28 73 72 66 69 20 70 72 69 76 61 74 65 .. (srfi private
0560: 20 69 6e 63 6c 75 64 65 29 0a 09 20 28 6f 6e 6c include).. (onl
0570: 79 20 28 73 72 66 69 20 73 31 20 6c 69 73 74 73 y (srfi s1 lists
0580: 29 20 65 76 65 72 79 29 0a 09 20 28 6f 6e 6c 79 ) every).. (only
0590: 20 28 73 72 66 69 20 73 31 33 20 73 74 72 69 6e (srfi s13 strin
05a0: 67 73 29 20 73 75 62 73 74 72 69 6e 67 2f 73 68 gs) substring/sh
05b0: 61 72 65 64 20 73 74 72 69 6e 67 2d 69 6e 64 65 ared string-inde
05c0: 78 20 73 74 72 69 6e 67 2d 69 6e 64 65 78 2d 72 x string-index-r
05d0: 69 67 68 74 29 29 0a 0a 20 28 69 6e 63 6c 75 64 ight)).. (includ
05e0: 65 2f 72 65 73 6f 6c 76 65 20 28 22 66 6d 74 22 e/resolve ("fmt"
05f0: 29 20 22 66 6d 74 2d 63 2e 73 63 6d 22 29 0a 0a ) "fmt-c.scm")..
0600: 20 29 0a ).