]> gitweb.factorcode.org Git - factor.git/blob - basis/locals/prettyprint/prettyprint.factor
3a6e601dea97a8054047e247c236c554e3c4b2f6
[factor.git] / basis / locals / prettyprint / prettyprint.factor
1 ! Copyright (C) 2007, 2008 Slava Pestov, Eduardo Cavazos.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors combinators kernel locals locals.types math
4 prettyprint.backend prettyprint.custom prettyprint.sections
5 sequences words ;
6 IN: locals.prettyprint
7
8 : pprint-var ( var -- )
9     ! Prettyprint a read/write local as its writer, just like
10     ! in the input syntax: [| x! | ... x 3 + x! ]
11     dup local-reader? [
12         "local-writer" word-prop
13     ] when pprint-word ;
14
15 : pprint-vars ( vars -- ) [ pprint-var ] each ;
16
17 M: lambda pprint*
18     <flow
19     \ [| pprint-word
20     dup vars>> pprint-vars
21     "|" text
22     f <inset body>> pprint-elements block>
23     \ ] pprint-word
24     block> ;
25
26 : pprint-let ( let word -- )
27     pprint-word
28     <block body>> pprint-elements block>
29     \ ] pprint-word ;
30
31 M: let pprint* \ [let pprint-let ;
32
33 M: multi-def pprint*
34     dup locals>> [ word? ] all? [
35         <block \ :> pprint-word locals>> {
36             [ length 1 > [ "(" text ] when ]
37             [ [ pprint-var ] each ]
38             [ length 1 > [ ")" text ] when ]
39         } cleave block>
40     ] [ pprint-tuple ] if ;