summaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2015-10-16 21:47:12 -0700
committerKaz Kylheku <kaz@kylheku.com>2015-10-16 21:47:12 -0700
commit5fb5509d8d5a4bb0646b1beb083be6b6a6ec55d1 (patch)
tree2fdcd060e1efbf25fdf672da54056e73f02606b9 /share
parentadeabf115e33a3a2efdf04c6a33fdebccb876ce9 (diff)
downloadtxr-5fb5509d8d5a4bb0646b1beb083be6b6a6ec55d1.tar.gz
txr-5fb5509d8d5a4bb0646b1beb083be6b6a6ec55d1.tar.bz2
txr-5fb5509d8d5a4bb0646b1beb083be6b6a6ec55d1.zip
Adding defmeth macro and static-slot-ensure.
* share/txr/stdlib/struct.tl (defmeth): New macro. * struct.c (struct struct_type): New member, dvtypes. (struct_init): Register static-slot-ensure intrinsic. (make_struct_type): Initialize dvtypes of newly instantiated struct_type struct. If a super is specified, add new type to the super's dvtypes. (struct_type_mark): Mark st->dvtypes. (static_slot_ensure): New function. * struct.h (static_slot_ensure): Declared. * txr.1: Documented defmeth and static-slot-ensure.
Diffstat (limited to 'share')
-rw-r--r--share/txr/stdlib/struct.tl7
1 files changed, 7 insertions, 0 deletions
diff --git a/share/txr/stdlib/struct.tl b/share/txr/stdlib/struct.tl
index 7213d9eb..34e9bb07 100644
--- a/share/txr/stdlib/struct.tl
+++ b/share/txr/stdlib/struct.tl
@@ -193,3 +193,10 @@
(defmacro umeth (slot)
^(umethod ',slot))
+
+(defmacro defmeth (type-sym name arglist . body)
+ ^(progn
+ (static-slot-ensure (find-struct-type ',type-sym) ',name
+ (lambda ,arglist
+ (block ,name ,*body)))
+ ',name))