| 
									
										
										
										
											2008-01-09 04:52:08 -05:00
										 |  |  | ! Copyright (C) 2006, 2008 Slava Pestov. | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							|  |  |  | IN: definitions | 
					
						
							| 
									
										
										
										
											2008-01-09 04:52:08 -05:00
										 |  |  | USING: kernel sequences namespaces assocs graphs ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-01-09 16:51:55 -05:00
										 |  |  | TUPLE: no-compilation-unit definition ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : no-compilation-unit ( definition -- * )
 | 
					
						
							|  |  |  |     \ no-compilation-unit construct-boa throw ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | GENERIC: where ( defspec -- loc )
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: object where drop f ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | GENERIC: set-where ( loc defspec -- )
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-01-09 16:51:55 -05:00
										 |  |  | GENERIC: forget* ( defspec -- )
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: object forget* drop ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SYMBOL: forgotten-definitions | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : forgotten-definition ( defspec -- )
 | 
					
						
							|  |  |  |     dup forgotten-definitions get
 | 
					
						
							|  |  |  |     [ no-compilation-unit ] unless*
 | 
					
						
							|  |  |  |     set-at ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-01-09 16:51:55 -05:00
										 |  |  | : forget ( defspec -- ) dup forgotten-definition forget* ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-10-09 17:35:09 -04:00
										 |  |  | : forget-all ( definitions -- ) [ forget ] each ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | GENERIC: synopsis* ( defspec -- )
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | GENERIC: definer ( defspec -- start end )
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | GENERIC: definition ( defspec -- seq )
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SYMBOL: crossref | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | GENERIC: uses ( defspec -- seq )
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: object uses drop f ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : xref ( defspec -- ) dup uses crossref get add-vertex ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : usage ( defspec -- seq ) crossref get at keys ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | GENERIC: redefined* ( defspec -- )
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: object redefined* drop ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : redefined ( defspec -- )
 | 
					
						
							|  |  |  |     [ crossref get at ] closure [ drop redefined* ] assoc-each ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : unxref ( defspec -- )
 | 
					
						
							|  |  |  |     dup uses crossref get remove-vertex ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : delete-xref ( defspec -- )
 | 
					
						
							|  |  |  |     dup unxref crossref get delete-at ;
 |