compiler.crossref: better way to store the dependencies on words
parent
e842e41f49
commit
d6eb6f2c76
|
@ -7,3 +7,7 @@ HELP: compiled-crossref
|
||||||
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." } ;
|
||||||
|
|
||||||
|
HELP: store-dependencies
|
||||||
|
{ $values { "word" word } { "assoc" assoc } }
|
||||||
|
{ $description "Stores the dependencies in 'assoc' in the word attributes named \"effect-dependencies\", \"conditional-dependencies\" and \"definition-dependencies\"." } ;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
USING: compiler.crossref fry kernel namespaces sequences
|
USING: accessors assocs compiler.crossref fry kernel namespaces
|
||||||
stack-checker.dependencies tools.test vocabs words ;
|
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
|
||||||
|
@ -51,3 +51,22 @@ IN: compiler.crossref.tests
|
||||||
} [
|
} [
|
||||||
{ 1 2 } { 3 4 } { 5 6 } join-dependencies
|
{ 1 2 } { 3 4 } { 5 6 } join-dependencies
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
|
! store-dependencies
|
||||||
|
: setup-deps ( -- assoc )
|
||||||
|
H{
|
||||||
|
{ 20 +definition+ }
|
||||||
|
{ 30 +conditional+ }
|
||||||
|
{ 40 +effect+ }
|
||||||
|
{ 50 +effect+ }
|
||||||
|
} ;
|
||||||
|
|
||||||
|
SYMBOL: foo
|
||||||
|
{
|
||||||
|
{ 20 } { 40 50 } { 30 }
|
||||||
|
} [
|
||||||
|
foo [ setup-deps store-dependencies ] keep props>>
|
||||||
|
[ "definition-dependencies" of ]
|
||||||
|
[ "effect-dependencies" of ]
|
||||||
|
[ "conditional-dependencies" of ] tri
|
||||||
|
] unit-test
|
||||||
|
|
|
@ -43,17 +43,15 @@ generic-call-site-crossref [ H{ } clone ] initialize
|
||||||
: set-generic-call-sites ( word alist -- )
|
: set-generic-call-sites ( word alist -- )
|
||||||
concat f like "generic-call-sites" set-word-prop ;
|
concat f like "generic-call-sites" set-word-prop ;
|
||||||
|
|
||||||
: split-dependencies ( assoc -- effect-deps cond-deps def-deps )
|
: store-dependencies-of-type ( word assoc symbol prop-name -- )
|
||||||
[ nip +effect+ eq? ] assoc-partition
|
[ rot '[ nip _ = ] assoc-filter keys ] dip set-word-prop ;
|
||||||
[ nip +conditional+ eq? ] assoc-partition ;
|
|
||||||
|
|
||||||
: (store-dependencies) ( word assoc prop -- )
|
|
||||||
[ keys f like ] dip set-word-prop ;
|
|
||||||
|
|
||||||
: store-dependencies ( word assoc -- )
|
: store-dependencies ( word assoc -- )
|
||||||
split-dependencies
|
{
|
||||||
"effect-dependencies" "conditional-dependencies" "definition-dependencies"
|
{ +effect+ "effect-dependencies" }
|
||||||
[ (store-dependencies) ] tri-curry@ tri-curry* tri ;
|
{ +conditional+ "conditional-dependencies" }
|
||||||
|
{ +definition+ "definition-dependencies" }
|
||||||
|
} [ store-dependencies-of-type ] 2with assoc-each ;
|
||||||
|
|
||||||
: add-xref ( word dependencies crossref -- )
|
: add-xref ( word dependencies crossref -- )
|
||||||
rot '[
|
rot '[
|
||||||
|
|
Loading…
Reference in New Issue