Clean up some duplication in interpolate
parent
4d080b8785
commit
7360cd5b30
|
@ -1,9 +1,11 @@
|
||||||
! Copyright (C) 2008 Slava Pestov.
|
! Copyright (C) 2008, 2009 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: io kernel macros make multiline namespaces parser
|
USING: io kernel macros make multiline namespaces parser
|
||||||
present sequences strings splitting fry accessors ;
|
present sequences strings splitting fry accessors ;
|
||||||
IN: interpolate
|
IN: interpolate
|
||||||
|
|
||||||
|
<PRIVATE
|
||||||
|
|
||||||
TUPLE: interpolate-var name ;
|
TUPLE: interpolate-var name ;
|
||||||
|
|
||||||
: (parse-interpolate) ( string -- )
|
: (parse-interpolate) ( string -- )
|
||||||
|
@ -20,21 +22,22 @@ TUPLE: interpolate-var name ;
|
||||||
: parse-interpolate ( string -- seq )
|
: parse-interpolate ( string -- seq )
|
||||||
[ (parse-interpolate) ] { } make ;
|
[ (parse-interpolate) ] { } make ;
|
||||||
|
|
||||||
MACRO: interpolate ( string -- )
|
: (interpolate) ( string quot -- quot' )
|
||||||
parse-interpolate [
|
[ parse-interpolate ] dip '[
|
||||||
dup interpolate-var?
|
dup interpolate-var?
|
||||||
[ name>> '[ _ get present write ] ]
|
[ name>> @ '[ _ @ present write ] ]
|
||||||
[ '[ _ write ] ]
|
[ '[ _ write ] ]
|
||||||
if
|
if
|
||||||
] map [ ] join ;
|
] map [ ] join ; inline
|
||||||
|
|
||||||
: interpolate-locals ( string -- quot )
|
: interpolate-locals ( string -- quot )
|
||||||
parse-interpolate [
|
[ search [ ] ] (interpolate) ;
|
||||||
dup interpolate-var?
|
|
||||||
[ name>> search '[ _ present write ] ]
|
|
||||||
[ '[ _ write ] ]
|
|
||||||
if
|
|
||||||
] map [ ] join ;
|
|
||||||
|
|
||||||
: I[ "]I" parse-multiline-string
|
PRIVATE>
|
||||||
interpolate-locals parsed \ call parsed ; parsing
|
|
||||||
|
MACRO: interpolate ( string -- )
|
||||||
|
[ [ get ] ] (interpolate) ;
|
||||||
|
|
||||||
|
: I[
|
||||||
|
"]I" parse-multiline-string
|
||||||
|
interpolate-locals over push-all ; parsing
|
||||||
|
|
Loading…
Reference in New Issue