chiark / gitweb /
src/class-finalize-proto.lisp (check-sod-class): Fix docstring.
[sod] / src / class-finalize-proto.lisp
CommitLineData
dea4d055
MW
1;;; -*-lisp-*-
2;;;
3;;; Class finalization protocol
4;;;
5;;; (c) 2009 Straylight/Edgeware
6;;;
7
8;;;----- Licensing notice ---------------------------------------------------
9;;;
e0808c47 10;;; This file is part of the Sensible Object Design, an object system for C.
dea4d055
MW
11;;;
12;;; SOD is free software; you can redistribute it and/or modify
13;;; it under the terms of the GNU General Public License as published by
14;;; the Free Software Foundation; either version 2 of the License, or
15;;; (at your option) any later version.
16;;;
17;;; SOD is distributed in the hope that it will be useful,
18;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
19;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20;;; GNU General Public License for more details.
21;;;
22;;; You should have received a copy of the GNU General Public License
23;;; along with SOD; if not, write to the Free Software Foundation,
24;;; Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
25
26(cl:in-package #:sod)
27
28;;;--------------------------------------------------------------------------
29;;; Protocol definition.
30
11e41ddf 31(export 'compute-cpl)
dea4d055
MW
32(defgeneric compute-cpl (class)
33 (:documentation
34 "Returns the class precedence list for CLASS."))
35
11e41ddf 36(export 'compute-chains)
dea4d055
MW
37(defgeneric compute-chains (class)
38 (:documentation
39 "Compute the layout chains for CLASS.
40
41 Returns the following three values.
42
43 * the head of the class's primary chain;
44
45 * the class's primary chain as a list, most- to least-specific; and
46
47 * the complete collection of chains, as a list of lists, each most- to
48 least-specific, with the primary chain first.
49
50 These values will be stored in the CHAIN-HEAD, CHAIN and CHAINS slots.
51
52 If the chains are ill-formed (i.e., not distinct) then an error is
53 signalled."))
54
981b6fb6
MW
55(export 'guess-metaclass)
56(defgeneric guess-metaclass (class)
57 (:documentation
58 "Determine a suitable metaclass for the CLASS.
59
60 The default behaviour is to choose the most specific metaclass of any of
61 the direct superclasses of CLASS, or to signal an error if that failed."))
62
11e41ddf 63(export 'check-sod-class)
dea4d055
MW
64(defgeneric check-sod-class (class)
65 (:documentation
66 "Check the CLASS for validity.
67
68 This is done as part of class finalization. The checks performed are as
69 follows.
70
71 * The class name and nickname, and the names of messages, obey the
72 rules (see VALID-NAME-P).
73
74 * The messages and slots have distinct names.
75
76 * The classes in the class-precedence-list have distinct nicknames.
77
78 * The chain-link is actually a proper (though not necessarily direct)
79 superclass.
80
81 * The chosen metaclass is actually a subclass of all of the
82 superclasses' metaclasses.
83
8b06ce6e
MW
84 If no attempt has previously been made to finalize the class, then errors
85 are signalled for the problems found. If finalizing it has been tried
86 before and failed (or this is a recursive attempt to finalize the class)
87 then nil is returned immediately. Otherwise a non-nil value is
88 returned."))
dea4d055 89
11e41ddf 90(export 'finalize-sod-class)
dea4d055
MW
91(defgeneric finalize-sod-class (class)
92 (:documentation
93 "Computes all of the gory details about a class.
94
95 Once one has stopped inserting methods and slots and so on into a class,
96 one needs to finalize it to determine the layout structure and the class
97 precedence list and so on. More precisely that gets done is this:
98
99 * Related classes (i.e., direct superclasses and the metaclass) are
100 finalized if they haven't been already.
101
102 * If you've been naughty and failed to store a list of slots or
103 whatever, then an empty list is inserted.
104
105 * The class precedence list is computed and stored.
106
107 * The class is checked for compiance with the well-formedness rules.
108
109 * The layout chains are computed."))
110
111;;;----- That's all, folks --------------------------------------------------