]> gitweb.factorcode.org Git - factor.git/blob - basis/compiler/tree/escape-analysis/check/check.factor
c363923fbb2b617d86cc5a5f7a2c15e82ae0f4b8
[factor.git] / basis / compiler / tree / escape-analysis / check / check.factor
1 ! Copyright (C) 2008, 2009 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors classes classes.tuple combinators.short-circuit
4 compiler.tree compiler.tree.propagation.info kernel math
5 sequences ;
6 IN: compiler.tree.escape-analysis.check
7
8 GENERIC: run-escape-analysis* ( node -- ? )
9
10 : unbox-inputs? ( nodes -- ? )
11     {
12         [ length 2 >= ]
13         [ first #introduce? ]
14         [ second #declare? ]
15     } 1&& ;
16
17 : run-escape-analysis? ( nodes -- ? )
18     { [ unbox-inputs? ] [ [ run-escape-analysis* ] any? ] } 1|| ;
19
20 M: #push run-escape-analysis*
21     literal>> class-of immutable-tuple-class? ;
22
23 M: #call run-escape-analysis*
24     immutable-tuple-boa? ;
25
26 M: #recursive run-escape-analysis*
27     child>> run-escape-analysis? ;
28
29 M: #branch run-escape-analysis*
30     children>> [ run-escape-analysis? ] any? ;
31
32 M: node run-escape-analysis* drop f ;