diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2019-09-06 07:26:03 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2019-09-06 07:26:03 -0700 |
commit | 78d6a6ed5cd8a141fdae8e7f85faeadbd5b177b2 (patch) | |
tree | 21e39400f7f201524f08ff7bdf71cdb17dfaa4c0 /struct.c | |
parent | 1a444721869bca8f94f1a5370b9d177444e35ea8 (diff) | |
download | txr-78d6a6ed5cd8a141fdae8e7f85faeadbd5b177b2.tar.gz txr-78d6a6ed5cd8a141fdae8e7f85faeadbd5b177b2.tar.bz2 txr-78d6a6ed5cd8a141fdae8e7f85faeadbd5b177b2.zip |
subtypep: structs with car or length method are sequences.
* lib.c (subtypep): For the sequence supertype, check
whether the subtype is a structure that has a length or
car method, returning t if so.
* struct.c (get_special_slot_by_type): New function.
* struct.h (get_special_slot_by_type): Declared.
* txr.1: Add <structures with cars or length methods> to the
type hierarchy diagram.
Diffstat (limited to 'struct.c')
-rw-r--r-- | struct.c | 7 |
1 files changed, 7 insertions, 0 deletions
@@ -1773,6 +1773,13 @@ val get_special_slot(val obj, enum special_slot spidx) return get_special_static_slot(si->type, spidx, slot); } +val get_special_slot_by_type(val stype, enum special_slot spidx) +{ + struct struct_type *st = coerce(struct struct_type *, stype->co.handle); + val slot = *special_sym[spidx]; + return get_special_static_slot(st, spidx, slot); +} + static_def(struct cobj_ops struct_type_ops = cobj_ops_init(eq, struct_type_print, struct_type_destroy, struct_type_mark, cobj_eq_hash_op)); |