compiler.crossref: better code for getting dependencies-of + tests
parent
581e2e2a62
commit
99653bab91
|
@ -1,6 +1,9 @@
|
||||||
USING: assocs help.markup help.syntax words ;
|
USING: assocs help.markup help.syntax words ;
|
||||||
IN: compiler.crossref
|
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
|
HELP: load-dependencies
|
||||||
{ $values { "word" word } { "assoc" assoc } }
|
{ $values { "word" word } { "assoc" assoc } }
|
||||||
{ $description "Creates an assoc where keys are the words the word depends on and values are the dependency type." } ;
|
{ $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
|
IN: compiler.crossref.tests
|
||||||
|
|
||||||
! Dependencies of all words should always be satisfied unless we're
|
! 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
|
all-words dup [ subwords ] map concat append
|
||||||
H{ } clone '[ _ dependencies-satisfied? ] reject
|
H{ } clone '[ _ dependencies-satisfied? ] reject
|
||||||
] unit-test
|
] 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
|
generic-call-site-crossref [ H{ } clone ] initialize
|
||||||
|
|
||||||
: effect-dependencies-of ( word -- assoc )
|
: all-dependencies-of ( word -- assoc )
|
||||||
compiled-crossref get at ;
|
compiled-crossref get at ;
|
||||||
|
|
||||||
: definition-dependencies-of ( word -- assoc )
|
: dependencies-of ( word dep-type -- assoc )
|
||||||
effect-dependencies-of [ nip definition-dependency dependency>= ] assoc-filter ;
|
[ all-dependencies-of ] dip '[ nip _ dependency>= ] assoc-filter ;
|
||||||
|
|
||||||
: conditional-dependencies-of ( word -- assoc )
|
|
||||||
effect-dependencies-of [ nip conditional-dependency dependency>= ] assoc-filter ;
|
|
||||||
|
|
||||||
: outdated-definition-usages ( set -- assocs )
|
: 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 )
|
: outdated-effect-usages ( set -- assocs )
|
||||||
members [ word? ] filter [ effect-dependencies-of ] map ;
|
members [ word? ] filter [ all-dependencies-of ] map ;
|
||||||
|
|
||||||
: dependencies-satisfied? ( word cache -- ? )
|
: dependencies-satisfied? ( word cache -- ? )
|
||||||
[ "dependency-checks" word-prop ] dip
|
[ "dependency-checks" word-prop ] dip
|
||||||
|
@ -33,7 +30,7 @@ generic-call-site-crossref [ H{ } clone ] initialize
|
||||||
|
|
||||||
: outdated-conditional-usages ( set -- assocs )
|
: outdated-conditional-usages ( set -- assocs )
|
||||||
members H{ } clone '[
|
members H{ } clone '[
|
||||||
conditional-dependencies-of
|
conditional-dependency dependencies-of
|
||||||
[ drop _ dependencies-satisfied? ] assoc-reject
|
[ drop _ dependencies-satisfied? ] assoc-reject
|
||||||
] map ;
|
] map ;
|
||||||
|
|
||||||
|
|
|
@ -401,7 +401,7 @@ M: integer forget-test 3 + ;
|
||||||
{ } [ "IN: generic.standard.tests USE: math FORGET: M\\ integer forget-test" eval( -- ) ] unit-test
|
{ } [ "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
|
[ "method-generic" word-prop \ forget-test eq? ] filter
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue