]> gitweb.factorcode.org Git - factor.git/blob - core/locals/types/types.factor
9f401bbf9c6d1c6aa4dfcce1e2be4b2e168852f8
[factor.git] / core / locals / types / types.factor
1 ! Copyright (C) 2007, 2010 Slava Pestov, Eduardo Cavazos.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors combinators kernel sequences words
4 quotations ;
5 IN: locals.types
6
7 TUPLE: lambda vars body ;
8
9 C: <lambda> lambda
10
11 TUPLE: let body ;
12
13 C: <let> let
14
15 TUPLE: quote local ;
16
17 C: <quote> quote
18
19 : unquote ( quote -- local ) dup quote? [ local>> ] when ; inline
20
21 TUPLE: def local ;
22
23 C: <def> def
24
25 TUPLE: multi-def locals ;
26
27 C: <multi-def> multi-def
28
29 PREDICATE: local < word "local?" word-prop ;
30
31 : <local> ( name -- word )
32     f <word>
33     dup t "local?" set-word-prop ;
34
35 M: local literalize ;
36
37 PREDICATE: local-reader < word "local-reader?" word-prop ;
38
39 : <local-reader> ( name -- word )
40     f <word>
41     dup t "local-reader?" set-word-prop ;
42
43 M: local-reader literalize ;
44
45 PREDICATE: local-writer < word "local-writer?" word-prop ;
46
47 : <local-writer> ( reader -- word )
48     dup name>> "!" append f <word> {
49         [ nip t "local-writer?" set-word-prop ]
50         [ swap "local-reader" set-word-prop ]
51         [ "local-writer" set-word-prop ]
52         [ nip ]
53     } 2cleave ;
54
55 UNION: lexical local local-reader local-writer ;
56 UNION: special lexical quote def ;