]> gitweb.factorcode.org Git - factor.git/blob - extra/namespaces/lib/lib.factor
da9fde9d791033060a973da5b21aafbff60f28d5
[factor.git] / extra / namespaces / lib / lib.factor
1 USING: kernel namespaces namespaces.private quotations sequences
2        assocs.lib math.parser math generalizations locals mirrors
3        macros ;
4
5 IN: namespaces.lib
6
7 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
8
9 : save-namestack ( quot -- ) namestack >r call r> set-namestack ;
10
11 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
12
13 : make* ( seq -- seq ) [ dup quotation? [ call ] [ ] if ] map ;
14
15 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
16
17 : set* ( val var -- ) namestack* set-assoc-stack ;
18
19 SYMBOL: building-seq 
20 : get-building-seq ( n -- seq )
21     building-seq get nth ;
22
23 : n, ( obj n -- ) get-building-seq push ;
24 : n% ( seq n -- ) get-building-seq push-all ;
25 : n# ( num n -- ) >r number>string r> n% ;
26
27 : 0, ( obj -- ) 0 n, ;
28 : 0% ( seq -- ) 0 n% ;
29 : 0# ( num -- ) 0 n# ;
30 : 1, ( obj -- ) 1 n, ;
31 : 1% ( seq -- ) 1 n% ;
32 : 1# ( num -- ) 1 n# ;
33 : 2, ( obj -- ) 2 n, ;
34 : 2% ( seq -- ) 2 n% ;
35 : 2# ( num -- ) 2 n# ;
36 : 3, ( obj -- ) 3 n, ;
37 : 3% ( seq -- ) 3 n% ;
38 : 3# ( num -- ) 3 n# ;
39 : 4, ( obj -- ) 4 n, ;
40 : 4% ( seq -- ) 4 n% ;
41 : 4# ( num -- ) 4 n# ;
42
43 MACRO: finish-nmake ( exemplars -- )
44     length [ firstn ] curry ;
45
46 :: nmake ( quot exemplars -- )
47     [
48         exemplars
49         [ 0 swap new-resizable ] map
50         building-seq set
51
52         quot call
53
54         building-seq get
55         exemplars [ [ like ] 2map ] [ finish-nmake ] bi
56     ] with-scope ; inline
57
58 : make-object ( quot class -- object )
59     new [ <mirror> swap bind ] keep ; inline
60
61 : with-object ( object quot -- )
62     [ <mirror> ] dip bind ; inline