| 
									
										
										
										
											2009-03-30 06:31:50 -04:00
										 |  |  | USING: smalltalk.compiler tools.test prettyprint smalltalk.ast | 
					
						
							| 
									
										
										
										
											2009-03-31 02:24:38 -04:00
										 |  |  | smalltalk.compiler.lexenv stack-checker locals.rewrite.closures | 
					
						
							| 
									
										
										
										
											2009-04-01 03:06:57 -04:00
										 |  |  | kernel accessors compiler.units sequences arrays ;
 | 
					
						
							| 
									
										
										
										
											2009-03-30 06:31:50 -04:00
										 |  |  | IN: smalltalk.compiler.tests | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-30 21:45:01 -04:00
										 |  |  | : test-compilation ( ast -- quot )
 | 
					
						
							| 
									
										
										
										
											2009-04-01 03:06:57 -04:00
										 |  |  |     [ | 
					
						
							|  |  |  |         1array ast-sequence new swap >>body | 
					
						
							|  |  |  |         compile-smalltalk [ call ] append
 | 
					
						
							|  |  |  |     ] with-compilation-unit ;
 | 
					
						
							| 
									
										
										
										
											2009-03-30 21:45:01 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | : test-inference ( ast -- in# out# )
 | 
					
						
							| 
									
										
										
										
											2010-01-14 10:10:13 -05:00
										 |  |  |     test-compilation infer [ in>> ] [ out>> ] bi [ length ] bi@ ;
 | 
					
						
							| 
									
										
										
										
											2009-03-30 21:45:01 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-03 12:39:59 -04:00
										 |  |  | { 2 1 } [ | 
					
						
							| 
									
										
										
										
											2009-03-30 21:45:01 -04:00
										 |  |  |     T{ ast-block f
 | 
					
						
							|  |  |  |        { "a" "b" } | 
					
						
							|  |  |  |        { | 
					
						
							|  |  |  |            T{ ast-message-send f
 | 
					
						
							|  |  |  |               T{ ast-name f "a" } | 
					
						
							|  |  |  |               "+" | 
					
						
							|  |  |  |               { T{ ast-name f "b" } } | 
					
						
							| 
									
										
										
										
											2009-03-30 06:31:50 -04:00
										 |  |  |            } | 
					
						
							| 
									
										
										
										
											2009-03-30 21:45:01 -04:00
										 |  |  |        } | 
					
						
							|  |  |  |     } test-inference | 
					
						
							| 
									
										
										
										
											2009-03-30 06:31:50 -04:00
										 |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-03 12:39:59 -04:00
										 |  |  | { 3 1 } [ | 
					
						
							| 
									
										
										
										
											2009-03-30 21:45:01 -04:00
										 |  |  |     T{ ast-block f
 | 
					
						
							|  |  |  |        { "a" "b" "c" } | 
					
						
							|  |  |  |        { | 
					
						
							|  |  |  |            T{ ast-assignment f
 | 
					
						
							|  |  |  |               T{ ast-name f "a" } | 
					
						
							|  |  |  |               T{ ast-message-send f
 | 
					
						
							| 
									
										
										
										
											2009-03-31 02:24:38 -04:00
										 |  |  |                  T{ ast-name f "c" } | 
					
						
							| 
									
										
										
										
											2009-03-30 21:45:01 -04:00
										 |  |  |                  "+" | 
					
						
							|  |  |  |                  { T{ ast-name f "b" } } | 
					
						
							|  |  |  |               } | 
					
						
							|  |  |  |            } | 
					
						
							|  |  |  |            T{ ast-message-send f
 | 
					
						
							|  |  |  |               T{ ast-name f "b" } | 
					
						
							|  |  |  |               "blah:" | 
					
						
							|  |  |  |               { 123.456 } | 
					
						
							| 
									
										
										
										
											2009-03-30 06:31:50 -04:00
										 |  |  |            } | 
					
						
							| 
									
										
										
										
											2009-03-30 21:45:01 -04:00
										 |  |  |            T{ ast-return f T{ ast-name f "c" } } | 
					
						
							|  |  |  |        } | 
					
						
							|  |  |  |     } test-inference | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-03 12:39:59 -04:00
										 |  |  | { 0 1 } [ | 
					
						
							| 
									
										
										
										
											2009-03-30 21:45:01 -04:00
										 |  |  |     T{ ast-block f
 | 
					
						
							| 
									
										
										
										
											2009-04-01 03:06:57 -04:00
										 |  |  |        { } | 
					
						
							| 
									
										
										
										
											2009-03-30 21:45:01 -04:00
										 |  |  |        { } | 
					
						
							|  |  |  |        { | 
					
						
							|  |  |  |            T{ ast-message-send | 
					
						
							|  |  |  |               { receiver 1 } | 
					
						
							|  |  |  |               { selector "to:do:" } | 
					
						
							|  |  |  |               { arguments | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     10
 | 
					
						
							|  |  |  |                     T{ ast-block | 
					
						
							|  |  |  |                        { arguments { "i" } } | 
					
						
							|  |  |  |                        { body | 
					
						
							|  |  |  |                          { | 
					
						
							|  |  |  |                              T{ ast-message-send | 
					
						
							|  |  |  |                                 { receiver | 
					
						
							|  |  |  |                                   T{ ast-name { name "i" } } | 
					
						
							|  |  |  |                                 } | 
					
						
							|  |  |  |                                 { selector "print" } | 
					
						
							|  |  |  |                              } | 
					
						
							|  |  |  |                          } | 
					
						
							|  |  |  |                        } | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |               } | 
					
						
							|  |  |  |            } | 
					
						
							|  |  |  |        } | 
					
						
							|  |  |  |     } test-inference | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-03 12:39:59 -04:00
										 |  |  | { "a" } [ | 
					
						
							| 
									
										
										
										
											2009-03-30 21:45:01 -04:00
										 |  |  |     T{ ast-block f
 | 
					
						
							| 
									
										
										
										
											2009-04-01 03:06:57 -04:00
										 |  |  |        { } | 
					
						
							| 
									
										
										
										
											2009-03-30 21:45:01 -04:00
										 |  |  |        { } | 
					
						
							|  |  |  |        { { T{ ast-block { body { "a" } } } } } | 
					
						
							|  |  |  |     } test-compilation call first call
 | 
					
						
							| 
									
										
										
										
											2015-07-02 13:34:01 -04:00
										 |  |  | ] unit-test |