compiler.crossref: better way to store the dependencies on words
parent
e842e41f49
commit
d6eb6f2c76
|
@ -7,3 +7,7 @@ HELP: compiled-crossref
|
|||
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." } ;
|
||||
|
||||
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
|
||||
stack-checker.dependencies tools.test vocabs words ;
|
||||
USING: accessors assocs 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
|
||||
|
@ -51,3 +51,22 @@ IN: compiler.crossref.tests
|
|||
} [
|
||||
{ 1 2 } { 3 4 } { 5 6 } join-dependencies
|
||||
] 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 -- )
|
||||
concat f like "generic-call-sites" set-word-prop ;
|
||||
|
||||
: split-dependencies ( assoc -- effect-deps cond-deps def-deps )
|
||||
[ nip +effect+ eq? ] assoc-partition
|
||||
[ nip +conditional+ eq? ] assoc-partition ;
|
||||
|
||||
: (store-dependencies) ( word assoc prop -- )
|
||||
[ keys f like ] dip set-word-prop ;
|
||||
: store-dependencies-of-type ( word assoc symbol prop-name -- )
|
||||
[ rot '[ nip _ = ] assoc-filter keys ] dip set-word-prop ;
|
||||
|
||||
: store-dependencies ( word assoc -- )
|
||||
split-dependencies
|
||||
"effect-dependencies" "conditional-dependencies" "definition-dependencies"
|
||||
[ (store-dependencies) ] tri-curry@ tri-curry* tri ;
|
||||
{
|
||||
{ +effect+ "effect-dependencies" }
|
||||
{ +conditional+ "conditional-dependencies" }
|
||||
{ +definition+ "definition-dependencies" }
|
||||
} [ store-dependencies-of-type ] 2with assoc-each ;
|
||||
|
||||
: add-xref ( word dependencies crossref -- )
|
||||
rot '[
|
||||
|
|
Loading…
Reference in New Issue