diff --git a/extra/constructors/constructors.factor b/extra/constructors/constructors.factor index 6968fd7eda..30d286eb96 100644 --- a/extra/constructors/constructors.factor +++ b/extra/constructors/constructors.factor @@ -1,17 +1,19 @@ ! Copyright (C) 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: slots kernel sequences fry accessors parser lexer words -effects.parser ; +effects.parser macros ; IN: constructors ! An experiment -: constructor-quot ( class slot-names body -- quot ) - [ [ setter-word '[ swap _ execute ] ] map [ ] join ] dip - '[ _ new @ @ ] ; +MACRO: set-slots ( slots -- quot ) + [ setter-word '[ swap _ execute ] ] map [ ] join ; + +: construct ( ... class slots -- instance ) + [ new ] dip set-slots ; inline : define-constructor ( name class effect body -- ) - [ [ in>> ] dip constructor-quot ] [ drop ] 2bi + [ [ in>> ] dip '[ _ _ construct @ ] ] [ drop ] 2bi define-declared ; : CONSTRUCTOR: