33 lines
921 B
Factor
33 lines
921 B
Factor
! Copyright (C) 2008, 2009 Slava Pestov.
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
USING: classes classes.tuple math math.private accessors sequences
|
|
combinators.short-circuit kernel compiler.tree
|
|
compiler.tree.combinators compiler.tree.propagation.info ;
|
|
IN: compiler.tree.escape-analysis.check
|
|
|
|
GENERIC: run-escape-analysis* ( node -- ? )
|
|
|
|
: unbox-inputs? ( nodes -- ? )
|
|
{
|
|
[ length 2 >= ]
|
|
[ first #introduce? ]
|
|
[ second #declare? ]
|
|
} 1&& ;
|
|
|
|
: run-escape-analysis? ( nodes -- ? )
|
|
{ [ unbox-inputs? ] [ [ run-escape-analysis* ] any? ] } 1|| ;
|
|
|
|
M: #push run-escape-analysis*
|
|
literal>> class-of immutable-tuple-class? ;
|
|
|
|
M: #call run-escape-analysis*
|
|
immutable-tuple-boa? ;
|
|
|
|
M: #recursive run-escape-analysis*
|
|
child>> run-escape-analysis? ;
|
|
|
|
M: #branch run-escape-analysis*
|
|
children>> [ run-escape-analysis? ] any? ;
|
|
|
|
M: node run-escape-analysis* drop f ;
|