M: local-writer-in-literal-error summary
drop "Local writer words not permitted inside literals" ;
-ERROR: local-word-in-literal-error ;
-
-M: local-word-in-literal-error summary
- drop "Local words not permitted inside literals" ;
-
ERROR: :>-outside-lambda-error ;
M: :>-outside-lambda-error summary
: parse-local-defs ( -- words assoc )
[ "|" [ make-local ] map-tokens ] H{ } make-assoc ;
-: make-local-word ( name def -- word )
- [ <local-word> [ dup name>> set ] [ ] [ ] tri ] dip
- "local-word-def" set-word-prop ;
-
SINGLETON: lambda-parser
SYMBOL: locals
M: quote localize dupd local>> read-local-quot ;
-M: local-word localize dupd read-local-quot [ call ] append ;
-
M: local-reader localize dupd read-local-quot [ local-value ] append ;
M: local-writer localize
M: local-writer rewrite-element
local-writer-in-literal-error ;
-M: local-word rewrite-element
- local-word-in-literal-error ;
-
M: word rewrite-element <wrapper> , ;
: rewrite-wrapper ( wrapper -- )
-! Copyright (C) 2007, 2009 Slava Pestov, Eduardo Cavazos.
+! Copyright (C) 2007, 2010 Slava Pestov, Eduardo Cavazos.
! See http://factorcode.org/license.txt for BSD license.
USING: accessors combinators kernel sequences words
quotations ;
M: local literalize ;
-PREDICATE: local-word < word "local-word?" word-prop ;
-
-: <local-word> ( name -- word )
- f <word> dup t "local-word?" set-word-prop ;
-
PREDICATE: local-reader < word "local-reader?" word-prop ;
: <local-reader> ( name -- word )
[ nip ]
} 2cleave ;
-UNION: lexical local local-reader local-writer local-word ;
+UNION: lexical local local-reader local-writer ;
UNION: special lexical quote def ;
: infer-local-writer ( word -- )
(( value -- )) apply-word/effect ;
-: infer-local-word ( word -- )
- "local-word-def" word-prop infer-quot-here ;
-
: non-inline-word ( word -- )
dup depends-on-effect
{
{ [ dup local? ] [ infer-local-reader ] }
{ [ dup local-reader? ] [ infer-local-reader ] }
{ [ dup local-writer? ] [ infer-local-writer ] }
- { [ dup local-word? ] [ infer-local-word ] }
{ [ dup "no-compile" word-prop ] [ do-not-compile ] }
[ dup required-stack-effect apply-word/effect ]
} cond ;