Initial revision
[sbcl.git] / src / pcl / generic-functions.lisp
1 ;;;; Mostly this file contains generic functions. The exceptions are hacks.
2
3 ;;;; This software is part of the SBCL system. See the README file for
4 ;;;; more information.
5
6 ;;;; This software is in the public domain and is provided with absolutely no
7 ;;;; warranty. See the COPYING and CREDITS files for more information.
8
9 (in-package "SB-PCL")
10
11 (sb-int:file-comment
12   "$Header$")
13 \f
14 ;;;; class predicates
15
16 (defgeneric class-eq-specializer-p (object))
17
18 (defgeneric classp (object))
19
20 (defgeneric eql-specializer-p (object))
21
22 (defgeneric exact-class-specializer-p (object))
23
24 (defgeneric forward-referenced-class-p (object))
25
26 (defgeneric funcallable-standard-class-p (object))
27
28 (defgeneric generic-function-p (object))
29
30 (defgeneric legal-lambda-list-p (object x))
31
32 (defgeneric method-combination-p (object))
33
34 (defgeneric method-p (object))
35
36 (defgeneric short-method-combination-p (object))
37
38 (defgeneric slot-class-p (object))
39
40 (defgeneric specializerp (object))
41
42 (defgeneric standard-accessor-method-p (object))
43
44 (defgeneric standard-boundp-method-p (object))
45
46 (defgeneric standard-class-p (object))
47
48 (defgeneric standard-generic-function-p (object))
49
50 (defgeneric standard-method-p (object))
51
52 (defgeneric standard-reader-method-p (object))
53
54 (defgeneric standard-writer-method-p (object))
55
56 (defgeneric structure-class-p (object))
57 \f
58 ;;;; readers
59
60 (defgeneric accessor-method-slot-definition (standard-accessor-method))
61
62 (defgeneric class-can-precede-list (pcl-class))
63
64 (defgeneric class-defstruct-constructor (structure-class))
65
66 (defgeneric class-defstruct-form (structure-class))
67
68 (defgeneric class-direct-subclasses (class))
69
70 (defgeneric class-direct-superclasses (class))
71
72 (defgeneric class-eq-specializer (class))
73
74 (defgeneric class-incompatible-superclass-list (pcl-class))
75
76 (defgeneric class-initialize-info (slot-class))
77
78 (defgeneric class-name (class))
79
80 (defgeneric class-precedence-list (pcl-class))
81
82 (defgeneric class-predicate-name (class))
83
84 (defgeneric class-wrapper (pcl-class))
85
86 (defgeneric definition-source (definition-source-mixin))
87
88 (defgeneric eql-specializer-object (eql-specializer))
89
90 (defgeneric generic-function-method-class (standard-generic-function))
91
92 (defgeneric generic-function-method-combination (standard-generic-function))
93
94 (defgeneric generic-function-methods (standard-generic-function))
95
96 (defgeneric generic-function-name (standard-generic-function))
97
98 (defgeneric gf-arg-info (standard-generic-function))
99
100 (defgeneric gf-dfun-state (standard-generic-function))
101
102 (defgeneric gf-pretty-arglist (standard-generic-function))
103
104 (defgeneric long-method-combination-function (long-method-combination))
105
106 (defgeneric method-combination-documentation (standard-method-combination))
107
108 (defgeneric method-combination-options (standard-method-combination))
109
110 (defgeneric method-combination-type (standard-method-combination))
111
112 (defgeneric method-fast-function (standard-method))
113
114 (defgeneric method-generic-function (standard-method))
115
116 (defgeneric object-plist (plist-mixin))
117
118 (defgeneric short-combination-identity-with-one-argument
119   (short-method-combination))
120
121 (defgeneric short-combination-operator (short-method-combination))
122
123 (defgeneric slot-definition-boundp-function (effective-slot-definition))
124
125 (defgeneric slot-definition-class (slot-definition))
126
127 (defgeneric slot-definition-defstruct-accessor-symbol
128   (structure-slot-definition))
129
130 (defgeneric slot-definition-initargs (slot-definition))
131
132 (defgeneric slot-definition-initform (slot-definition))
133
134 (defgeneric slot-definition-initfunction (slot-definition))
135
136 (defgeneric slot-definition-internal-reader-function
137   (structure-slot-definition))
138
139 (defgeneric slot-definition-internal-writer-function
140   (structure-slot-definition))
141
142 (defgeneric slot-definition-location (standard-effective-slot-definition))
143
144 (defgeneric slot-definition-name (slot-definition))
145
146 (defgeneric slot-definition-reader-function (effective-slot-definition))
147
148 (defgeneric slot-definition-readers (slot-definition))
149
150 (defgeneric slot-definition-type (slot-definition))
151
152 (defgeneric slot-definition-writer-function (effective-slot-definition))
153
154 (defgeneric slot-definition-writers (slot-definition))
155
156 (defgeneric specializer-object (class-eq-specializer))
157
158 (defgeneric specializer-type (specializer))
159 \f
160 ;;;; writers
161
162 (defgeneric (setf class-defstruct-constructor) (new-value structure-class))
163
164 (defgeneric (setf class-defstruct-form) (new-value structure-class))
165
166 (defgeneric (setf class-direct-slots) (new-value slot-class))
167
168 (defgeneric (setf class-incompatible-superclass-list) (new-value pcl-class))
169
170 (defgeneric (setf class-initialize-info) (new-value slot-class))
171
172 (defgeneric (setf class-name) (new-value class))
173
174 (defgeneric (setf class-slots) (new-value slot-class))
175
176 (defgeneric (setf generic-function-method-class) (new-value
177                                                   standard-generic-function))
178
179 (defgeneric (setf generic-function-method-combination)
180   (new-value standard-generic-function))
181
182 (defgeneric (setf generic-function-methods) (new-value
183                                              standard-generic-function))
184
185 (defgeneric (setf generic-function-name) (new-value standard-generic-function))
186
187 (defgeneric (setf gf-dfun-state) (new-value standard-generic-function))
188
189 (defgeneric (setf gf-pretty-arglist) (new-value standard-generic-function))
190
191 (defgeneric (setf method-generic-function) (new-value standard-method))
192
193 (defgeneric (setf object-plist) (new-value plist-mixin))
194
195 (defgeneric (setf slot-definition-allocation) (new-value
196                                                standard-slot-definition))
197
198 (defgeneric (setf slot-definition-boundp-function)
199   (new-value effective-slot-definition))
200
201 (defgeneric (setf slot-definition-class) (new-value slot-definition))
202
203 (defgeneric (setf slot-definition-defstruct-accessor-symbol)
204   (new-value structure-slot-definition))
205
206 (defgeneric (setf slot-definition-initargs) (new-value slot-definition))
207
208 (defgeneric (setf slot-definition-initform) (new-value slot-definition))
209
210 (defgeneric (setf slot-definition-initfunction) (new-value slot-definition))
211
212 (defgeneric (setf slot-definition-internal-reader-function)
213   (new-value structure-slot-definition))
214
215 (defgeneric (setf slot-definition-internal-writer-function)
216   (new-value structure-slot-definition))
217
218 (defgeneric (setf slot-definition-location)
219   (new-value standard-effective-slot-definition))
220
221 (defgeneric (setf slot-definition-name) (new-value slot-definition))
222
223 (defgeneric (setf slot-definition-reader-function) (new-value
224                                                     effective-slot-definition))
225
226 (defgeneric (setf slot-definition-readers) (new-value slot-definition))
227
228 (defgeneric (setf slot-definition-type) (new-value slot-definition))
229
230 (defgeneric (setf slot-definition-writer-function)
231   (new-value effective-slot-definition))
232
233 (defgeneric (setf slot-definition-writers) (new-value slot-definition))
234 \f
235 ;;;; 1 argument
236
237 (defgeneric accessor-method-class (method))
238
239 (defgeneric accessor-method-slot-name (m))
240
241 (defgeneric class-constructors (class))
242
243 (defgeneric class-default-initargs (class))
244
245 (defgeneric class-direct-default-initargs (class))
246
247 (defgeneric class-direct-slots (class))
248
249 (defgeneric class-finalized-p (class))
250
251 (defgeneric class-prototype (class))
252
253 (defgeneric class-slot-cells (class))
254
255 (defgeneric class-slots (class))
256
257 (defgeneric compute-class-precedence-list (root))
258
259 (defgeneric compute-default-initargs (class))
260
261 (defgeneric compute-discriminating-function (gf))
262
263 (defgeneric compute-discriminating-function-arglist-info (generic-function))
264
265 (defgeneric compute-slots (class))
266
267 (defgeneric finalize-inheritance (class))
268
269 (defgeneric function-keywords (method))
270
271 (defgeneric generic-function-lambda-list (gf))
272
273 (defgeneric generic-function-pretty-arglist (generic-function))
274
275 (defgeneric gf-fast-method-function-p (gf))
276
277 (defgeneric initialize-internal-slot-functions (slotd))
278
279 (defgeneric make-instances-obsolete (class))
280
281 (defgeneric method-function (method))
282
283 (defgeneric method-lambda-list (m))
284
285 (defgeneric method-pretty-arglist (method))
286
287 (defgeneric method-qualifiers (m))
288
289 (defgeneric method-specializers (m))
290
291 (defgeneric raw-instance-allocator (class))
292
293 (defgeneric slot-definition-allocation (slotd))
294
295 (defgeneric slots-fetcher (class))
296
297 (defgeneric specializer-class (specializer))
298
299 (defgeneric specializer-direct-generic-functions (specializer))
300
301 (defgeneric specializer-direct-methods (specializer))
302
303 (defgeneric specializer-method-table (specializer))
304
305 (defgeneric update-constructors (class))
306
307 (defgeneric wrapper-fetcher (class))
308 \f
309 ;;;; 2 arguments
310
311 (defgeneric add-dependent (metaobject dependent))
312
313 (defgeneric add-direct-method (specializer method))
314
315 (defgeneric add-direct-subclass (class subclass))
316
317 (defgeneric add-method (generic-function method))
318
319 (defgeneric change-class (instance new-class-name))
320
321 (defgeneric class-slot-value (class slot-name))
322
323 (defgeneric compatible-meta-class-change-p (class proto-new-class))
324
325 (defgeneric compute-applicable-methods (generic-function arguments))
326
327 (defgeneric compute-applicable-methods-using-classes
328   (generic-function classes))
329
330 (defgeneric compute-effective-slot-definition (class dslotds))
331
332 (defgeneric compute-effective-slot-definition-initargs (class direct-slotds))
333
334 (defgeneric default-initargs (class supplied-initargs))
335
336 (defgeneric describe-object (object stream))
337
338 (defgeneric direct-slot-definition-class (class initargs))
339
340 (defgeneric effective-slot-definition-class (class initargs))
341
342 (defgeneric inform-type-system-about-class (class name))
343
344 (defgeneric legal-documentation-p (object x))
345
346 (defgeneric legal-method-function-p (object x))
347
348 (defgeneric legal-qualifier-p (object x))
349
350 (defgeneric legal-qualifiers-p (object x))
351
352 (defgeneric legal-slot-name-p (object x))
353
354 (defgeneric legal-specializer-p (object x))
355
356 (defgeneric legal-specializers-p (object x))
357
358 (defgeneric make-boundp-method-function (class slot-name))
359
360 (defgeneric make-reader-method-function (class slot-name))
361
362 (defgeneric make-writer-method-function (class slot-name))
363
364 (defgeneric map-dependents (metaobject function))
365
366 (defgeneric remove-boundp-method (class generic-function))
367
368 (defgeneric remove-dependent (metaobject dependent))
369
370 (defgeneric remove-direct-method (specializer method))
371
372 (defgeneric remove-direct-subclass (class subclass))
373
374 (defgeneric remove-method (generic-function method))
375
376 (defgeneric remove-reader-method (class generic-function))
377
378 (defgeneric remove-writer-method (class generic-function))
379
380 (defgeneric same-specializer-p (specl1 specl2))
381
382 (defgeneric slot-accessor-function (slotd type))
383
384 (defgeneric slot-accessor-std-p (slotd type))
385
386 ;;; This controls DESCRIBE-OBJECT (SLOT-OBJECT STREAM) behavior.
387 (defgeneric slots-to-inspect (class object))
388
389 (defgeneric update-gf-dfun (class gf))
390
391 (defgeneric validate-superclass (fsc class))
392
393 (defgeneric (setf documentation) (new-value slotd doc-type)
394   (:argument-precedence-order doc-type slotd new-value))
395
396 (defgeneric documentation (slotd doc-type)
397   (:argument-precedence-order doc-type slotd))
398 \f
399 ;;;; 3 arguments
400
401 (defgeneric add-boundp-method (class generic-function slot-name))
402
403 (defgeneric add-reader-method (class generic-function slot-name))
404
405 (defgeneric add-writer-method (class generic-function slot-name))
406
407 (defgeneric (setf class-slot-value) (nv class slot-name))
408
409 (defgeneric compute-effective-method (generic-function
410                                       combin
411                                       applicable-methods))
412
413 (defgeneric compute-slot-accessor-info (slotd type gf))
414
415 (defgeneric find-method-combination (generic-function type options))
416
417 (defgeneric (setf slot-accessor-function) (function slotd type))
418
419 (defgeneric (setf slot-accessor-std-p) (value slotd type))
420
421 (defgeneric slot-boundp-using-class (class object slotd))
422
423 (defgeneric slot-makunbound-using-class (class object slotd))
424
425 (defgeneric slot-unbound (class instance slot-name))
426
427 (defgeneric slot-value-using-class (class object slotd))
428 \f
429 ;;;; 4 arguments
430
431 (defgeneric make-method-lambda (proto-generic-function
432                                 proto-method
433                                 lambda-expression
434                                 environment))
435
436 (defgeneric (setf slot-value-using-class) (new-value class object slotd))
437 \f
438 ;;;; 5 arguments
439
440 (defgeneric make-method-initargs-form (proto-generic-function
441                                        proto-method
442                                        lambda-expression
443                                        lambda-list
444                                        environment))
445 \f
446 ;;;; optional arguments
447
448 (defgeneric get-method (generic-function
449                         qualifiers
450                         specializers
451                         &optional (errorp t)))
452
453 (defgeneric find-method (generic-function
454                          qualifiers
455                          specializers
456                          &optional (errorp t)))
457
458 (defgeneric remove-named-method (generic-function-name
459                                  argument-specifiers
460                                  &optional extra))
461
462 (defgeneric slot-missing (class
463                           instance
464                           slot-name
465                           operation
466                           &optional new-value))
467 \f
468 ;;;; keyword arguments
469
470 (defgeneric allocate-instance (class &rest initargs))
471
472 (defgeneric ensure-class-using-class (name
473                                       class
474                                       &rest args
475                                       &key &allow-other-keys))
476
477 (defgeneric ensure-generic-function-using-class (generic-function
478                                                  function-name
479                                                  &key &allow-other-keys))
480
481 (defgeneric initialize-instance (gf &key &allow-other-keys))
482
483 (defgeneric make-instance (class &rest initargs))
484
485 (defgeneric no-applicable-method (generic-function &rest args))
486
487 (defgeneric reader-method-class (class direct-slot &rest initargs))
488
489 (defgeneric reinitialize-instance (gf &rest args &key &allow-other-keys))
490
491 (defgeneric shared-initialize (generic-function
492                                slot-names
493                                &key &allow-other-keys))
494
495 (defgeneric update-dependent (metaobject dependent &rest initargs))
496
497 (defgeneric update-instance-for-different-class (previous
498                                                  current
499                                                  &rest initargs))
500
501 (defgeneric update-instance-for-redefined-class (instance
502                                                  added-slots
503                                                  discarded-slots
504                                                  property-list
505                                                  &rest initargs))
506
507 (defgeneric writer-method-class (class direct-slot &rest initargs))