factor/unfinished/compiler/tree/escape-analysis/simple/simple.factor

43 lines
1.3 KiB
Factor
Raw Normal View History

2008-08-02 00:31:43 -04:00
! Copyright (C) 2008 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: kernel accessors sequences classes.tuple
classes.tuple.private math math.private slots.private
2008-08-03 22:32:12 -04:00
combinators dequeues search-dequeues namespaces fry classes
stack-checker.state
2008-08-02 00:31:43 -04:00
compiler.tree
compiler.tree.propagation.info
compiler.tree.escape-analysis.nodes
compiler.tree.escape-analysis.allocations ;
IN: compiler.tree.escape-analysis.simple
2008-08-03 22:32:12 -04:00
M: #push escape-analysis*
#! Delegation.
dup literal>> dup class immutable-tuple-class? [
tuple-slots length 1- [ <slot-value> ] replicate
swap out-d>> first record-allocation
] [ 2drop ] if ;
2008-08-02 00:31:43 -04:00
: record-tuple-allocation ( #call -- )
#! Delegation.
dup dup in-d>> peek node-value-info literal>>
2008-08-03 22:32:12 -04:00
class>> immutable-tuple-class? [
2008-08-02 00:31:43 -04:00
[ in-d>> but-last ] [ out-d>> first ] bi
record-allocation
] [ drop ] if ;
: record-slot-call ( #call -- )
[ out-d>> first ]
[ dup in-d>> second node-value-info literal>> ]
[ in-d>> first ] tri
over fixnum? [ [ 3 - ] dip record-slot-access ] [ 3drop ] if ;
M: #call escape-analysis*
dup word>> {
{ \ <tuple-boa> [ record-tuple-allocation ] }
{ \ slot [ record-slot-call ] }
[ drop in-d>> add-escaping-values ]
} case ;
M: #return escape-analysis*
in-d>> add-escaping-values ;