| 
									
										
										
										
											2008-12-06 05:57:38 -05:00
										 |  |  | ! Copyright (C) 2007, 2008 Slava Pestov, Eduardo Cavazos. | 
					
						
							|  |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							|  |  |  | USING: accessors definitions effects generic kernel locals | 
					
						
							| 
									
										
										
										
											2009-03-11 08:18:24 -04:00
										 |  |  | macros memoize prettyprint prettyprint.backend see words ;
 | 
					
						
							| 
									
										
										
										
											2008-12-06 05:57:38 -05:00
										 |  |  | IN: locals.definitions | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | PREDICATE: lambda-word < word "lambda" word-prop >boolean ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: lambda-word definer drop \ :: \ ; ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: lambda-word definition | 
					
						
							|  |  |  |     "lambda" word-prop body>> ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: lambda-word reset-word | 
					
						
							|  |  |  |     [ call-next-method ] [ f "lambda" set-word-prop ] bi ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | INTERSECTION: lambda-macro macro lambda-word ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: lambda-macro definer drop \ MACRO:: \ ; ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: lambda-macro definition | 
					
						
							|  |  |  |     "lambda" word-prop body>> ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: lambda-macro reset-word | 
					
						
							|  |  |  |     [ call-next-method ] [ f "lambda" set-word-prop ] bi ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-01 02:08:24 -05:00
										 |  |  | INTERSECTION: lambda-method method lambda-word ;
 | 
					
						
							| 
									
										
										
										
											2008-12-06 05:57:38 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | M: lambda-method definer drop \ M:: \ ; ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: lambda-method definition | 
					
						
							|  |  |  |     "lambda" word-prop body>> ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: lambda-method reset-word | 
					
						
							|  |  |  |     [ call-next-method ] [ f "lambda" set-word-prop ] bi ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | INTERSECTION: lambda-memoized memoized lambda-word ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: lambda-memoized definer drop \ MEMO:: \ ; ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: lambda-memoized definition | 
					
						
							|  |  |  |     "lambda" word-prop body>> ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: lambda-memoized reset-word | 
					
						
							|  |  |  |     [ call-next-method ] [ f "lambda" set-word-prop ] bi ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : method-stack-effect ( method -- effect )
 | 
					
						
							|  |  |  |     dup "lambda" word-prop vars>> | 
					
						
							|  |  |  |     swap "method-generic" word-prop stack-effect | 
					
						
							|  |  |  |     dup [ out>> ] when
 | 
					
						
							|  |  |  |     <effect> ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: lambda-method synopsis* | 
					
						
							|  |  |  |     dup dup dup definer. | 
					
						
							|  |  |  |     "method-class" word-prop pprint-word | 
					
						
							|  |  |  |     "method-generic" word-prop pprint-word | 
					
						
							|  |  |  |     method-stack-effect effect>string comment. ;
 |