]> gitweb.factorcode.org Git - factor.git/blob - core/locals/types/types.factor
Switch to https urls
[factor.git] / core / locals / types / types.factor
1 ! Copyright (C) 2007, 2010 Slava Pestov, Eduardo Cavazos.
2 ! See https://factorcode.org/license.txt for BSD license.
3 USING: accessors arrays combinators kernel sequences
4 quotations words ;
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: multi-def locals ;
22
23 C: <multi-def> multi-def
24
25 : <def> ( local -- def ) 1array <multi-def> ;
26
27 PREDICATE: local < word "local?" word-prop ;
28
29 : <local> ( name -- word )
30     f <word>
31     dup t "local?" set-word-prop ;
32
33 M: local literalize ;
34
35 PREDICATE: local-reader < word "local-reader?" word-prop ;
36
37 : <local-reader> ( name -- word )
38     f <word>
39     dup t "local-reader?" set-word-prop ;
40
41 M: local-reader literalize ;
42
43 PREDICATE: local-writer < word "local-writer?" word-prop ;
44
45 : <local-writer> ( reader -- word )
46     dup name>> "!" append f <word> {
47         [ nip t "local-writer?" set-word-prop ]
48         [ swap "local-reader" set-word-prop ]
49         [ "local-writer" set-word-prop ]
50         [ nip ]
51     } 2cleave ;
52
53 UNION: lexical local local-reader local-writer ;
54 UNION: special lexical quote ;