Plaster

text
Results: clasp is not tested because it doesn't provide an implementation of macroexpand-all (AFAIK) Allegro, LW, CormanCL and MKCL support passing lexical environment, but TRIVIAL-MACROEXPAND-ALL doesn't support it. no-env -- implementation doesn't support passing lexical environment | impl | version | all macro types | declarations bug | doesn't expand LAMBDA | |---------+-------------+-----------------+------------------+-----------------------| | sbcl | 2.4.5 | + | - | YES | | cmucl | 21E Unicode | NO | - | YES | | ccl | 1.12 | + | - | YES | | allegro | 11.0 | + | - | YES | | ecl | 23.9.9 | NO | YES (runtime) | YES | | abcl | 1.9.1 | + | - | YES | | clisp | 2.49.93+ | ±, no-env | YES (logic) | - | | LW | 8.0.1 | + | - | - | | corman | 3.1 (wine) | + | YES (logic) | - | | mkcl | 1.1.11.188 | NO | YES (warning) | YES | M -- macro SM -- symbol macro global -- macro defined in the global environment local-form -- macro defined in the form being macroexpanded local-env -- macro defined in the lexical environment being passed | impl | global M | local-form M | local-env M | global SM | local-form SM | local-env SM | |---------+----------+--------------+-------------+-----------+---------------+--------------| | sbcl | + | + | + | + | + | + | | cmucl | + | + | + | NO | + | NO | | ccl | + | + | + | + | + | + | | allegro | + | + | + | + | + | + | | ecl | + | NO | + | NO | + | NO | | abcl | + | + | + | + | + | + | | clisp | + | + | no-env | + | + | no-env | | LW | + | + | + | + | + | + | | corman | + | + | + | + | + | + | | mkcl | + | NO | + | NO | + | NO | M -- MACROLET SM -- SYMBOL-MACROLET | impl | behaviour | |---------+-------------------------------------------------------------------| | sbcl | Keeps M / SM | | cmucl | Keeps M / SM | | ccl | Converts M / SM to PROGN; or to LOCALLY if there are declarations | | allegro | Keeps M / SM; if EXCL::*KEEP-MACROLET* is NIL converts to LOCALLY | | ecl | Keeps M / SM; errors on declarations in SM | | abcl | Converts M / SM to LOCALLY | | clisp | Converts M to PROGN, unless body is 0--1 form; Keeps SM | | LW | Keeps M / SM; merges declarations, removes them if empty | | corman | Converts M to LET (); converts SM to PROGN () | | mkcl | Keeps M / SM |

Annotations