]> gitweb.factorcode.org Git - factor.git/blob - basis/locals/backend/backend.factor
Create basis vocab root
[factor.git] / basis / locals / backend / backend.factor
1 ! Copyright (C) 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: math kernel slots.private inference.known-words
4 inference.backend sequences effects words ;
5 IN: locals.backend
6
7 : load-locals ( n -- )
8     dup zero? [ drop ] [ swap >r 1- load-locals ] if ;
9
10 : get-local ( n -- value )
11     dup zero? [ drop dup ] [ r> swap 1- get-local swap >r ] if ;
12
13 : local-value 2 slot ; inline
14
15 : set-local-value 2 set-slot ; inline
16
17 : drop-locals ( n -- )
18     dup zero? [ drop ] [ r> drop 1- drop-locals ] if ;
19
20 \ load-locals [
21     pop-literal nip
22     [ dup reverse <effect> infer-shuffle ]
23     [ infer->r ]
24     bi
25 ] "infer" set-word-prop
26
27 \ get-local [
28     pop-literal nip
29     [ infer-r> ]
30     [ dup 0 prefix <effect> infer-shuffle ]
31     [ infer->r ]
32     tri
33 ] "infer" set-word-prop
34
35 \ drop-locals [
36     pop-literal nip
37     [ infer-r> ]
38     [ { } <effect> infer-shuffle ] bi
39 ] "infer" set-word-prop
40
41 <<
42 { load-locals get-local drop-locals }
43 [ t "no-compile" set-word-prop ] each
44 >>