tools.annotations: redo 'watch' so that it doesn't call 'datastack' anymore, instead use macros to capture stack values. This works better with compiler optimizations
							parent
							
								
									a3c3445643
								
							
						
					
					
						commit
						f53efa88c6
					
				|  | @ -49,3 +49,14 @@ M: string blah-generic ; | ||||||
| [ ] [ M\ string blah-generic watch ] unit-test | [ ] [ M\ string blah-generic watch ] unit-test | ||||||
| 
 | 
 | ||||||
| [ "hi" ] [ "hi" blah-generic ] unit-test | [ "hi" ] [ "hi" blah-generic ] unit-test | ||||||
|  | 
 | ||||||
|  | ! See how well watch interacts with optimizations. | ||||||
|  | GENERIC: my-generic ( a -- b ) | ||||||
|  | M: object my-generic ; | ||||||
|  | 
 | ||||||
|  | \ my-generic watch | ||||||
|  | 
 | ||||||
|  | : some-code ( -- ) | ||||||
|  |     f my-generic drop ; | ||||||
|  | 
 | ||||||
|  | [ ] [ some-code ] unit-test | ||||||
|  | @ -3,7 +3,8 @@ | ||||||
| USING: accessors kernel math sorting words parser io summary | USING: accessors kernel math sorting words parser io summary | ||||||
| quotations sequences prettyprint continuations effects | quotations sequences prettyprint continuations effects | ||||||
| definitions compiler.units namespaces assocs tools.walker | definitions compiler.units namespaces assocs tools.walker | ||||||
| tools.time generic inspector fry tools.continuations ; | tools.time generic inspector fry tools.continuations | ||||||
|  | locals generalizations macros ; | ||||||
| IN: tools.annotations | IN: tools.annotations | ||||||
| 
 | 
 | ||||||
| GENERIC: reset ( word -- ) | GENERIC: reset ( word -- ) | ||||||
|  | @ -46,17 +47,20 @@ M: word annotate | ||||||
| 
 | 
 | ||||||
| <PRIVATE | <PRIVATE | ||||||
| 
 | 
 | ||||||
| : stack-values ( names -- alist ) | :: trace-quot ( word effect quot str -- quot' ) | ||||||
|     [ datastack ] dip [ nip ] [ length tail* ] 2bi zip ; |     effect quot call :> values | ||||||
|  |     values length :> n | ||||||
|  |     [ | ||||||
|  |         "--- " write str write bl word . | ||||||
|  |         n ndup n narray values swap zip simple-table. | ||||||
|  |         flush | ||||||
|  |     ] ; inline | ||||||
| 
 | 
 | ||||||
| : trace-message ( word quot str -- ) | MACRO: entering ( word -- quot ) | ||||||
|     "--- " write write bl over . |     dup stack-effect [ in>> ] "Entering" trace-quot ; | ||||||
|     [ stack-effect ] dip '[ @ stack-values ] [ f ] if* |  | ||||||
|     [ simple-table. ] unless-empty flush ; inline |  | ||||||
| 
 | 
 | ||||||
| : entering ( str -- ) [ in>> ] "Entering" trace-message ; | MACRO: leaving ( word -- quot ) | ||||||
| 
 |     dup stack-effect [ out>> ] "Leaving" trace-quot ; | ||||||
| : leaving ( str -- ) [ out>> ] "Leaving" trace-message ; |  | ||||||
| 
 | 
 | ||||||
| : (watch) ( word def -- def ) | : (watch) ( word def -- def ) | ||||||
|     over '[ _ entering @ _ leaving ] ; |     over '[ _ entering @ _ leaving ] ; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue