1 <DEFINITIONS "ABSTR-DEFS">
3 <USE "NEWSTRUC" "SORTX" "ABSTR">
5 ;"*** Object Definitions. ***"
7 ;"A DU (Description Unit) models a package - created during using/loading.
8 The same structure is used to model definition modules: the distinction
9 between packages and definition modules is the presence or absence of
10 the internal oblist in the DU, respectively."
13 DU-NAME STRING ;"Name of package."
14 DU-OBL OBLIST ;"Entry oblist."
15 DU-IOBL <OR OBLIST FALSE> ;"Internal oblist."
16 DU-ENTRIES <LIST [REST ATOM]> ;"Entrys."
17 DU-RENTRIES <LIST [REST ATOM]> ;"Rentrys."
18 DU-USES <LIST [REST DU]> ;"Packages used."
19 DU-EXPORTS <LIST [REST DU]> ;"Packages exported."
20 DU-INCLUDES <LIST [REST DU]> ;"Definitions included."
21 DU-SPECIAL <LIST [REST FORM]> ;"Special forms."
22 DU-MARKED <OR ATOM FALSE>> ;"If du is used by toplevel du."
24 ;"Macros for un/marking DUs."
26 <DEFMAC DU-MARKED? ('DU) <FORM DU-MARKED .DU>>
28 <DEFMAC MARK-DU ('DU) <FORM DU-MARKED .DU T>>
30 <DEFMAC UNMARK-DU ('DU) <FORM DU-MARKED .DU %<>>>
32 ;"An ABSTRACTION is used for accumulating forms that will appear in abstract.
33 It is a vector of four queues, one for each of the four kinds of forms that
34 appear in an abstract: SETG, NEWTYPE and PUT-DECL, MANIFEST, GDECL."
36 <NEWSTRUC ABSTRACTION VECTOR
37 A-GVALS <LIST ATOM [REST FORM]> ;"SETG forms."
38 A-GTAIL <LIST ANY> ;"Tail of above."
39 A-TYPES <LIST ATOM [REST FORM]> ;"NEWTYPE, PUT-DECL forms."
40 A-TTAIL <LIST ANY> ;"Tail of above."
41 A-CONST <LIST [REST ATOM]> ;"MANIFEST atoms."
42 A-DECLS LIST> ;"Body of GDECL form."
44 ;"NEW-ABSTRACTION - Return an empty abstraction."
46 <DEFMAC NEW-ABSTRACTION ()
47 ;"The atoms TYPES, GVALS are handles for PUTREST (enqueueing)."
48 '<BIND ((GVALS (GVAL)) (TYPES (TYPE)))
49 #DECL ((GVALS TYPES) <LIST ATOM>)
50 <CHTYPE [.GVALS .GVALS .TYPES .TYPES () ()] ABSTRACTION>>>
52 ;"ENQ-GVAL - Append <SETG ATOM GVAL> to gvals queue of ABSTRACTION."
54 <DEFMAC ENQ-GVAL ('ABSTRACTION 'ATOM 'GVAL)
55 <FORM BIND ((A .ABSTRACTION) (TAIL (<FORM CHTYPE (SETG .ATOM .GVAL) FORM>)))
56 '#DECL ((A) ABSTRACTION (TAIL) <LIST FORM>)
57 '<PUTREST <A-GTAIL .A> .TAIL>
60 ;"ENQ-TYPE - Append PUT-DECL, NEWTYPE, NEW-CHANNEL-TYPE FORM to types
61 queue of ABSTRACTION."
63 <DEFMAC ENQ-TYPE ('ABSTRACTION 'FORM)
64 <FORM BIND ((A .ABSTRACTION) (TAIL (.FORM)))
65 '#DECL ((A) ABSTRACTION (TAIL) <LIST FORM>)
66 '<PUTREST <A-TTAIL .A> .TAIL>
69 ;"ENQ-CONST - Add ATOM to const (MANIFEST) list of ABSTRACTION."
71 <DEFMAC ENQ-CONST ('ABSTRACTION 'ATOM)
72 <FORM BIND ((A .ABSTRACTION))
73 '#DECL ((A) ABSTRACTION)
74 <FORM A-CONST '.A (.ATOM '!<A-CONST .A>)>>>
76 ;"ENQ-DECL - Add decl D for N to decls (GDECL) list of ABSTRACTION."
78 <DEFMAC ENQ-DECL ('A 'N 'D)
79 ;"If there is a decl = D in decls, add N to the list.
80 Else, append a decl pair to decls."
81 <FORM BIND ((AA .A) (NN .N) (DD .D) '(DECLS <A-DECLS .AA>))
82 '#DECL ((AA) ABSTRACTION (NN) ATOM (DD) <OR ATOM SEGMENT>
84 '<COND (<EMPTY? .DECLS>
85 <A-DECLS .AA ((.NN) .DD)>)
89 <COND (<=? <1 <SET RDECLS <REST .DECLS>>> .DD>
90 <PUT .DECLS 1 (.NN !<1 .DECLS>)>
92 (<EMPTY? <SET DECLS <REST .RDECLS>>>
93 <PUTREST .RDECLS ((.NN) .DD)>
96 ;"BLURB - Concatenate and print several strings to OUTCHAN if ABSTRACT-NOISY?."
98 <DEFMAC BLURB ("ARGS" BLURB)
99 <FORM COND (',ABSTRACT-NOISY?
101 <FORM PRINTSTRING <FORM STRING !.BLURB>>)>>
103 ;"SORTA, SORTS - Sort vectors of atoms and strings"
108 '<COND (<EMPTY? .VV> .VV) (T <SORT ,ALESS? .VV> .VV)>>>
113 '<COND (<EMPTY? .VV> .VV) (T <SORT %<> .VV> .VV)>>>
115 ;"EXTRACT-NM1 - Get the first name from a file spec."
117 <DEFMAC EXTRACT-NM1 ('STRING)
118 <FORM BIND ((CH <FORM CHANNEL-OPEN PARSE .STRING>)
119 '(NAME1 <CHANNEL-OP .CH NM1>))
120 '#DECL ((CH) <CHANNEL 'PARSE> (NAME1) STRING)
124 ;"*** Definitions which depend on implementation of MDL environment. ***"
126 <UNMANIFEST OLD-TYPES>
128 <GDECL (OLD-TYPES) FIX (ATOM-TABLE) VECTOR> ;"External."
130 ;"NEWTYPE-ATOM? - Return false if TYPE-NAME is not the name of a new type."
132 <DEFMAC NEWTYPE-ATOM? ('ATOM)
133 <FORM AND <FORM VALID-TYPE? .ATOM>
134 <FORM G? <FORM LSH <FORM TYPE-C .ATOM> -6> ',OLD-TYPES>>>
136 ;"NEWTYPE-OBJECT - Return false if type of OBJECT is not a new type."
138 <DEFMAC NEWTYPE-OBJECT? ('OBJECT)
139 <FORM G? <FORM LSH <FORM TYPE-C <FORM TYPE .OBJECT>> -6> ',OLD-TYPES>>
141 ;"Offsets for extracting interesting things from msubrs and macros."
143 <MSETG IMSUBR-NAME <OFFSET 1 '<PRIMTYPE VECTOR>>>
145 <MSETG MSUBR-NAME <OFFSET 2 '<PRIMTYPE VECTOR>>>
147 <MSETG MSUBR-ARG-DECL <OFFSET 3 '<PRIMTYPE VECTOR>>>
149 <MSETG IMSUBR-OFFSET <OFFSET 4 '<PRIMTYPE VECTOR>>>
151 <MSETG MACRO-BODY <OFFSET 1 '<PRIMTYPE LIST>>>
153 ;"MSUBR-IMVECTOR - Return the mvector of the imsubr associated with MSUBR."
155 <DEFMAC MSUBR-IMVECTOR ('MSUBR)
156 <FORM REST <FORM 1 <FORM GVAL <FORM IMSUBR-NAME .MSUBR>>>>>
158 ;"MSUBR-IMSUBR - Return the imsubr associated with MSUBR."
160 <DEFMAC MSUBR-IMSUBR ('MSUBR) <FORM GVAL <FORM IMSUBR-NAME .MSUBR>>>