1 ! Copyright (C) 2007, 2010 Slava Pestov, Eduardo Cavazos.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors arrays combinators kernel sequences
7 TUPLE: lambda vars body ;
19 : unquote ( quote -- local ) dup quote? [ local>> ] when ; inline
21 TUPLE: multi-def locals ;
23 C: <multi-def> multi-def
25 : <def> ( local -- def ) 1array <multi-def> ;
27 PREDICATE: local < word "local?" word-prop ;
29 : <local> ( name -- word )
31 dup t "local?" set-word-prop ;
35 PREDICATE: local-reader < word "local-reader?" word-prop ;
37 : <local-reader> ( name -- word )
39 dup t "local-reader?" set-word-prop ;
41 M: local-reader literalize ;
43 PREDICATE: local-writer < word "local-writer?" word-prop ;
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 ]
53 UNION: lexical local local-reader local-writer ;
54 UNION: special lexical quote ;