factor/basis/compiler/crossref/crossref.factor

68 lines
2.2 KiB
Factor
Raw Normal View History

! Copyright (C) 2009, 2010 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: arrays assocs classes.algebra compiler.units definitions
graphs grouping kernel namespaces sequences words fry
stack-checker.dependencies ;
IN: compiler.crossref
SYMBOL: compiled-crossref
compiled-crossref [ H{ } clone ] initialize
SYMBOL: compiled-generic-crossref
compiled-generic-crossref [ H{ } clone ] initialize
: compiled-usage ( word -- assoc )
compiled-crossref get at ;
: (compiled-usages) ( word -- assoc )
compiled-usage [ nip inlined-dependency dependency>= ] assoc-filter ;
: compiled-usages ( assoc -- assocs )
[ drop word? ] assoc-filter
[ [ drop (compiled-usages) ] { } assoc>map ] keep suffix ;
: dependencies-satisfied? ( word -- ? )
"dependency-checks" word-prop [ satisfied? ] all? ;
: outdated-conditional-usages ( assoc -- assocs )
[
drop
compiled-usage
[ nip conditional-dependency dependency>= ] assoc-filter
[ drop dependencies-satisfied? not ] assoc-filter
] { } assoc>map ;
: compiled-generic-usage ( word -- assoc )
compiled-generic-crossref get at ;
: (compiled-xref) ( word dependencies word-prop variable -- )
2009-11-08 07:22:39 -05:00
[ [ concat ] dip set-word-prop ] [ get add-vertex* ] bi-curry* 2bi ;
: compiled-xref ( word dependencies generic-dependencies -- )
2009-11-08 07:22:39 -05:00
[ [ drop crossref? ] { } assoc-filter-as ] bi@
[ "compiled-uses" compiled-crossref (compiled-xref) ]
[ "compiled-generic-uses" compiled-generic-crossref (compiled-xref) ]
bi-curry* bi ;
: (compiled-unxref) ( word word-prop variable -- )
2010-01-20 18:06:28 -05:00
[ '[ dup _ word-prop 2 <groups> _ get remove-vertex* ] ]
[ drop '[ _ remove-word-prop ] ]
2bi bi ;
: compiled-unxref ( word -- )
[ "compiled-uses" compiled-crossref (compiled-unxref) ]
[ "compiled-generic-uses" compiled-generic-crossref (compiled-unxref) ]
[ f "dependency-checks" set-word-prop ]
tri ;
: delete-compiled-xref ( word -- )
[ compiled-unxref ]
[ compiled-crossref get delete-at ]
[ compiled-generic-crossref get delete-at ]
tri ;
: save-conditional-dependencies ( word deps -- )
>array f like "dependency-checks" set-word-prop ;