| 
									
										
										
										
											2009-03-30 21:45:01 -04:00
										 |  |  | ! Copyright (C) 2009 Slava Pestov. | 
					
						
							|  |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							| 
									
										
										
										
											2009-04-01 03:06:57 -04:00
										 |  |  | USING: kernel present io math sequences assocs math.ranges | 
					
						
							|  |  |  | math.order fry tools.time locals smalltalk.selectors | 
					
						
							|  |  |  | smalltalk.ast smalltalk.classes ;
 | 
					
						
							| 
									
										
										
										
											2009-03-30 21:45:01 -04:00
										 |  |  | IN: smalltalk.library | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SELECTOR: print
 | 
					
						
							|  |  |  | SELECTOR: asString | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: object selector-print dup present print ;
 | 
					
						
							|  |  |  | M: object selector-asString present ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-01 03:06:57 -04:00
										 |  |  | SELECTOR: print: | 
					
						
							|  |  |  | SELECTOR: nextPutAll: | 
					
						
							|  |  |  | SELECTOR: tab | 
					
						
							|  |  |  | SELECTOR: nl
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: object selector-print: [ present ] dip stream-print nil ;
 | 
					
						
							|  |  |  | M: object selector-nextPutAll: selector-print: ;
 | 
					
						
							|  |  |  | M: object selector-tab "    " swap selector-print: ;
 | 
					
						
							|  |  |  | M: object selector-nl stream-nl nil ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-30 21:45:01 -04:00
										 |  |  | SELECTOR: +
 | 
					
						
							|  |  |  | SELECTOR: -
 | 
					
						
							|  |  |  | SELECTOR: *
 | 
					
						
							|  |  |  | SELECTOR: /
 | 
					
						
							|  |  |  | SELECTOR: <
 | 
					
						
							|  |  |  | SELECTOR: >
 | 
					
						
							|  |  |  | SELECTOR: <=
 | 
					
						
							|  |  |  | SELECTOR: >=
 | 
					
						
							|  |  |  | SELECTOR: =
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: object selector-+  swap +  ;
 | 
					
						
							|  |  |  | M: object selector--  swap -  ;
 | 
					
						
							|  |  |  | M: object selector-*  swap *  ;
 | 
					
						
							|  |  |  | M: object selector-/  swap /  ;
 | 
					
						
							|  |  |  | M: object selector-<  swap <  ;
 | 
					
						
							|  |  |  | M: object selector->  swap >  ;
 | 
					
						
							|  |  |  | M: object selector-<= swap <= ;
 | 
					
						
							|  |  |  | M: object selector->= swap >= ;
 | 
					
						
							|  |  |  | M: object selector-=  swap =  ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-01 03:06:57 -04:00
										 |  |  | SELECTOR: min: | 
					
						
							|  |  |  | SELECTOR: max: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: object selector-min: min ;
 | 
					
						
							|  |  |  | M: object selector-max: max ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-30 21:45:01 -04:00
										 |  |  | SELECTOR: ifTrue: | 
					
						
							|  |  |  | SELECTOR: ifFalse: | 
					
						
							|  |  |  | SELECTOR: ifTrue:ifFalse: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: object selector-ifTrue: [ call( -- result ) ] [ drop nil ] if ;
 | 
					
						
							|  |  |  | M: object selector-ifFalse: [ drop nil ] [ call( -- result ) ] if ;
 | 
					
						
							|  |  |  | M: object selector-ifTrue:ifFalse: [ drop call( -- result ) ] [ nip call( -- result ) ] if ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-01 03:06:57 -04:00
										 |  |  | SELECTOR: isNil | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: object selector-isNil nil eq? ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-30 21:45:01 -04:00
										 |  |  | SELECTOR: at: | 
					
						
							|  |  |  | SELECTOR: at:put: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: sequence selector-at: nth ;
 | 
					
						
							|  |  |  | M: sequence selector-at:put: ( key value receiver -- receiver ) [ swapd set-nth ] keep ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: assoc selector-at: at ;
 | 
					
						
							|  |  |  | M: assoc selector-at:put: ( key value receiver -- receiver ) [ swapd set-at ] keep ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SELECTOR: do: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M:: object selector-do: ( quot receiver -- nil )
 | 
					
						
							|  |  |  |     receiver [ quot call( elt -- result ) drop ] each nil ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SELECTOR: to: | 
					
						
							|  |  |  | SELECTOR: to:do: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: object selector-to: swap [a,b] ;
 | 
					
						
							|  |  |  | M:: object selector-to:do: ( to quot from -- nil )
 | 
					
						
							|  |  |  |     from to [a,b] [ quot call( i -- result ) drop ] each nil ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SELECTOR: value | 
					
						
							|  |  |  | SELECTOR: value: | 
					
						
							|  |  |  | SELECTOR: value:value: | 
					
						
							|  |  |  | SELECTOR: value:value:value: | 
					
						
							|  |  |  | SELECTOR: value:value:value:value: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: object selector-value call( -- result ) ;
 | 
					
						
							|  |  |  | M: object selector-value: call( input -- result ) ;
 | 
					
						
							|  |  |  | M: object selector-value:value: call( input input -- result ) ;
 | 
					
						
							|  |  |  | M: object selector-value:value:value: call( input input input -- result ) ;
 | 
					
						
							|  |  |  | M: object selector-value:value:value:value: call( input input input input -- result ) ;
 | 
					
						
							| 
									
										
										
										
											2009-03-31 02:24:38 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | SELECTOR: new
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-31 22:23:09 -04:00
										 |  |  | M: object selector-new new ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SELECTOR: time | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-29 19:43:15 -04:00
										 |  |  | M: object selector-time '[ _ call( -- result ) ] time ;
 |