1 ! Copyright (C) 2004, 2010 Slava Pestov.
2 ! See https://factorcode.org/license.txt for BSD license.
3 USING: classes classes.algebra.private classes.private kernel
4 kernel.private make namespaces sequences words ;
9 PREDICATE: builtin-class < class
10 "metaclass" word-prop builtin-class eq? ;
12 : class>type ( class -- n ) "type" word-prop ; foldable
14 : type>class ( n -- class ) builtins get-global nth ; foldable
16 M: object class-of tag type>class ; inline
18 M: builtin-class rank-class drop 0 ;
20 M: builtin-class instance? [ tag ] [ class>type ] bi* eq? ;
22 M: builtin-class (flatten-class) , ;
24 M: builtin-class (classes-intersect?) eq? ;
26 : full-cover ( -- ) builtins get [ (flatten-class) ] each ;
28 M: anonymous-complement (flatten-class) drop full-cover ;