1 | /* |
---|
2 | * BuiltInClass.java |
---|
3 | * |
---|
4 | * Copyright (C) 2003-2007 Peter Graves |
---|
5 | * $Id: BuiltInClass.java 11488 2008-12-27 10:50:33Z ehuelsmann $ |
---|
6 | * |
---|
7 | * This program is free software; you can redistribute it and/or |
---|
8 | * modify it under the terms of the GNU General Public License |
---|
9 | * as published by the Free Software Foundation; either version 2 |
---|
10 | * of the License, or (at your option) any later version. |
---|
11 | * |
---|
12 | * This program is distributed in the hope that it will be useful, |
---|
13 | * but 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 this program; if not, write to the Free Software |
---|
19 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
---|
20 | * |
---|
21 | * As a special exception, the copyright holders of this library give you |
---|
22 | * permission to link this library with independent modules to produce an |
---|
23 | * executable, regardless of the license terms of these independent |
---|
24 | * modules, and to copy and distribute the resulting executable under |
---|
25 | * terms of your choice, provided that you also meet, for each linked |
---|
26 | * independent module, the terms and conditions of the license of that |
---|
27 | * module. An independent module is a module which is not derived from |
---|
28 | * or based on this library. If you modify this library, you may extend |
---|
29 | * this exception to your version of the library, but you are not |
---|
30 | * obligated to do so. If you do not wish to do so, delete this |
---|
31 | * exception statement from your version. |
---|
32 | */ |
---|
33 | |
---|
34 | package org.armedbear.lisp; |
---|
35 | |
---|
36 | public class BuiltInClass extends LispClass |
---|
37 | { |
---|
38 | private BuiltInClass(Symbol symbol) |
---|
39 | { |
---|
40 | super(symbol); |
---|
41 | } |
---|
42 | |
---|
43 | @Override |
---|
44 | public LispObject typeOf() |
---|
45 | { |
---|
46 | return Symbol.BUILT_IN_CLASS; |
---|
47 | } |
---|
48 | |
---|
49 | @Override |
---|
50 | public LispObject classOf() |
---|
51 | { |
---|
52 | return StandardClass.BUILT_IN_CLASS; |
---|
53 | } |
---|
54 | |
---|
55 | @Override |
---|
56 | public LispObject typep(LispObject type) throws ConditionThrowable |
---|
57 | { |
---|
58 | if (type == Symbol.BUILT_IN_CLASS) |
---|
59 | return T; |
---|
60 | if (type == StandardClass.BUILT_IN_CLASS) |
---|
61 | return T; |
---|
62 | return super.typep(type); |
---|
63 | } |
---|
64 | |
---|
65 | @Override |
---|
66 | public LispObject getDescription() throws ConditionThrowable |
---|
67 | { |
---|
68 | return new SimpleString(writeToString()); |
---|
69 | } |
---|
70 | |
---|
71 | @Override |
---|
72 | public String writeToString() throws ConditionThrowable |
---|
73 | { |
---|
74 | FastStringBuffer sb = new FastStringBuffer("#<BUILT-IN-CLASS "); |
---|
75 | sb.append(symbol.writeToString()); |
---|
76 | sb.append('>'); |
---|
77 | return sb.toString(); |
---|
78 | } |
---|
79 | |
---|
80 | private static BuiltInClass addClass(Symbol symbol) |
---|
81 | { |
---|
82 | BuiltInClass c = new BuiltInClass(symbol); |
---|
83 | addClass(symbol, c); |
---|
84 | return c; |
---|
85 | } |
---|
86 | |
---|
87 | public static final BuiltInClass CLASS_T = addClass(T); |
---|
88 | |
---|
89 | public static final BuiltInClass ARRAY = addClass(Symbol.ARRAY); |
---|
90 | public static final BuiltInClass BIGNUM = addClass(Symbol.BIGNUM); |
---|
91 | public static final BuiltInClass BASE_STRING = addClass(Symbol.BASE_STRING); |
---|
92 | public static final BuiltInClass BIT_VECTOR = addClass(Symbol.BIT_VECTOR); |
---|
93 | public static final BuiltInClass BROADCAST_STREAM = addClass(Symbol.BROADCAST_STREAM); |
---|
94 | public static final BuiltInClass CASE_FROB_STREAM = addClass(Symbol.CASE_FROB_STREAM); |
---|
95 | public static final BuiltInClass CHARACTER = addClass(Symbol.CHARACTER); |
---|
96 | public static final BuiltInClass COMPLEX = addClass(Symbol.COMPLEX); |
---|
97 | public static final BuiltInClass CONCATENATED_STREAM = addClass(Symbol.CONCATENATED_STREAM); |
---|
98 | public static final BuiltInClass CONS = addClass(Symbol.CONS); |
---|
99 | public static final BuiltInClass DOUBLE_FLOAT = addClass(Symbol.DOUBLE_FLOAT); |
---|
100 | public static final BuiltInClass ECHO_STREAM = addClass(Symbol.ECHO_STREAM); |
---|
101 | public static final BuiltInClass ENVIRONMENT = addClass(Symbol.ENVIRONMENT); |
---|
102 | public static final BuiltInClass FILE_STREAM = addClass(Symbol.FILE_STREAM); |
---|
103 | public static final BuiltInClass FIXNUM = addClass(Symbol.FIXNUM); |
---|
104 | public static final BuiltInClass FLOAT = addClass(Symbol.FLOAT); |
---|
105 | public static final BuiltInClass FUNCTION = addClass(Symbol.FUNCTION); |
---|
106 | public static final BuiltInClass HASH_TABLE = addClass(Symbol.HASH_TABLE); |
---|
107 | public static final BuiltInClass INTEGER = addClass(Symbol.INTEGER); |
---|
108 | public static final BuiltInClass JAVA_OBJECT = addClass(Symbol.JAVA_OBJECT); |
---|
109 | public static final BuiltInClass LIST = addClass(Symbol.LIST); |
---|
110 | public static final BuiltInClass LOGICAL_PATHNAME = addClass(Symbol.LOGICAL_PATHNAME); |
---|
111 | public static final BuiltInClass MAILBOX = addClass(Symbol.MAILBOX); |
---|
112 | public static final BuiltInClass METHOD_COMBINATION = addClass(Symbol.METHOD_COMBINATION); |
---|
113 | public static final BuiltInClass MUTEX = addClass(Symbol.MUTEX); |
---|
114 | public static final BuiltInClass NIL_VECTOR = addClass(Symbol.NIL_VECTOR); |
---|
115 | public static final BuiltInClass NULL = addClass(Symbol.NULL); |
---|
116 | public static final BuiltInClass NUMBER = addClass(Symbol.NUMBER); |
---|
117 | public static final BuiltInClass PACKAGE = addClass(Symbol.PACKAGE); |
---|
118 | public static final BuiltInClass PATHNAME = addClass(Symbol.PATHNAME); |
---|
119 | public static final BuiltInClass RANDOM_STATE = addClass(Symbol.RANDOM_STATE); |
---|
120 | public static final BuiltInClass RATIO = addClass(Symbol.RATIO); |
---|
121 | public static final BuiltInClass RATIONAL = addClass(Symbol.RATIONAL); |
---|
122 | public static final BuiltInClass READTABLE = addClass(Symbol.READTABLE); |
---|
123 | public static final BuiltInClass REAL = addClass(Symbol.REAL); |
---|
124 | public static final BuiltInClass RESTART = addClass(Symbol.RESTART); |
---|
125 | public static final BuiltInClass SEQUENCE = addClass(Symbol.SEQUENCE); |
---|
126 | public static final BuiltInClass SIMPLE_ARRAY = addClass(Symbol.SIMPLE_ARRAY); |
---|
127 | public static final BuiltInClass SIMPLE_BASE_STRING = addClass(Symbol.SIMPLE_BASE_STRING); |
---|
128 | public static final BuiltInClass SIMPLE_BIT_VECTOR = addClass(Symbol.SIMPLE_BIT_VECTOR); |
---|
129 | public static final BuiltInClass SIMPLE_STRING = addClass(Symbol.SIMPLE_STRING); |
---|
130 | public static final BuiltInClass SIMPLE_VECTOR = addClass(Symbol.SIMPLE_VECTOR); |
---|
131 | public static final BuiltInClass SINGLE_FLOAT = addClass(Symbol.SINGLE_FLOAT); |
---|
132 | public static final BuiltInClass SLIME_INPUT_STREAM = addClass(Symbol.SLIME_INPUT_STREAM); |
---|
133 | public static final BuiltInClass SLIME_OUTPUT_STREAM = addClass(Symbol.SLIME_OUTPUT_STREAM); |
---|
134 | public static final BuiltInClass SOCKET_STREAM = addClass(Symbol.SOCKET_STREAM); |
---|
135 | public static final BuiltInClass STREAM = addClass(Symbol.STREAM); |
---|
136 | public static final BuiltInClass STRING = addClass(Symbol.STRING); |
---|
137 | public static final BuiltInClass STRING_INPUT_STREAM = addClass(Symbol.STRING_INPUT_STREAM); |
---|
138 | public static final BuiltInClass STRING_OUTPUT_STREAM = addClass(Symbol.STRING_OUTPUT_STREAM); |
---|
139 | public static final BuiltInClass STRING_STREAM = addClass(Symbol.STRING_STREAM); |
---|
140 | public static final BuiltInClass SYMBOL = addClass(Symbol.SYMBOL); |
---|
141 | public static final BuiltInClass SYNONYM_STREAM = addClass(Symbol.SYNONYM_STREAM); |
---|
142 | public static final BuiltInClass THREAD = addClass(Symbol.THREAD); |
---|
143 | public static final BuiltInClass TWO_WAY_STREAM = addClass(Symbol.TWO_WAY_STREAM); |
---|
144 | public static final BuiltInClass VECTOR = addClass(Symbol.VECTOR); |
---|
145 | |
---|
146 | public static final StructureClass STRUCTURE_OBJECT = |
---|
147 | new StructureClass(Symbol.STRUCTURE_OBJECT, list1(CLASS_T)); |
---|
148 | static |
---|
149 | { |
---|
150 | addClass(Symbol.STRUCTURE_OBJECT, STRUCTURE_OBJECT); |
---|
151 | } |
---|
152 | |
---|
153 | static |
---|
154 | { |
---|
155 | ARRAY.setDirectSuperclass(CLASS_T); |
---|
156 | ARRAY.setCPL(ARRAY, CLASS_T); |
---|
157 | BASE_STRING.setDirectSuperclass(STRING); |
---|
158 | BASE_STRING.setCPL(BASE_STRING, STRING, VECTOR, ARRAY, SEQUENCE, CLASS_T); |
---|
159 | BIGNUM.setDirectSuperclass(INTEGER); |
---|
160 | BIGNUM.setCPL(BIGNUM, INTEGER, RATIONAL, REAL, NUMBER, CLASS_T); |
---|
161 | BIT_VECTOR.setDirectSuperclass(VECTOR); |
---|
162 | BIT_VECTOR.setCPL(BIT_VECTOR, VECTOR, ARRAY, SEQUENCE, CLASS_T); |
---|
163 | BROADCAST_STREAM.setDirectSuperclass(STREAM); |
---|
164 | BROADCAST_STREAM.setCPL(BROADCAST_STREAM, STREAM, CLASS_T); |
---|
165 | CASE_FROB_STREAM.setDirectSuperclass(STREAM); |
---|
166 | CASE_FROB_STREAM.setCPL(CASE_FROB_STREAM, STREAM, CLASS_T); |
---|
167 | CHARACTER.setDirectSuperclass(CLASS_T); |
---|
168 | CHARACTER.setCPL(CHARACTER, CLASS_T); |
---|
169 | CLASS_T.setCPL(CLASS_T); |
---|
170 | COMPLEX.setDirectSuperclass(NUMBER); |
---|
171 | COMPLEX.setCPL(COMPLEX, NUMBER, CLASS_T); |
---|
172 | CONCATENATED_STREAM.setDirectSuperclass(STREAM); |
---|
173 | CONCATENATED_STREAM.setCPL(CONCATENATED_STREAM, STREAM, CLASS_T); |
---|
174 | CONS.setDirectSuperclass(LIST); |
---|
175 | CONS.setCPL(CONS, LIST, SEQUENCE, CLASS_T); |
---|
176 | DOUBLE_FLOAT.setDirectSuperclass(FLOAT); |
---|
177 | DOUBLE_FLOAT.setCPL(DOUBLE_FLOAT, FLOAT, REAL, NUMBER, CLASS_T); |
---|
178 | ECHO_STREAM.setDirectSuperclass(STREAM); |
---|
179 | ECHO_STREAM.setCPL(ECHO_STREAM, STREAM, CLASS_T); |
---|
180 | ENVIRONMENT.setDirectSuperclass(CLASS_T); |
---|
181 | ENVIRONMENT.setCPL(ENVIRONMENT, CLASS_T); |
---|
182 | FIXNUM.setDirectSuperclass(INTEGER); |
---|
183 | FIXNUM.setCPL(FIXNUM, INTEGER, RATIONAL, REAL, NUMBER, CLASS_T); |
---|
184 | FILE_STREAM.setDirectSuperclass(STREAM); |
---|
185 | FILE_STREAM.setCPL(FILE_STREAM, STREAM, CLASS_T); |
---|
186 | FLOAT.setDirectSuperclass(REAL); |
---|
187 | FLOAT.setCPL(FLOAT, REAL, NUMBER, CLASS_T); |
---|
188 | FUNCTION.setDirectSuperclass(CLASS_T); |
---|
189 | FUNCTION.setCPL(FUNCTION, CLASS_T); |
---|
190 | HASH_TABLE.setDirectSuperclass(CLASS_T); |
---|
191 | HASH_TABLE.setCPL(HASH_TABLE, CLASS_T); |
---|
192 | INTEGER.setDirectSuperclass(RATIONAL); |
---|
193 | INTEGER.setCPL(INTEGER, RATIONAL, REAL, NUMBER, CLASS_T); |
---|
194 | JAVA_OBJECT.setDirectSuperclass(CLASS_T); |
---|
195 | JAVA_OBJECT.setCPL(JAVA_OBJECT, CLASS_T); |
---|
196 | LIST.setDirectSuperclass(SEQUENCE); |
---|
197 | LIST.setCPL(LIST, SEQUENCE, CLASS_T); |
---|
198 | LOGICAL_PATHNAME.setDirectSuperclass(PATHNAME); |
---|
199 | LOGICAL_PATHNAME.setCPL(LOGICAL_PATHNAME, PATHNAME, CLASS_T); |
---|
200 | MAILBOX.setDirectSuperclass(CLASS_T); |
---|
201 | MAILBOX.setCPL(MAILBOX, CLASS_T); |
---|
202 | METHOD_COMBINATION.setDirectSuperclass(CLASS_T); |
---|
203 | METHOD_COMBINATION.setCPL(METHOD_COMBINATION, CLASS_T); |
---|
204 | MUTEX.setDirectSuperclass(CLASS_T); |
---|
205 | MUTEX.setCPL(MUTEX, CLASS_T); |
---|
206 | NIL_VECTOR.setDirectSuperclass(STRING); |
---|
207 | NIL_VECTOR.setCPL(NIL_VECTOR, STRING, VECTOR, ARRAY, SEQUENCE, CLASS_T); |
---|
208 | NULL.setDirectSuperclass(LIST); |
---|
209 | NULL.setCPL(NULL, SYMBOL, LIST, SEQUENCE, CLASS_T); |
---|
210 | NUMBER.setDirectSuperclass(CLASS_T); |
---|
211 | NUMBER.setCPL(NUMBER, CLASS_T); |
---|
212 | PACKAGE.setDirectSuperclass(CLASS_T); |
---|
213 | PACKAGE.setCPL(PACKAGE, CLASS_T); |
---|
214 | PATHNAME.setDirectSuperclass(CLASS_T); |
---|
215 | PATHNAME.setCPL(PATHNAME, CLASS_T); |
---|
216 | RANDOM_STATE.setDirectSuperclass(CLASS_T); |
---|
217 | RANDOM_STATE.setCPL(RANDOM_STATE, CLASS_T); |
---|
218 | RATIO.setDirectSuperclass(RATIONAL); |
---|
219 | RATIO.setCPL(RATIO, RATIONAL, REAL, NUMBER, CLASS_T); |
---|
220 | RATIONAL.setDirectSuperclass(REAL); |
---|
221 | RATIONAL.setCPL(RATIONAL, REAL, NUMBER, CLASS_T); |
---|
222 | READTABLE.setDirectSuperclass(CLASS_T); |
---|
223 | READTABLE.setCPL(READTABLE, CLASS_T); |
---|
224 | REAL.setDirectSuperclass(NUMBER); |
---|
225 | REAL.setCPL(REAL, NUMBER, CLASS_T); |
---|
226 | RESTART.setDirectSuperclass(CLASS_T); |
---|
227 | RESTART.setCPL(RESTART, CLASS_T); |
---|
228 | SEQUENCE.setDirectSuperclass(CLASS_T); |
---|
229 | SEQUENCE.setCPL(SEQUENCE, CLASS_T); |
---|
230 | SIMPLE_ARRAY.setDirectSuperclass(ARRAY); |
---|
231 | SIMPLE_ARRAY.setCPL(SIMPLE_ARRAY, ARRAY, CLASS_T); |
---|
232 | SIMPLE_BASE_STRING.setDirectSuperclasses(list2(BASE_STRING, SIMPLE_STRING)); |
---|
233 | SIMPLE_BASE_STRING.setCPL(SIMPLE_BASE_STRING, BASE_STRING, SIMPLE_STRING, |
---|
234 | STRING, VECTOR, SIMPLE_ARRAY, ARRAY, SEQUENCE, |
---|
235 | CLASS_T); |
---|
236 | SIMPLE_BIT_VECTOR.setDirectSuperclasses(list2(BIT_VECTOR, SIMPLE_ARRAY)); |
---|
237 | SIMPLE_BIT_VECTOR.setCPL(SIMPLE_BIT_VECTOR, BIT_VECTOR, VECTOR, |
---|
238 | SIMPLE_ARRAY, ARRAY, SEQUENCE, CLASS_T); |
---|
239 | SIMPLE_STRING.setDirectSuperclasses(list2(STRING, SIMPLE_ARRAY)); |
---|
240 | SIMPLE_STRING.setCPL(SIMPLE_STRING, STRING, VECTOR, SIMPLE_ARRAY, ARRAY, |
---|
241 | SEQUENCE, CLASS_T); |
---|
242 | SIMPLE_VECTOR.setDirectSuperclasses(list2(VECTOR, SIMPLE_ARRAY)); |
---|
243 | SIMPLE_VECTOR.setCPL(SIMPLE_VECTOR, VECTOR, SIMPLE_ARRAY, ARRAY, SEQUENCE, |
---|
244 | CLASS_T); |
---|
245 | SINGLE_FLOAT.setDirectSuperclass(FLOAT); |
---|
246 | SINGLE_FLOAT.setCPL(SINGLE_FLOAT, FLOAT, REAL, NUMBER, CLASS_T); |
---|
247 | SLIME_INPUT_STREAM.setDirectSuperclass(STRING_STREAM); |
---|
248 | SLIME_INPUT_STREAM.setCPL(SLIME_INPUT_STREAM, STRING_STREAM, STREAM, |
---|
249 | CLASS_T); |
---|
250 | SLIME_OUTPUT_STREAM.setDirectSuperclass(STRING_STREAM); |
---|
251 | SLIME_OUTPUT_STREAM.setCPL(SLIME_OUTPUT_STREAM, STRING_STREAM, STREAM, |
---|
252 | CLASS_T); |
---|
253 | SOCKET_STREAM.setDirectSuperclass(TWO_WAY_STREAM); |
---|
254 | SOCKET_STREAM.setCPL(SOCKET_STREAM, TWO_WAY_STREAM, STREAM, CLASS_T); |
---|
255 | STREAM.setDirectSuperclass(CLASS_T); |
---|
256 | STREAM.setCPL(STREAM, CLASS_T); |
---|
257 | STRING.setDirectSuperclass(VECTOR); |
---|
258 | STRING.setCPL(STRING, VECTOR, ARRAY, SEQUENCE, CLASS_T); |
---|
259 | STRING_INPUT_STREAM.setDirectSuperclass(STRING_STREAM); |
---|
260 | STRING_INPUT_STREAM.setCPL(STRING_INPUT_STREAM, STRING_STREAM, STREAM, |
---|
261 | CLASS_T); |
---|
262 | STRING_OUTPUT_STREAM.setDirectSuperclass(STRING_STREAM); |
---|
263 | STRING_OUTPUT_STREAM.setCPL(STRING_OUTPUT_STREAM, STRING_STREAM, STREAM, |
---|
264 | CLASS_T); |
---|
265 | STRING_STREAM.setDirectSuperclass(STREAM); |
---|
266 | STRING_STREAM.setCPL(STRING_STREAM, STREAM, CLASS_T); |
---|
267 | STRUCTURE_OBJECT.setCPL(STRUCTURE_OBJECT, CLASS_T); |
---|
268 | SYMBOL.setDirectSuperclass(CLASS_T); |
---|
269 | SYMBOL.setCPL(SYMBOL, CLASS_T); |
---|
270 | SYNONYM_STREAM.setDirectSuperclass(STREAM); |
---|
271 | SYNONYM_STREAM.setCPL(SYNONYM_STREAM, STREAM, CLASS_T); |
---|
272 | THREAD.setDirectSuperclass(CLASS_T); |
---|
273 | THREAD.setCPL(THREAD, CLASS_T); |
---|
274 | TWO_WAY_STREAM.setDirectSuperclass(STREAM); |
---|
275 | TWO_WAY_STREAM.setCPL(TWO_WAY_STREAM, STREAM, CLASS_T); |
---|
276 | VECTOR.setDirectSuperclasses(list2(ARRAY, SEQUENCE)); |
---|
277 | VECTOR.setCPL(VECTOR, ARRAY, SEQUENCE, CLASS_T); |
---|
278 | } |
---|
279 | |
---|
280 | static |
---|
281 | { |
---|
282 | try |
---|
283 | { |
---|
284 | StandardClass.initializeStandardClasses(); |
---|
285 | } |
---|
286 | catch (Throwable t) |
---|
287 | { |
---|
288 | Debug.trace(t); |
---|
289 | } |
---|
290 | } |
---|
291 | } |
---|