Skip to content

Commit 7733d8f

Browse files
committed
Adds slots for metaobjects.
Signed-off-by: Amy Ringo <me@remexre.com>
1 parent ec81f5b commit 7733d8f

File tree

1 file changed

+42
-6
lines changed

1 file changed

+42
-6
lines changed

src/zpy/zval.py

Lines changed: 42 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -257,16 +257,39 @@ def defclass(
257257
ClassStandardObject = defclass("STANDARD-OBJECT", sup=[ClassT])
258258

259259
ClassSpecializer = defclass("SPECIALIZER")
260-
ClassEqlSpecializer = defclass("EQL-SPECIALIZER", sup=[ClassSpecializer])
261-
ClassClass = defclass("CLASS", sup=[ClassSpecializer])
260+
ClassEqlSpecializer = defclass(
261+
"EQL-SPECIALIZER",
262+
make_direct_slot_definition("EQL-SPECIALIZER/OBJECT"),
263+
make_direct_slot_definition("EQL-SPECIALIZER/DIRECT-METHODS"),
264+
sup=[ClassSpecializer],
265+
)
266+
ClassClass = defclass(
267+
"CLASS",
268+
make_direct_slot_definition("CLASS/NAME"),
269+
make_direct_slot_definition("CLASS/CLASS-EQ-SPECIALIZER"),
270+
make_direct_slot_definition("CLASS/DIRECT-SUPERCLASSES"),
271+
make_direct_slot_definition("CLASS/DIRECT-SUBCLASSES"),
272+
make_direct_slot_definition("CLASS/DIRECT-METHODS"),
273+
make_direct_slot_definition("CLASS/FINALIZED-P"),
274+
sup=[ClassSpecializer],
275+
)
262276
init_class(ClassBuiltInClass, "BUILT-IN-CLASS", direct_superclasses=[ClassClass])
263277
add_direct_subclass(ClassStandardClass, ClassClass)
264278
ClassForwardReferencedClass = defclass("FORWARD-REFERENCED-CLASS")
265279
ClassFuncallableStandardClass = defclass("FUNCALLABLE-STANDARD-CLASS", sup=[ClassClass])
266280

267-
ClassSlotDefinition = defclass("SLOT-DEFINITION")
281+
ClassSlotDefinition = defclass(
282+
"SLOT-DEFINITION",
283+
make_direct_slot_definition("SLOT-DEFINITION/NAME"),
284+
make_direct_slot_definition("SLOT-DEFINITION/INITFORM"),
285+
make_direct_slot_definition("SLOT-DEFINITION/INITFUNCTION"),
286+
make_direct_slot_definition("SLOT-DEFINITION/INITARGS"),
287+
)
268288
ClassDirectSlotDefinition = defclass(
269-
"DIRECT-SLOT-DEFINITION", sup=[ClassSlotDefinition]
289+
"DIRECT-SLOT-DEFINITION",
290+
make_direct_slot_definition("DIRECT-SLOT-DEFINITION/READERS"),
291+
make_direct_slot_definition("DIRECT-SLOT-DEFINITION/WRITERS"),
292+
sup=[ClassSlotDefinition],
270293
)
271294
ClassEffectiveSlotDefinition = defclass(
272295
"EFFECTIVE-SLOT-DEFINITION", sup=[ClassSlotDefinition]
@@ -281,13 +304,20 @@ def defclass(
281304
)
282305
ClassStandardEffectiveSlotDefinition = defclass(
283306
"STANDARD-EFFECTIVE-SLOT-DEFINITION",
307+
make_direct_slot_definition("STANDARD-EFFECTIVE-SLOT-DEFINITION/LOCATION"),
284308
sup=[ClassStandardSlotDefinition, ClassEffectiveSlotDefinition],
285309
)
286310

287311
ClassMethodCombination = defclass("METHOD-COMBINATION")
288312

289313
ClassMethod = defclass("METHOD")
290-
ClassStandardMethod = defclass("STANDARD-METHOD", sup=[ClassMethod])
314+
ClassStandardMethod = defclass(
315+
"STANDARD-METHOD",
316+
make_direct_slot_definition("STANDARD-METHOD/QUALIFIERS"),
317+
make_direct_slot_definition("STANDARD-METHOD/SPECIALIZERS"),
318+
make_direct_slot_definition("STANDARD-METHOD/LAMBDA-LIST"),
319+
sup=[ClassMethod],
320+
)
291321
ClassStandardAccessorMethod = defclass(
292322
"STANDARD-ACCESSOR-METHOD", sup=[ClassStandardMethod]
293323
)
@@ -303,7 +333,13 @@ def defclass(
303333
"GENERIC-FUNCTION", sup=[ClassFuncallableStandardObject]
304334
)
305335
ClassStandardGenericFunction = defclass(
306-
"STANDARD-GENERIC-FUNCTION", sup=[ClassGenericFunction]
336+
"STANDARD-GENERIC-FUNCTION",
337+
make_direct_slot_definition("STANDARD-GENERIC-FUNCTION/NAME"),
338+
make_direct_slot_definition("STANDARD-GENERIC-FUNCTION/METHODS"),
339+
make_direct_slot_definition("STANDARD-GENERIC-FUNCTION/METHOD-CLASS"),
340+
make_direct_slot_definition("STANDARD-GENERIC-FUNCTION/METHOD-COMBINATION"),
341+
make_direct_slot_definition("STANDARD-GENERIC-FUNCTION/DECLARATIONS"),
342+
sup=[ClassGenericFunction],
307343
)
308344

309345
### Implement class finalization and finalize the metaobject classes.

0 commit comments

Comments
 (0)