stack-checker.dependencies: make conditional dependencies more robust
parent
9bc4e662c6
commit
2c63161c84
|
@ -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 )
|
||||
|
|
|
@ -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 ;
|
||||
|
||||
|
|
|
@ -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 ;
|
||||
|
|
Loading…
Reference in New Issue