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