-! (c)2009 Joe Groff bsd license
-USING: accessors arrays classes classes.mixin classes.parser
-classes.tuple classes.tuple.parser combinators
-combinators.short-circuit kernel lexer make parser sequences
-sets strings words ;
+! Copyright (C) 2009 Joe Groff.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors arrays classes.mixin classes.parser
+classes.tuple classes.tuple.parser combinators kernel lexer make
+parser sequences sets strings words ;
IN: roles
ERROR: role-slot-overlap class slots ;
ERROR: multiple-inheritance-attempted classes ;
-PREDICATE: role < class
- { [ mixin-class? ] [ "role-slots" word-prop >boolean ] } 1&& ;
+PREDICATE: role < mixin-class
+ "role-slots" word-prop >boolean ;
: parse-role-definition ( -- class superroles slots )
- CREATE-CLASS scan {
+ scan-new-class scan-token {
{ ";" [ { } { } ] }
{ "<" [ scan-word 1array [ parse-tuple-slots ] { } make ] }
{ "<{" [ \ } parse-until >array [ parse-tuple-slots ] { } make ] }
} case ;
: slot-name ( name/array -- name )
- dup string? [ ] [ first ] if ;
+ dup string? [ first ] unless ;
+
: slot-names ( array -- names )
[ slot-name ] map ;
[ drop [ role? ] filter add-to-roles ] 3tri ;
SYNTAX: ROLE: parse-role-definition define-role ;
-SYNTAX: TUPLE: parse-role-definition define-tuple-class-with-roles ;
-
-
+SYNTAX: ROLE-TUPLE: parse-role-definition define-tuple-class-with-roles ;