1 ! Copyright (C) 2004, 2007 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: words sequences kernel assocs combinators classes
4 generic.standard namespaces arrays ;
7 PREDICATE: class union-class
8 "metaclass" word-prop union-class eq? ;
10 ! Union classes for dispatch on multiple classes.
11 : union-predicate-quot ( members -- quot )
13 [ [ drop t ] ] { } map>assoc
14 object bootstrap-word [ drop f ] 2array add*
18 : define-union-predicate ( class -- )
20 over members union-predicate-quot
23 : define-union-class ( class members -- )
24 dupd f union-class define-class define-union-predicate ;
26 M: union-class reset-class
27 { "metaclass" "members" } reset-props ;