compiler.crossref: better code for getting dependencies-of + tests

char-rename
Björn Lindqvist 2016-11-26 12:58:09 +01:00
parent 581e2e2a62
commit 99653bab91
4 changed files with 55 additions and 11 deletions

View File

@ -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." } ;

View File

@ -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

View File

@ -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 ;

View File

@ -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