core: Cleanup cells.
[mes.git] / type.c
1 /* -*-comment-start: "//";comment-end:""-*-
2  * Mes --- Maxwell Equations of Software
3  * Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
4  *
5  * This file is part of Mes.
6  *
7  * Mes is free software; you can redistribute it and/or modify it
8  * under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 3 of the License, or (at
10  * your option) any later version.
11  *
12  * Mes is distributed in the hope that it will be useful, but
13  * WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with Mes.  If not, see <http://www.gnu.org/licenses/>.
19  */
20
21 #if !TYPE0
22
23 SCM
24 char_p (SCM x)
25 {
26   return TYPE (x) == CHAR ? cell_t : cell_f;
27 }
28
29 SCM
30 macro_p (SCM x)
31 {
32   return TYPE (x) == MACRO ? cell_t : cell_f;
33 }
34
35 SCM
36 number_p (SCM x)
37 {
38   return TYPE (x) == NUMBER ? cell_t : cell_f;
39 }
40
41 SCM
42 pair_p (SCM x)
43 {
44   return TYPE (x) == PAIR ? cell_t : cell_f;
45 }
46
47 SCM
48 ref_p (SCM x)
49 {
50   return TYPE (x) == REF ? cell_t : cell_f;
51 }
52
53 SCM
54 string_p (SCM x)
55 {
56   return TYPE (x) == STRING ? cell_t : cell_f;
57 }
58
59 SCM
60 symbol_p (SCM x)
61 {
62   return TYPE (x) == SYMBOL ? cell_t : cell_f;
63 }
64
65 SCM
66 vector_p (SCM x)
67 {
68   return TYPE (x) == VECTOR ? cell_t : cell_f;
69 }
70
71 SCM
72 builtin_p (SCM x)
73 {
74   return TYPE (x) == FUNCTION ? cell_t : cell_f;
75 }
76
77 // Non-types
78 SCM
79 null_p (SCM x)
80 {
81   return x == cell_nil ? cell_t : cell_f;
82 }
83
84 SCM
85 atom_p (SCM x)
86 {
87   return (TYPE (x) == PAIR ? cell_f : cell_t);
88 }
89
90 SCM
91 boolean_p (SCM x)
92 {
93   return (x == cell_t || x == cell_f) ? cell_t : cell_f;
94 }
95 #endif
96
97 SCM make_number (int);
98 SCM
99 mes_type_of (SCM x)
100 {
101   return make_number (TYPE (x));
102 }