diff --git a/extra/classes/struct/struct.factor b/extra/classes/struct/struct.factor index 90224c96d5..d52c25e413 100644 --- a/extra/classes/struct/struct.factor +++ b/extra/classes/struct/struct.factor @@ -44,13 +44,17 @@ MACRO: ( class -- quot: ( ... -- struct ) ) ] bi ] [ ] output>sequence ; -: pad-struct-slots ( slots class -- slots' class ) +: pad-struct-slots ( values class -- values' class ) [ class-slots [ initial>> ] map over length tail append ] keep ; +: (writer-quot) ( slot -- quot ) + [ class>> c-setter ] + [ offset>> [ >c-ptr ] swap suffix ] bi prepend ; + M: struct-class boa>object swap pad-struct-slots - [ (struct) swap ] [ "struct-slots" word-prop ] bi - [ name>> setter-word execute( struct value -- struct ) ] 2each ; + [ (struct) ] [ "struct-slots" word-prop ] bi + [ [ (writer-quot) call( value struct -- ) ] with 2each ] curry keep ; ! Struct slot accessors @@ -59,10 +63,6 @@ M: struct-class reader-quot [ class>> c-type-getter-boxer ] [ offset>> [ >c-ptr ] swap suffix ] bi prepend ; -: (writer-quot) ( slot -- quot ) - [ class>> c-setter ] - [ offset>> [ >c-ptr ] swap suffix ] bi prepend ; - M: struct-class writer-quot nip (writer-quot) ;