(def ltable-name (lname) (sym (+ "label-table-" lname "*"))) (mac getlabel (lname obj) `((scheme hash-table-get) ,(ltable-name lname) ,obj nil)) (mac setlabel (lname obj val) (w/uniq gval `(ret ,gval ,val ((scheme hash-table-put!) ,(ltable-name lname) ,obj ,gval)))) (mac deflabel (lname) `(do (= ,(ltable-name lname) (scheme (make-hash-table 'weak 'eqv))) (def ,lname (obj) (getlabel ,lname obj)) (defset ,lname (x) (w/uniq g (list (list g x) `(getlabel ,',lname ,g) `(fn (val) (setlabel ,',lname ,g val)))))))