Don't throw if macro expansion fails; this allows macros-in-locals to work in more cases
parent
34b8bcf305
commit
883ad5389c
|
@ -37,9 +37,17 @@ M: wrapper expand-macros* wrapped>> literal ;
|
||||||
[ '[ _ ndrop _ nnip call ] [ ] like ] 2map , \ dispatch ,
|
[ '[ _ ndrop _ nnip call ] [ ] like ] 2map , \ dispatch ,
|
||||||
] bi ;
|
] bi ;
|
||||||
|
|
||||||
: expand-macro ( quot -- )
|
: word, ( word -- ) end , ;
|
||||||
stack [ swap with-datastack >vector ] change
|
|
||||||
stack get pop >quotation end (expand-macros) ;
|
: expand-macro ( word quot -- )
|
||||||
|
'[
|
||||||
|
drop
|
||||||
|
stack [ _ with-datastack >vector ] change
|
||||||
|
stack get pop >quotation end (expand-macros)
|
||||||
|
] [
|
||||||
|
drop
|
||||||
|
word,
|
||||||
|
] recover ;
|
||||||
|
|
||||||
: expand-macro? ( word -- quot ? )
|
: expand-macro? ( word -- quot ? )
|
||||||
dup [ "transform-quot" word-prop ] [ "macro" word-prop ] bi or dup [
|
dup [ "transform-quot" word-prop ] [ "macro" word-prop ] bi or dup [
|
||||||
|
@ -47,11 +55,9 @@ M: wrapper expand-macros* wrapped>> literal ;
|
||||||
stack get length <=
|
stack get length <=
|
||||||
] [ 2drop f f ] if ;
|
] [ 2drop f f ] if ;
|
||||||
|
|
||||||
: word, ( word -- ) end , ;
|
|
||||||
|
|
||||||
M: word expand-macros*
|
M: word expand-macros*
|
||||||
dup expand-dispatch? [ drop expand-dispatch ] [
|
dup expand-dispatch? [ drop expand-dispatch ] [
|
||||||
dup expand-macro? [ nip expand-macro ] [
|
dup expand-macro? [ expand-macro ] [
|
||||||
drop word,
|
drop word,
|
||||||
] if
|
] if
|
||||||
] if ;
|
] if ;
|
||||||
|
|
Loading…
Reference in New Issue