compiler.crossref: better code for getting dependencies-of + tests
parent
581e2e2a62
commit
99653bab91
|
@ -1,6 +1,9 @@
|
|||
USING: assocs help.markup help.syntax words ;
|
||||
IN: compiler.crossref
|
||||
|
||||
HELP: compiled-crossref
|
||||
{ $var-description "A hashtable that maps words to other words that depend on them. It also stores the types of the dependencies." } ;
|
||||
|
||||
HELP: load-dependencies
|
||||
{ $values { "word" word } { "assoc" assoc } }
|
||||
{ $description "Creates an assoc where keys are the words the word depends on and values are the dependency type." } ;
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
USING: compiler.crossref fry kernel sequences tools.test vocabs words ;
|
||||
USING: compiler.crossref fry kernel namespaces sequences
|
||||
stack-checker.dependencies tools.test vocabs words ;
|
||||
IN: compiler.crossref.tests
|
||||
|
||||
! Dependencies of all words should always be satisfied unless we're
|
||||
|
@ -7,3 +8,46 @@ IN: compiler.crossref.tests
|
|||
all-words dup [ subwords ] map concat append
|
||||
H{ } clone '[ _ dependencies-satisfied? ] reject
|
||||
] unit-test
|
||||
|
||||
: setup-crossref ( -- assoc )
|
||||
H{
|
||||
{
|
||||
10
|
||||
H{
|
||||
{ 20 definition-dependency }
|
||||
{ 30 conditional-dependency }
|
||||
{ 40 effect-dependency }
|
||||
}
|
||||
}
|
||||
} clone ;
|
||||
|
||||
! dependencies-of
|
||||
{
|
||||
H{ { 20 definition-dependency } }
|
||||
} [
|
||||
setup-crossref compiled-crossref [
|
||||
10 definition-dependency dependencies-of
|
||||
] with-variable
|
||||
] unit-test
|
||||
|
||||
{
|
||||
H{ { 20 definition-dependency } { 30 conditional-dependency } }
|
||||
} [
|
||||
setup-crossref compiled-crossref [
|
||||
10 conditional-dependency dependencies-of
|
||||
] with-variable
|
||||
] unit-test
|
||||
|
||||
! join-dependencies
|
||||
{
|
||||
H{
|
||||
{ 1 effect-dependency }
|
||||
{ 2 effect-dependency }
|
||||
{ 3 conditional-dependency }
|
||||
{ 4 conditional-dependency }
|
||||
{ 5 definition-dependency }
|
||||
{ 6 definition-dependency }
|
||||
}
|
||||
} [
|
||||
{ 1 2 } { 3 4 } { 5 6 } join-dependencies
|
||||
] unit-test
|
||||
|
|
|
@ -12,20 +12,17 @@ SYMBOL: generic-call-site-crossref
|
|||
|
||||
generic-call-site-crossref [ H{ } clone ] initialize
|
||||
|
||||
: effect-dependencies-of ( word -- assoc )
|
||||
: all-dependencies-of ( word -- assoc )
|
||||
compiled-crossref get at ;
|
||||
|
||||
: definition-dependencies-of ( word -- assoc )
|
||||
effect-dependencies-of [ nip definition-dependency dependency>= ] assoc-filter ;
|
||||
|
||||
: conditional-dependencies-of ( word -- assoc )
|
||||
effect-dependencies-of [ nip conditional-dependency dependency>= ] assoc-filter ;
|
||||
: dependencies-of ( word dep-type -- assoc )
|
||||
[ all-dependencies-of ] dip '[ nip _ dependency>= ] assoc-filter ;
|
||||
|
||||
: outdated-definition-usages ( set -- assocs )
|
||||
members [ word? ] filter [ definition-dependencies-of ] map ;
|
||||
members [ word? ] filter [ definition-dependency dependencies-of ] map ;
|
||||
|
||||
: outdated-effect-usages ( set -- assocs )
|
||||
members [ word? ] filter [ effect-dependencies-of ] map ;
|
||||
members [ word? ] filter [ all-dependencies-of ] map ;
|
||||
|
||||
: dependencies-satisfied? ( word cache -- ? )
|
||||
[ "dependency-checks" word-prop ] dip
|
||||
|
@ -33,7 +30,7 @@ generic-call-site-crossref [ H{ } clone ] initialize
|
|||
|
||||
: outdated-conditional-usages ( set -- assocs )
|
||||
members H{ } clone '[
|
||||
conditional-dependencies-of
|
||||
conditional-dependency dependencies-of
|
||||
[ drop _ dependencies-satisfied? ] assoc-reject
|
||||
] map ;
|
||||
|
||||
|
|
|
@ -401,7 +401,7 @@ M: integer forget-test 3 + ;
|
|||
{ } [ "IN: generic.standard.tests USE: math FORGET: M\\ integer forget-test" eval( -- ) ] unit-test
|
||||
|
||||
{ { } } [
|
||||
\ + effect-dependencies-of keys [ method? ] filter
|
||||
\ + all-dependencies-of keys [ method? ] filter
|
||||
[ "method-generic" word-prop \ forget-test eq? ] filter
|
||||
] unit-test
|
||||
|
||||
|
|
Loading…
Reference in New Issue