]> gitweb.factorcode.org Git - factor.git/blob - library/platform/native/unparser.factor
d3ea7ca55d1fbd520dc67b605532f3e4fe76082d
[factor.git] / library / platform / native / unparser.factor
1 !:folding=indent:collapseFolds=1:
2
3 ! $Id$
4 !
5 ! Copyright (C) 2004 Slava Pestov.
6
7 ! Redistribution and use in source and binary forms, with or without
8 ! modification, are permitted provided that the following conditions are met:
9
10 ! 1. Redistributions of source code must retain the above copyright notice,
11 !    this list of conditions and the following disclaimer.
12
13 ! 2. Redistributions in binary form must reproduce the above copyright notice,
14 !    this list of conditions and the following disclaimer in the documentation
15 !    and/or other materials provided with the distribution.
16
17 ! THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
18 ! INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
19 ! FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
20 ! DEVELOPERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 ! SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22 ! PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
23 ! OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24 ! WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
25 ! OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
26 ! ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
28 IN: unparser
29 USE: arithmetic
30 USE: combinators
31 USE: kernel
32 USE: lists
33 USE: logic
34 USE: namespaces
35 USE: parser
36 USE: stack
37 USE: stdio
38 USE: strings
39 USE: words
40 USE: vocabularies
41
42 : fixnum% ( num -- )
43     "base" get /mod swap dup 0 > [
44         fixnum%
45     ] [
46         drop
47     ] ifte >digit % ;
48
49 : fixnum- ( num -- num )
50     dup 0 < [ "-" % neg ] when ;
51
52 : fixnum>str ( num -- str )
53     <% fixnum- fixnum% %> ;
54
55 : unparse-str ( str -- str )
56     #! Not done
57     <% #\" % % #\" % %> ;
58
59 : unparse-word ( word -- str )
60     word-name dup "#<unnamed>" ? ;
61
62 : unparse ( obj -- str )
63     [
64         [ t eq?   ] [ drop "t" ]
65         [ f eq?   ] [ drop "f" ]
66         [ word?   ] [ unparse-word ]
67         [ fixnum? ] [ fixnum>str ]
68         [ string? ] [ unparse-str ]
69         [ drop t  ] [ <% "#<" % class-of % ">" % %> ]
70     ] cond ;