29 lines
		
	
	
		
			715 B
		
	
	
	
		
			Factor
		
	
	
		
		
			
		
	
	
			29 lines
		
	
	
		
			715 B
		
	
	
	
		
			Factor
		
	
	
| 
								 | 
							
								! Copyright (C) 2008 Alex Chapman
							 | 
						||
| 
								 | 
							
								! See http://factorcode.org/license.txt for BSD license.
							 | 
						||
| 
								 | 
							
								USING: assocs digraphs kernel namespaces sequences ;
							 | 
						||
| 
								 | 
							
								IN: hooks
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: hooks ( -- hooks )
							 | 
						||
| 
								 | 
							
								    \ hooks global [ drop H{ } clone ] cache ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: hook-graph ( hook -- graph )
							 | 
						||
| 
								 | 
							
								    hooks [ drop <digraph> ] cache ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: reset-hook ( hook -- )
							 | 
						||
| 
								 | 
							
								    <digraph> swap hooks set-at ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: add-hook ( key quot hook -- )
							 | 
						||
| 
								 | 
							
								    #! hook should be a symbol. Note that symbols with the same name but
							 | 
						||
| 
								 | 
							
								    #! different vocab are not equal
							 | 
						||
| 
								 | 
							
								    hook-graph add-vertex ; 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: before ( key1 key2 hook -- )
							 | 
						||
| 
								 | 
							
								    hook-graph add-edge ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: after ( key1 key2 hook -- )
							 | 
						||
| 
								 | 
							
								    swapd before ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: call-hook ( hook -- )
							 | 
						||
| 
								 | 
							
								    hook-graph topological-sorted-values [ call ] each ;
							 | 
						||
| 
								 | 
							
								
							 |