diff --git a/core/classes/algebra/algebra.factor b/core/classes/algebra/algebra.factor index b32bac3a18..51dad033a9 100644 --- a/core/classes/algebra/algebra.factor +++ b/core/classes/algebra/algebra.factor @@ -55,7 +55,7 @@ DEFER: (class-or) class-or-cache get [ (class-or) ] 2cache ; : superclass<= ( first second -- ? ) - >r superclass r> class<= ; + swap superclass dup [ swap class<= ] [ 2drop f ] if ; : left-anonymous-union<= ( first second -- ? ) >r members>> r> [ class<= ] curry all? ; @@ -103,19 +103,20 @@ PREDICATE: empty-intersection < anonymous-intersection participants>> empty? ; : (class<=) ( first second -- -1/0/1 ) 2dup eq? [ 2drop t ] [ - [ normalize-class ] bi@ { - { [ dup empty-intersection? ] [ 2drop t ] } - { [ over empty-union? ] [ 2drop t ] } - { [ 2dup [ anonymous-complement? ] both? ] [ anonymous-complement<= ] } - { [ over anonymous-union? ] [ left-anonymous-union<= ] } - { [ over anonymous-intersection? ] [ left-anonymous-intersection<= ] } - { [ over nontrivial-anonymous-complement? ] [ left-anonymous-complement<= ] } - { [ dup anonymous-union? ] [ right-anonymous-union<= ] } - { [ dup anonymous-intersection? ] [ right-anonymous-intersection<= ] } - { [ dup anonymous-complement? ] [ class>> classes-intersect? not ] } - { [ over superclass ] [ superclass<= ] } - [ 2drop f ] - } cond + 2dup superclass<= [ 2drop t ] [ + [ normalize-class ] bi@ { + { [ dup empty-intersection? ] [ 2drop t ] } + { [ over empty-union? ] [ 2drop t ] } + { [ 2dup [ anonymous-complement? ] both? ] [ anonymous-complement<= ] } + { [ over anonymous-union? ] [ left-anonymous-union<= ] } + { [ over anonymous-intersection? ] [ left-anonymous-intersection<= ] } + { [ over nontrivial-anonymous-complement? ] [ left-anonymous-complement<= ] } + { [ dup anonymous-union? ] [ right-anonymous-union<= ] } + { [ dup anonymous-intersection? ] [ right-anonymous-intersection<= ] } + { [ dup anonymous-complement? ] [ class>> classes-intersect? not ] } + [ 2drop f ] + } cond + ] if ] if ; M: anonymous-union (classes-intersect?)