| 
									
										
										
										
											2009-04-22 05:20:38 -04:00
										 |  |  | ! Copyright (C) 2007, 2009 Slava Pestov. | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							| 
									
										
										
										
											2013-03-05 13:34:47 -05:00
										 |  |  | USING: accessors arrays assocs checksums checksums.crc32 | 
					
						
							|  |  |  | compiler.units continuations definitions io.encodings.utf8 | 
					
						
							| 
									
										
										
										
											2013-03-10 21:04:37 -04:00
										 |  |  | io.files io.pathnames kernel namespaces sequences sets | 
					
						
							| 
									
										
										
										
											2013-03-05 13:34:47 -05:00
										 |  |  | source-files.errors strings words ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | IN: source-files | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SYMBOL: source-files | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-24 01:00:48 -04:00
										 |  |  | TUPLE: source-file | 
					
						
							| 
									
										
										
										
											2016-04-14 20:21:05 -04:00
										 |  |  | { path string } | 
					
						
							| 
									
										
										
										
											2009-04-22 05:20:38 -04:00
										 |  |  | top-level-form | 
					
						
							| 
									
										
										
										
											2008-03-13 05:54:33 -04:00
										 |  |  | checksum | 
					
						
							| 
									
										
										
										
											2011-08-17 23:58:09 -04:00
										 |  |  | definitions | 
					
						
							|  |  |  | main ;
 | 
					
						
							| 
									
										
										
										
											2009-04-22 05:20:38 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-24 01:00:48 -04:00
										 |  |  | : record-top-level-form ( quot source-file -- )
 | 
					
						
							| 
									
										
										
										
											2010-05-05 16:52:54 -04:00
										 |  |  |     top-level-form<< | 
					
						
							| 
									
										
										
										
											2013-03-10 12:11:18 -04:00
										 |  |  |     [ ] [ f notify-definition-observers ] if-bootstrapping ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-01-09 21:13:59 -05:00
										 |  |  | : record-checksum ( lines source-file -- )
 | 
					
						
							| 
									
										
										
										
											2010-05-05 16:52:54 -04:00
										 |  |  |     [ crc32 checksum-lines ] dip checksum<< ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-24 01:00:48 -04:00
										 |  |  | : record-definitions ( source-file -- )
 | 
					
						
							| 
									
										
										
										
											2008-08-30 13:34:37 -04:00
										 |  |  |     new-definitions get >>definitions drop ;
 | 
					
						
							| 
									
										
										
										
											2007-12-21 21:18:24 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | : <source-file> ( path -- source-file )
 | 
					
						
							| 
									
										
										
										
											2016-04-14 20:21:05 -04:00
										 |  |  |     f f <definitions> f source-file boa ;
 | 
					
						
							| 
									
										
										
										
											2008-08-30 13:34:37 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-24 01:00:48 -04:00
										 |  |  | : path>source-file ( path -- source-file )
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  |     source-files get [ <source-file> ] cache ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : reset-checksums ( -- )
 | 
					
						
							|  |  |  |     source-files get [ | 
					
						
							| 
									
										
										
										
											2014-04-29 16:20:33 -04:00
										 |  |  |         over exists? [ | 
					
						
							|  |  |  |             [ utf8 file-lines ] dip record-checksum | 
					
						
							| 
									
										
										
										
											2008-03-03 17:44:24 -05:00
										 |  |  |         ] [ 2drop ] if
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  |     ] assoc-each ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-08-31 08:45:33 -04:00
										 |  |  | M: pathname where string>> 1 2array ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-01-09 19:13:26 -05:00
										 |  |  | : forget-source ( path -- )
 | 
					
						
							| 
									
										
										
										
											2009-04-22 05:20:38 -04:00
										 |  |  |     source-files get delete-at*
 | 
					
						
							| 
									
										
										
										
											2013-03-10 21:04:37 -04:00
										 |  |  |     [ definitions>> [ members forget-all ] each ] [ drop ] if ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-01-09 19:13:26 -05:00
										 |  |  | M: pathname forget* | 
					
						
							| 
									
										
										
										
											2008-08-31 08:45:33 -04:00
										 |  |  |     string>> forget-source ;
 | 
					
						
							| 
									
										
										
										
											2007-12-21 21:18:24 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-24 01:00:48 -04:00
										 |  |  | : rollback-source-file ( source-file -- )
 | 
					
						
							| 
									
										
										
										
											2008-08-30 13:34:37 -04:00
										 |  |  |     [ | 
					
						
							| 
									
										
										
										
											2013-03-10 21:04:37 -04:00
										 |  |  |         new-definitions get [ union ] 2map
 | 
					
						
							| 
									
										
										
										
											2008-08-30 13:34:37 -04:00
										 |  |  |     ] change-definitions drop ;
 | 
					
						
							| 
									
										
										
										
											2007-12-21 21:18:24 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-24 01:00:48 -04:00
										 |  |  | SYMBOL: current-source-file | 
					
						
							| 
									
										
										
										
											2007-12-21 21:18:24 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-09 05:50:38 -04:00
										 |  |  | : wrap-source-file-error ( error -- * )
 | 
					
						
							| 
									
										
										
										
											2015-07-24 01:00:48 -04:00
										 |  |  |     current-source-file get rollback-source-file | 
					
						
							| 
									
										
										
										
											2014-11-02 23:16:22 -05:00
										 |  |  |     source-file-error new
 | 
					
						
							| 
									
										
										
										
											2009-04-09 05:50:38 -04:00
										 |  |  |         f >>line# | 
					
						
							| 
									
										
										
										
											2015-07-24 01:00:48 -04:00
										 |  |  |         current-source-file get path>> >>path | 
					
						
							| 
									
										
										
										
											2009-04-15 01:27:02 -04:00
										 |  |  |         swap >>error rethrow ;
 | 
					
						
							| 
									
										
										
										
											2008-06-25 04:25:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-12-21 21:18:24 -05:00
										 |  |  | : with-source-file ( name quot -- )
 | 
					
						
							| 
									
										
										
										
											2015-09-08 19:15:10 -04:00
										 |  |  |     ! Should be called from inside with-compilation-unit. | 
					
						
							| 
									
										
										
										
											2016-03-03 14:54:33 -05:00
										 |  |  |     H{ } clone [ | 
					
						
							| 
									
										
										
										
											2008-06-25 04:25:08 -04:00
										 |  |  |         [ | 
					
						
							| 
									
										
										
										
											2015-07-24 01:00:48 -04:00
										 |  |  |             path>source-file | 
					
						
							| 
									
										
										
										
											2016-03-29 20:14:42 -04:00
										 |  |  |             [ current-source-file namespaces:set ] | 
					
						
							|  |  |  |             [ definitions>> old-definitions namespaces:set ] bi
 | 
					
						
							| 
									
										
										
										
											2009-04-09 05:50:38 -04:00
										 |  |  |         ] dip
 | 
					
						
							|  |  |  |         [ wrap-source-file-error ] recover
 | 
					
						
							| 
									
										
										
										
											2016-03-03 14:54:33 -05:00
										 |  |  |     ] with-variables ; inline
 |