{ green integer }
{ blue integer } ;
-{ T{ color f 0 0 0 } } [
- 1 2 3 color boa [ <mirror> clear-assoc ] keep
-] unit-test
+[ \ + make-mirror clear-assoc ] must-fail
+[ \ + make-mirror [ "name" ] dip delete-at ] must-fail
! Test reshaping with a mirror
1 2 3 color boa <mirror> "mirror" set
! See http://factorcode.org/license.txt for BSD license.
USING: accessors assocs classes classes.tuple classes.tuple.private
combinators fry hash-sets hashtables kernel math sequences sets slots
-slots.private ;
+slots.private summary present formatting ;
IN: mirrors
TUPLE: mirror { object read-only } ;
[ object-slots slot-named check-set-slot ] [ object>> ] bi
swap set-slot ;
+ERROR: mirror-slot-removal slots mirror method ;
+
M: mirror delete-at ( key mirror -- )
- [ f ] 2dip set-at ;
+ \ delete-at mirror-slot-removal ;
M: mirror clear-assoc ( mirror -- )
- [ object-slots ] [ object>> ] bi '[
- [ initial>> ] [ offset>> _ swap set-slot ] bi
- ] each ;
+ [ object-slots ] keep \ clear-assoc mirror-slot-removal ;
+
+M: mirror-slot-removal summary
+ drop "Slots cannot be removed from a tuple or a mirror of it" ;
M: mirror >alist ( mirror -- alist )
[ object-slots ] [ object>> ] bi '[