| 
									
										
										
										
											2008-08-02 21:21:25 -04:00
										 |  |  | IN: compiler.tree.escape-analysis.tests | 
					
						
							|  |  |  | USING: compiler.tree.escape-analysis | 
					
						
							|  |  |  | compiler.tree.escape-analysis.allocations compiler.tree.builder | 
					
						
							| 
									
										
										
										
											2008-09-12 06:17:27 -04:00
										 |  |  | compiler.tree.recursive compiler.tree.normalization | 
					
						
							|  |  |  | math.functions compiler.tree.propagation compiler.tree.cleanup | 
					
						
							|  |  |  | compiler.tree.combinators compiler.tree sequences math | 
					
						
							|  |  |  | math.private kernel tools.test accessors slots.private | 
					
						
							|  |  |  | quotations.private prettyprint classes.tuple.private classes | 
					
						
							| 
									
										
										
										
											2008-10-20 21:40:36 -04:00
										 |  |  | classes.tuple namespaces | 
					
						
							| 
									
										
										
										
											2008-09-12 06:17:27 -04:00
										 |  |  | compiler.tree.propagation.info stack-checker.errors | 
					
						
							| 
									
										
										
										
											2008-11-11 09:50:30 -05:00
										 |  |  | compiler.tree.checker | 
					
						
							| 
									
										
										
										
											2008-09-12 06:17:27 -04:00
										 |  |  | kernel.private ;
 | 
					
						
							| 
									
										
										
										
											2008-08-02 21:21:25 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-08-03 22:32:12 -04:00
										 |  |  | GENERIC: count-unboxed-allocations* ( m node -- n )
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : (count-unboxed-allocations) ( m node -- n )
 | 
					
						
							| 
									
										
										
										
											2008-08-07 07:34:28 -04:00
										 |  |  |     out-d>> first escaping-allocation? [ 1+ ] unless ;
 | 
					
						
							| 
									
										
										
										
											2008-08-03 22:32:12 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | M: #call count-unboxed-allocations* | 
					
						
							| 
									
										
										
										
											2009-04-30 01:27:35 -04:00
										 |  |  |     dup immutable-tuple-boa? | 
					
						
							| 
									
										
										
										
											2008-08-03 22:32:12 -04:00
										 |  |  |     [ (count-unboxed-allocations) ] [ drop ] if ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: #push count-unboxed-allocations* | 
					
						
							|  |  |  |     dup literal>> class immutable-tuple-class? | 
					
						
							|  |  |  |     [ (count-unboxed-allocations) ] [ drop ] if ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: node count-unboxed-allocations* drop ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-08-02 21:21:25 -04:00
										 |  |  | : count-unboxed-allocations ( quot -- sizes )
 | 
					
						
							|  |  |  |     build-tree | 
					
						
							| 
									
										
										
										
											2008-09-12 06:17:27 -04:00
										 |  |  |     analyze-recursive | 
					
						
							| 
									
										
										
										
											2008-08-02 21:21:25 -04:00
										 |  |  |     normalize | 
					
						
							|  |  |  |     propagate | 
					
						
							|  |  |  |     cleanup
 | 
					
						
							|  |  |  |     escape-analysis | 
					
						
							| 
									
										
										
										
											2008-11-11 09:50:30 -05:00
										 |  |  |     dup check-nodes | 
					
						
							| 
									
										
										
										
											2008-08-03 22:32:12 -04:00
										 |  |  |     0 swap [ count-unboxed-allocations* ] each-node ;
 | 
					
						
							| 
									
										
										
										
											2008-08-02 21:21:25 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ 0 ] [ [ [ + ] curry ] count-unboxed-allocations ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 1 ] [ [ [ + ] curry drop ] count-unboxed-allocations ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 1 ] [ [ [ + ] curry 3 slot ] count-unboxed-allocations ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 1 ] [ [ [ + ] curry 3 slot drop ] count-unboxed-allocations ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 1 ] [ [ [ + ] curry uncurry ] count-unboxed-allocations ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 1 ] [ [ [ + ] curry call ] count-unboxed-allocations ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 1 ] [ [ [ + ] curry call ] count-unboxed-allocations ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 0 ] [ [ [ [ + ] curry ] [ drop [ ] ] if ] count-unboxed-allocations ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 2 ] [ | 
					
						
							|  |  |  |     [ [ [ + ] curry ] [ [ * ] curry ] if uncurry ] count-unboxed-allocations | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 0 ] [ | 
					
						
							|  |  |  |     [ [ [ + ] curry ] [ [ * ] curry ] if ] count-unboxed-allocations | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 3 ] [ | 
					
						
							|  |  |  |     [ [ [ + ] curry ] [ dup [ [ * ] curry ] [ [ / ] curry ] if ] if uncurry ] count-unboxed-allocations | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 2 ] [ | 
					
						
							|  |  |  |     [ [ [ + ] curry 4 ] [ dup [ [ * ] curry ] [ [ / ] curry ] if uncurry ] if ] count-unboxed-allocations | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 0 ] [ | 
					
						
							|  |  |  |     [ [ [ + ] curry ] [ dup [ [ * ] curry ] [ [ / ] curry ] if ] if ] count-unboxed-allocations | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TUPLE: cons { car read-only } { cdr read-only } ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 0 ] [ | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         dup 0 = [ | 
					
						
							|  |  |  |             2 cons boa
 | 
					
						
							|  |  |  |         ] [ | 
					
						
							|  |  |  |             dup 1 = [ | 
					
						
							|  |  |  |                 3 cons boa
 | 
					
						
							|  |  |  |             ] when
 | 
					
						
							|  |  |  |         ] if car>> | 
					
						
							|  |  |  |     ] count-unboxed-allocations | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 3 ] [ | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         dup 0 = [ | 
					
						
							|  |  |  |             2 cons boa
 | 
					
						
							|  |  |  |         ] [ | 
					
						
							|  |  |  |             dup 1 = [ | 
					
						
							|  |  |  |                 3 cons boa
 | 
					
						
							|  |  |  |             ] [ | 
					
						
							|  |  |  |                 4 cons boa
 | 
					
						
							|  |  |  |             ] if
 | 
					
						
							|  |  |  |         ] if car>> | 
					
						
							|  |  |  |     ] count-unboxed-allocations | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 0 ] [ | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         dup 0 = [ | 
					
						
							|  |  |  |             dup 1 = [ | 
					
						
							|  |  |  |                 3 cons boa
 | 
					
						
							|  |  |  |             ] [ | 
					
						
							|  |  |  |                 4 cons boa
 | 
					
						
							|  |  |  |             ] if
 | 
					
						
							|  |  |  |         ] unless car>> | 
					
						
							|  |  |  |     ] count-unboxed-allocations | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 2 ] [ | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         dup 0 = [ | 
					
						
							|  |  |  |             2 cons boa
 | 
					
						
							|  |  |  |         ] [ | 
					
						
							|  |  |  |             dup 1 = [ | 
					
						
							|  |  |  |                 3 cons boa
 | 
					
						
							|  |  |  |             ] [ | 
					
						
							|  |  |  |                 4 cons boa
 | 
					
						
							|  |  |  |             ] if car>> | 
					
						
							|  |  |  |         ] if
 | 
					
						
							|  |  |  |     ] count-unboxed-allocations | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 0 ] [ | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         dup 0 = [ | 
					
						
							|  |  |  |             2 cons boa
 | 
					
						
							|  |  |  |         ] [ | 
					
						
							|  |  |  |             dup 1 = [ | 
					
						
							|  |  |  |                 3 cons boa dup .
 | 
					
						
							|  |  |  |             ] [ | 
					
						
							|  |  |  |                 4 cons boa
 | 
					
						
							|  |  |  |             ] if
 | 
					
						
							|  |  |  |         ] if drop
 | 
					
						
							|  |  |  |     ] count-unboxed-allocations | 
					
						
							|  |  |  | ] unit-test | 
					
						
							| 
									
										
										
										
											2008-08-03 22:32:12 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ 2 ] [ | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         [ dup cons boa ] [ drop 1 2 cons boa ] if car>> | 
					
						
							|  |  |  |     ] count-unboxed-allocations | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 2 ] [ | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         3dup
 | 
					
						
							|  |  |  |         [ cons boa ] [ cons boa 3 cons boa ] if
 | 
					
						
							|  |  |  |         [ car>> ] [ cdr>> ] bi
 | 
					
						
							|  |  |  |     ] count-unboxed-allocations | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 2 ] [ | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         3dup [ cons boa ] [ cons boa . 1 2 cons boa ] if
 | 
					
						
							|  |  |  |         [ car>> ] [ cdr>> ] bi
 | 
					
						
							|  |  |  |     ] count-unboxed-allocations | 
					
						
							|  |  |  | ] unit-test | 
					
						
							| 
									
										
										
										
											2008-08-04 05:35:31 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ 1 ] [ | 
					
						
							|  |  |  |     [ [ 3 cons boa ] [ "A" throw ] if car>> ] | 
					
						
							|  |  |  |     count-unboxed-allocations | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 0 ] [ | 
					
						
							|  |  |  |     [ 10 [ drop ] each-integer ] count-unboxed-allocations | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 2 ] [ | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         1 2 cons boa 10 [ 2drop 1 2 cons boa ] each-integer car>> | 
					
						
							|  |  |  |     ] count-unboxed-allocations | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 0 ] [ | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         1 2 cons boa 10 [ drop 2 cons boa ] each-integer car>> | 
					
						
							|  |  |  |     ] count-unboxed-allocations | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : infinite-cons-loop ( a -- b ) 2 cons boa infinite-cons-loop ; inline recursive
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 0 ] [ | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         1 2 cons boa infinite-cons-loop | 
					
						
							|  |  |  |     ] count-unboxed-allocations | 
					
						
							|  |  |  | ] unit-test | 
					
						
							| 
									
										
										
										
											2008-08-07 02:08:11 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | TUPLE: rw-box i ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | C: <rw-box> rw-box | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 0 ] [ [ <rw-box> i>> ] count-unboxed-allocations ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : fake-fib ( m -- n )
 | 
					
						
							|  |  |  |     dup i>> 1 <= [ drop 1 <rw-box> ] when ; inline recursive
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 0 ] [ [ <rw-box> fake-fib i>> ] count-unboxed-allocations ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TUPLE: ro-box { i read-only } ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | C: <ro-box> ro-box | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : tuple-fib ( m -- n )
 | 
					
						
							|  |  |  |     dup i>> 1 <= [ | 
					
						
							|  |  |  |         drop 1 <ro-box> | 
					
						
							|  |  |  |     ] [ | 
					
						
							|  |  |  |         i>> 1- <ro-box> | 
					
						
							|  |  |  |         dup tuple-fib | 
					
						
							|  |  |  |         swap
 | 
					
						
							|  |  |  |         i>> 1- <ro-box> | 
					
						
							|  |  |  |         tuple-fib | 
					
						
							|  |  |  |         swap i>> swap i>> + <ro-box> | 
					
						
							|  |  |  |     ] if ; inline recursive
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 5 ] [ [ <ro-box> tuple-fib i>> ] count-unboxed-allocations ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 3 ] [ [ <ro-box> tuple-fib ] count-unboxed-allocations ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-08-08 14:14:36 -04:00
										 |  |  | : tuple-fib' ( m -- n )
 | 
					
						
							|  |  |  |     dup 1 <= [ 1- tuple-fib' i>> ] when <ro-box> ; inline recursive
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 0 ] [ [ tuple-fib' ] count-unboxed-allocations ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-08-07 02:08:11 -04:00
										 |  |  | : bad-tuple-fib-1 ( m -- n )
 | 
					
						
							|  |  |  |     dup i>> 1 <= [ | 
					
						
							|  |  |  |         drop 1 <ro-box> | 
					
						
							|  |  |  |     ] [ | 
					
						
							|  |  |  |         i>> 1- <ro-box> | 
					
						
							|  |  |  |         dup bad-tuple-fib-1 | 
					
						
							|  |  |  |         swap
 | 
					
						
							|  |  |  |         i>> 1- <ro-box> | 
					
						
							|  |  |  |         bad-tuple-fib-1 dup .
 | 
					
						
							|  |  |  |         swap i>> swap i>> + <ro-box> | 
					
						
							|  |  |  |     ] if ; inline recursive
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 3 ] [ [ <ro-box> bad-tuple-fib-1 i>> ] count-unboxed-allocations ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : bad-tuple-fib-2 ( m -- n )
 | 
					
						
							|  |  |  |     dup .
 | 
					
						
							|  |  |  |     dup i>> 1 <= [ | 
					
						
							|  |  |  |         drop 1 <ro-box> | 
					
						
							|  |  |  |     ] [ | 
					
						
							|  |  |  |         i>> 1- <ro-box> | 
					
						
							|  |  |  |         dup bad-tuple-fib-2 | 
					
						
							|  |  |  |         swap
 | 
					
						
							|  |  |  |         i>> 1- <ro-box> | 
					
						
							|  |  |  |         bad-tuple-fib-2 | 
					
						
							|  |  |  |         swap i>> swap i>> + <ro-box> | 
					
						
							|  |  |  |     ] if ; inline recursive
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 2 ] [ [ <ro-box> bad-tuple-fib-2 i>> ] count-unboxed-allocations ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : tuple-fib-2 ( m -- n )
 | 
					
						
							|  |  |  |     dup 1 <= [ | 
					
						
							|  |  |  |         drop 1 <ro-box> | 
					
						
							|  |  |  |     ] [ | 
					
						
							|  |  |  |         1- dup tuple-fib-2 | 
					
						
							|  |  |  |         swap
 | 
					
						
							|  |  |  |         1- tuple-fib-2 | 
					
						
							|  |  |  |         swap i>> swap i>> + <ro-box> | 
					
						
							|  |  |  |     ] if ; inline recursive
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 2 ] [ [ tuple-fib-2 i>> ] count-unboxed-allocations ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : tuple-fib-3 ( m -- n )
 | 
					
						
							|  |  |  |     dup 1 <= [ | 
					
						
							|  |  |  |         drop 1 <ro-box> | 
					
						
							|  |  |  |     ] [ | 
					
						
							|  |  |  |         1- dup tuple-fib-3 | 
					
						
							|  |  |  |         swap
 | 
					
						
							|  |  |  |         1- tuple-fib-3 dup .
 | 
					
						
							|  |  |  |         swap i>> swap i>> + <ro-box> | 
					
						
							|  |  |  |     ] if ; inline recursive
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 0 ] [ [ tuple-fib-3 i>> ] count-unboxed-allocations ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : bad-tuple-fib-3 ( m -- n )
 | 
					
						
							|  |  |  |     dup 1 <= [ | 
					
						
							|  |  |  |         drop 1 <ro-box> | 
					
						
							|  |  |  |     ] [ | 
					
						
							|  |  |  |         1- dup bad-tuple-fib-3 | 
					
						
							|  |  |  |         swap
 | 
					
						
							|  |  |  |         1- bad-tuple-fib-3 | 
					
						
							|  |  |  |         2drop f
 | 
					
						
							|  |  |  |     ] if ; inline recursive
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 0 ] [ [ bad-tuple-fib-3 i>> ] count-unboxed-allocations ] unit-test | 
					
						
							| 
									
										
										
										
											2008-08-07 07:34:28 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-30 01:27:35 -04:00
										 |  |  | [ 1 ] [ [ complex boa >rect ] count-unboxed-allocations ] unit-test | 
					
						
							| 
									
										
										
										
											2008-08-08 14:14:36 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ 0 ] [ [ 1 cons boa 2 cons boa ] count-unboxed-allocations ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 1 ] [ [ 1 cons boa 2 cons boa car>> ] count-unboxed-allocations ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 0 ] [ [ 1 cons boa 2 cons boa dup . car>> ] count-unboxed-allocations ] unit-test | 
					
						
							| 
									
										
										
										
											2008-08-18 16:47:49 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ 0 ] [ [ 1 cons boa "x" get slot ] count-unboxed-allocations ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : impeach-node ( quot: ( node -- ) -- )
 | 
					
						
							| 
									
										
										
										
											2009-05-10 18:03:41 -04:00
										 |  |  |     [ call ] keep impeach-node ; inline recursive
 | 
					
						
							| 
									
										
										
										
											2008-08-18 16:47:49 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | : bleach-node ( quot: ( node -- ) -- )
 | 
					
						
							|  |  |  |     [ bleach-node ] curry [ ] compose impeach-node ; inline recursive
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-11 09:50:30 -05:00
										 |  |  | [ 3 ] [ [ [ ] bleach-node ] count-unboxed-allocations ] unit-test | 
					
						
							| 
									
										
										
										
											2008-08-19 18:11:33 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ 0 ] [ | 
					
						
							|  |  |  |     [ dup -1 over >= [ 0 >= [ "A" throw ] unless ] [ drop ] if ] | 
					
						
							|  |  |  |     count-unboxed-allocations | 
					
						
							|  |  |  | ] unit-test | 
					
						
							| 
									
										
										
										
											2008-08-22 16:30:57 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ 0 ] [ | 
					
						
							|  |  |  |     [ \ too-many->r boa f f \ inference-error boa ] | 
					
						
							|  |  |  |     count-unboxed-allocations | 
					
						
							|  |  |  | ] unit-test | 
					
						
							| 
									
										
										
										
											2008-08-29 05:23:39 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ 0 ] [ | 
					
						
							|  |  |  |     [ { null } declare [ 1 ] [ 2 ] if ] count-unboxed-allocations | 
					
						
							|  |  |  | ] unit-test |