! Copyright (C) 2004, 2010 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
-USING: accessors assocs classes.algebra combinators
+USING: accessors assocs classes classes.algebra combinators
combinators.short-circuit compiler.cfg compiler.cfg.builder
compiler.cfg.builder.alien compiler.cfg.finalization
compiler.cfg.optimizer compiler.codegen compiler.crossref
! Words containing call sites with inferred type 'class'
! which inlined a method on 'generic'
generic-call-sites-of keys swap '[
- _ 2dup [ valid-classoid? ] both?
+ _ 2dup [ classoid? ] both?
[ classes-intersect? ] [ 2drop f ] if
] filter ;
M: depends-on-class-predicate satisfied?
{
- [ class1>> valid-classoid? ]
- [ class2>> valid-classoid? ]
+ [ class1>> classoid? ]
+ [ class2>> classoid? ]
[ [ [ class1>> ] [ class2>> ] bi evaluate-class-predicate ] [ result>> ] bi eq? ]
} 1&& ;
M: depends-on-instance-predicate satisfied?
{
- [ class>> valid-classoid? ]
+ [ class>> classoid? ]
[ [ [ object>> ] [ class>> ] bi instance? ] [ result>> ] bi eq? ]
} 1&& ;
M: depends-on-next-method satisfied?
{
- [ class>> valid-classoid? ]
+ [ class>> classoid? ]
[ [ [ class>> ] [ generic>> ] bi next-method ] [ next-method>> ] bi eq? ]
} 1&& ;
INSTANCE: anonymous-complement classoid
: <anonymous-complement> ( object -- classoid )
- dup classoid? [ 1array not-classoids ] unless
- anonymous-complement boa ;
+ check-classoid anonymous-complement boa ;
M: anonymous-complement rank-class drop 3 ;
PRIVATE>
-GENERIC: valid-classoid? ( obj -- ? )
-
-M: word valid-classoid? class? ;
-M: anonymous-union valid-classoid? members>> [ valid-classoid? ] all? ;
-M: anonymous-intersection valid-classoid? participants>> [ valid-classoid? ] all? ;
-M: anonymous-complement valid-classoid? class>> valid-classoid? ;
-M: object valid-classoid? drop f ;
-
: only-classoid? ( obj -- ? )
dup classoid? [ class? not ] [ drop f ] if ;
M: maybe normalize-class
maybe-class-or ;
-M: maybe valid-classoid? class>> valid-classoid? ;
-
M: maybe rank-class drop 6 ;
M: maybe (flatten-class)