diff --git a/impls/factor/lib/types/types.factor b/impls/factor/lib/types/types.factor index d0180423..da00d8ba 100644 --- a/impls/factor/lib/types/types.factor +++ b/impls/factor/lib/types/types.factor @@ -15,9 +15,12 @@ TUPLE: malfn { env malenv read-only } { binds sequence read-only } { exprs read-only } - { macro? boolean } + { macro? boolean read-only } { meta assoc } ; +: malmacro ( fn -- fn ) + [ env>> ] [ binds>> ] [ exprs>> ] tri t f malfn boa ; + : ( env binds exprs -- fn ) f f malfn boa ; diff --git a/impls/factor/step8_macros/step8_macros.factor b/impls/factor/step8_macros/step8_macros.factor index ef4bd070..f6c7db7c 100755 --- a/impls/factor/step8_macros/step8_macros.factor +++ b/impls/factor/step8_macros/step8_macros.factor @@ -21,7 +21,7 @@ M: object eval-ast drop ; value env EVAL [ key env env-set ] keep ; :: eval-defmacro! ( key value env -- maltype ) - value env EVAL t >>macro? [ key env env-set ] keep ; + value env EVAL malmacro [ key env env-set ] keep ; : eval-let* ( bindings body env -- maltype env ) [ swap 2 group ] [ new-env ] bi* [ diff --git a/impls/factor/step9_try/step9_try.factor b/impls/factor/step9_try/step9_try.factor index 490d1e37..cf0119e8 100755 --- a/impls/factor/step9_try/step9_try.factor +++ b/impls/factor/step9_try/step9_try.factor @@ -21,7 +21,7 @@ M: object eval-ast drop ; value env EVAL [ key env env-set ] keep ; :: eval-defmacro! ( key value env -- maltype ) - value env EVAL t >>macro? [ key env env-set ] keep ; + value env EVAL malmacro [ key env env-set ] keep ; : eval-let* ( bindings body env -- maltype env ) [ swap 2 group ] [ new-env ] bi* [ diff --git a/impls/factor/stepA_mal/stepA_mal.factor b/impls/factor/stepA_mal/stepA_mal.factor index 438111f5..0a2bb846 100755 --- a/impls/factor/stepA_mal/stepA_mal.factor +++ b/impls/factor/stepA_mal/stepA_mal.factor @@ -21,7 +21,7 @@ M: object eval-ast drop ; value env EVAL [ key env env-set ] keep ; :: eval-defmacro! ( key value env -- maltype ) - value env EVAL t >>macro? [ key env env-set ] keep ; + value env EVAL malmacro [ key env env-set ] keep ; : eval-let* ( bindings body env -- maltype env ) [ swap 2 group ] [ new-env ] bi* [