]> gitweb.factorcode.org Git - factor.git/blob - library/platform/native/kernel.factor
CHAR: notation for literal chars, native parser work
[factor.git] / library / platform / native / kernel.factor
1 ! :folding=none: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: namespaces
29 DEFER: init-namespaces
30
31 IN: kernel
32 USE: arithmetic
33 USE: combinators
34 USE: errors
35 USE: lists
36 USE: logic
37 USE: namespaces
38 USE: stack
39 USE: strings
40 USE: vectors
41 USE: words
42
43 : hashcode ( obj -- hash )
44     #! If two objects are =, they must have equal hashcodes.
45     [
46         [ cons? ] [ 4 cons-hashcode ]
47         [ string? ] [ str-hashcode ]
48         [ fixnum? ] [ ( return the object ) ]
49         [ drop t ] [ drop 0 ]
50     ] cond ;
51
52 : = ( obj obj -- ? )
53     #! Push t if a is isomorphic to b.
54     2dup eq? [
55         2drop t
56     ] [
57         [
58             [ cons? ] [ cons= ]
59             [ string? ] [ str= ]
60             [ drop t ] [ 2drop f ]
61         ] cond
62     ] ifte ;
63
64 : clone ( obj -- obj )
65     [
66         [ cons? ] [ clone-list ]
67         [ vector? ] [ clone-vector ]
68         [ drop t ] [ ( return the object ) ]
69     ] cond ;
70
71 : class-of ( obj -- name )
72     [
73         [ fixnum? ] [ drop "fixnum" ]
74         [ cons?   ] [ drop "cons" ]
75         [ word?   ] [ drop "word" ]
76         [ f =     ] [ drop "f" ]
77         [ t =     ] [ drop "t" ]
78         [ vector? ] [ drop "vector" ]
79         [ string? ] [ drop "string" ]
80         [ sbuf?   ] [ drop "sbuf" ]
81         [ handle? ] [ drop "handle" ]
82         [ drop t  ] [ drop "unknown" ]
83     ] cond ;
84
85 : toplevel ( -- )
86     init-namespaces
87     init-errors
88     0 <vector> set-datastack
89     0 <vector> set-callstack ;
90
91 : java? f ;
92 : native? t ;
93
94 ! No compiler...
95 : inline ;
96 : interpret-only ;
97
98 ! HACKS
99
100 IN: strings
101 : char? drop f ;
102 : >char ;
103 : >upper ;
104 : >lower ;
105 IN: lists
106 : sort ;