1
1
mirror of https://github.com/kanaka/mal.git synced 2024-07-15 01:20:29 +03:00

factor: prevent defmacro from mutating functions

This commit is contained in:
Nicolas Boulenguez 2021-09-05 19:04:24 +02:00 committed by Joel Martin
parent 7c5d341849
commit e3c376ebd5
4 changed files with 7 additions and 4 deletions

View File

@ -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 ;
: <malfn> ( env binds exprs -- fn )
f f malfn boa ;

View File

@ -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* [

View File

@ -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* [

View File

@ -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* [