core: Support keywords.
[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 keyword_p (SCM x)
31 {
32   return TYPE (x) == KEYWORD ? cell_t : cell_f;
33 }
34
35 SCM
36 macro_p (SCM x)
37 {
38   return TYPE (x) == MACRO ? cell_t : cell_f;
39 }
40
41 SCM
42 number_p (SCM x)
43 {
44   return TYPE (x) == NUMBER ? cell_t : cell_f;
45 }
46
47 SCM
48 pair_p (SCM x)
49 {
50   return TYPE (x) == PAIR ? cell_t : cell_f;
51 }
52
53 SCM
54 ref_p (SCM x)
55 {
56   return TYPE (x) == REF ? cell_t : cell_f;
57 }
58
59 SCM
60 string_p (SCM x)
61 {
62   return TYPE (x) == STRING ? cell_t : cell_f;
63 }
64
65 SCM
66 symbol_p (SCM x)
67 {
68   return TYPE (x) == SYMBOL ? cell_t : cell_f;
69 }
70
71 SCM
72 vector_p (SCM x)
73 {
74   return TYPE (x) == VECTOR ? cell_t : cell_f;
75 }
76
77 SCM
78 builtin_p (SCM x)
79 {
80   return TYPE (x) == FUNCTION ? cell_t : cell_f;
81 }
82
83 // Non-types
84
85 SCM
86 atom_p (SCM x)
87 {
88   return (TYPE (x) == PAIR ? cell_f : cell_t);
89 }
90
91 SCM
92 boolean_p (SCM x)
93 {
94   return (x == cell_t || x == cell_f) ? cell_t : cell_f;
95 }
96 #endif
97
98 SCM make_number (int);
99 SCM
100 mes_type_of (SCM x)
101 {
102   return make_number (TYPE (x));
103 }