]> gitweb.factorcode.org Git - factor.git/blob - core/compiler/inference/shuffle.factor
ead62d52baf825e7d54e32bcef8c2078c47146e4
[factor.git] / core / compiler / inference / shuffle.factor
1 ! Copyright (C) 2005, 2006 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 IN: inference
4 USING: hashtables kernel math namespaces sequences words ;
5
6 SYMBOL: recursive-state
7
8 : <computed> \ <computed> counter ;
9
10 TUPLE: value uid literal recursion ;
11
12 C: value ( obj -- value )
13     <computed> over set-value-uid
14     recursive-state get over set-value-recursion
15     [ set-value-literal ] keep ;
16
17 M: value hashcode value-uid ;
18
19 M: value equal? eq? ;
20
21 M: integer value-uid ;
22
23 M: integer value-recursion drop f ;
24
25 : split-shuffle ( stack shuffle -- stack1 stack2 )
26     effect-in length swap cut* ;
27
28 : load-shuffle ( stack shuffle -- )
29     effect-in [ set ] 2each ;
30
31 : shuffled-values ( shuffle -- values )
32     effect-out [ get ] map ;
33
34 : shuffle* ( stack shuffle -- stack )
35     [ [ load-shuffle ] keep shuffled-values ] with-scope ;
36
37 : shuffle ( stack shuffle -- stack )
38     [ split-shuffle ] keep shuffle* append ;