Merge branch 'master' of git://factorcode.org/git/factor
[factor/jcg.git] / basis / locals / prettyprint / prettyprint.factor
blob187b663c3c60f9888da19da695a3072d22926b13
1 ! Copyright (C) 2007, 2008 Slava Pestov, Eduardo Cavazos.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors assocs kernel locals locals.types
4 prettyprint.backend prettyprint.sections prettyprint.custom
5 sequences words ;
6 IN: locals.prettyprint
8 SYMBOL: |
10 : pprint-var ( var -- )
11     #! Prettyprint a read/write local as its writer, just like
12     #! in the input syntax: [| x! | ... x 3 + x! ]
13     dup local-reader? [
14         "local-writer" word-prop
15     ] when pprint-word ;
17 : pprint-vars ( vars -- ) [ pprint-var ] each ;
19 M: lambda pprint*
20     <flow
21     \ [| pprint-word
22     dup vars>> pprint-vars
23     \ | pprint-word
24     f <inset body>> pprint-elements block>
25     \ ] pprint-word
26     block> ;
28 : pprint-let ( let word -- )
29     pprint-word
30     [ body>> ] [ bindings>> ] bi
31     \ | pprint-word
32     t <inset
33     <block
34     [ <block [ pprint-var ] dip pprint* block> ] assoc-each
35     block>
36     \ | pprint-word
37     <block pprint-elements block>
38     block>
39     \ ] pprint-word ;
41 M: let pprint* \ [let pprint-let ;
43 M: wlet pprint* \ [wlet pprint-let ;
45 M: let* pprint* \ [let* pprint-let ;
47 M: def pprint*
48     <block \ :> pprint-word local>> pprint-word block> ;