Closure is not a pair.
[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 closure_p (SCM x)
31 {
32   return (TYPE (x) == PAIR && CAR (x) == cell_closure) ? cell_t : cell_f;
33 }
34
35 SCM
36 mes_car (SCM x)
37 {
38   return CAR (x);
39 }
40
41 SCM
42 mes_cdr (SCM x)
43 {
44   return CDR (x);
45 }
46
47 SCM
48 keyword_p (SCM x)
49 {
50   return TYPE (x) == KEYWORD ? cell_t : cell_f;
51 }
52
53 SCM
54 macro_p (SCM x)
55 {
56   return TYPE (x) == MACRO ? cell_t : cell_f;
57 }
58
59 SCM
60 number_p (SCM x)
61 {
62   return TYPE (x) == NUMBER ? cell_t : cell_f;
63 }
64
65 SCM
66 pair_p (SCM x)
67 {
68   return (TYPE (x) == PAIR && CAR (x) != cell_closure) ? cell_t : cell_f;
69 }
70
71 SCM
72 ref_p (SCM x)
73 {
74   return TYPE (x) == REF ? cell_t : cell_f;
75 }
76
77 SCM
78 string_p (SCM x)
79 {
80   return TYPE (x) == STRING ? cell_t : cell_f;
81 }
82
83 SCM
84 symbol_p (SCM x)
85 {
86   return TYPE (x) == SYMBOL ? cell_t : cell_f;
87 }
88
89 SCM
90 vector_p (SCM x)
91 {
92   return TYPE (x) == VECTOR ? cell_t : cell_f;
93 }
94
95 SCM
96 builtin_p (SCM x)
97 {
98   return TYPE (x) == FUNCTION ? cell_t : cell_f;
99 }
100
101 // Non-types
102
103 SCM
104 atom_p (SCM x)
105 {
106   return (TYPE (x) == PAIR ? cell_f : cell_t);
107 }
108
109 SCM
110 boolean_p (SCM x)
111 {
112   return (x == cell_t || x == cell_f) ? cell_t : cell_f;
113 }
114 #endif
115
116 SCM make_number (int);
117 SCM
118 mes_type_of (SCM x)
119 {
120   return make_number (TYPE (x));
121 }