diff --git a/basis/compiler/compiler.factor b/basis/compiler/compiler.factor index a78c6f729a..94b927ca82 100644 --- a/basis/compiler/compiler.factor +++ b/basis/compiler/compiler.factor @@ -184,8 +184,8 @@ M: optimizing-compiler update-call-sites ( class generic -- words ) #! Words containing call sites with inferred type 'class' #! which inlined a method on 'generic' compiled-generic-usage swap '[ - nip dup forgotten-class? - [ drop f ] [ _ classes-intersect? ] if + nip dup classoid? + [ _ classes-intersect? ] [ drop f ] if ] assoc-filter keys ; M: optimizing-compiler recompile ( words -- alist ) diff --git a/basis/stack-checker/dependencies/dependencies.factor b/basis/stack-checker/dependencies/dependencies.factor index 6fa2ae4eab..d995354a52 100644 --- a/basis/stack-checker/dependencies/dependencies.factor +++ b/basis/stack-checker/dependencies/dependencies.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2009, 2010 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: assocs accessors classes.algebra fry generic kernel math -namespaces sequences words sets ; +namespaces sequences words sets combinators.short-circuit ; FROM: classes.tuple.private => tuple-layout ; IN: stack-checker.dependencies @@ -62,7 +62,11 @@ TUPLE: depends-on-class<= class1 class2 ; \ depends-on-class<= add-conditional-dependency ; M: depends-on-class<= satisfied? - [ class1>> ] [ class2>> ] bi class<= ; + { + [ class1>> classoid? ] + [ class2>> classoid? ] + [ [ class1>> ] [ class2>> ] bi class<= ] + } 1&& ; TUPLE: depends-on-classes-disjoint class1 class2 ; @@ -70,7 +74,11 @@ TUPLE: depends-on-classes-disjoint class1 class2 ; \ depends-on-classes-disjoint add-conditional-dependency ; M: depends-on-classes-disjoint satisfied? - [ class1>> ] [ class2>> ] bi classes-intersect? not ; + { + [ class1>> classoid? ] + [ class2>> classoid? ] + [ [ class1>> ] [ class2>> ] bi classes-intersect? not ] + } 1&& ; TUPLE: depends-on-next-method class generic next-method ; @@ -79,7 +87,10 @@ TUPLE: depends-on-next-method class generic next-method ; \ depends-on-next-method add-conditional-dependency ; M: depends-on-next-method satisfied? - [ [ class>> ] [ generic>> ] bi next-method ] [ next-method>> ] bi eq? ; + { + [ class>> classoid? ] + [ [ [ class>> ] [ generic>> ] bi next-method ] [ next-method>> ] bi eq? ] + } 1&& ; TUPLE: depends-on-method class generic method ; @@ -88,7 +99,10 @@ TUPLE: depends-on-method class generic method ; \ depends-on-method add-conditional-dependency ; M: depends-on-method satisfied? - [ [ class>> ] [ generic>> ] bi method-for-class ] [ method>> ] bi eq? ; + { + [ class>> classoid? ] + [ [ [ class>> ] [ generic>> ] bi method-for-class ] [ method>> ] bi eq? ] + } 1&& ; TUPLE: depends-on-tuple-layout class layout ; diff --git a/core/classes/algebra/algebra.factor b/core/classes/algebra/algebra.factor index fe02e6b583..dc9226d20d 100644 --- a/core/classes/algebra/algebra.factor +++ b/core/classes/algebra/algebra.factor @@ -40,12 +40,12 @@ M: object normalize-class ; PRIVATE> -GENERIC: forgotten-class? ( obj -- ? ) +GENERIC: classoid? ( obj -- ? ) -M: word forgotten-class? "forgotten" word-prop ; -M: anonymous-union forgotten-class? members>> [ forgotten-class? ] any? ; -M: anonymous-intersection forgotten-class? participants>> [ forgotten-class? ] any? ; -M: anonymous-complement forgotten-class? class>> forgotten-class? ; +M: word classoid? class? ; +M: anonymous-union classoid? members>> [ classoid? ] all? ; +M: anonymous-intersection classoid? participants>> [ classoid? ] all? ; +M: anonymous-complement classoid? class>> classoid? ; : class<= ( first second -- ? ) class<=-cache get [ (class<=) ] 2cache ;