First, in CST-to-AST, the function for building a macroexpander from a macrolet binding wraps the body in a progn. This means that any declarations will be treated as function calls. For example, in clasp (per report: https://github.com/clasp-developers/clasp/issues/781) compiling (macrolet ((m (foo) (declare (special *foo*)) foo)) (m 42)) triggers warnings about undefined functions declare and special.
Second, the underlying cst:parse-macro itself is unable to deal with declarations. While this example is a free declaration, there could be bound declarations as well. That's not in the SICL project strictly speaking, though.
macrolet bindings can certainly have local declarations, as per the CLHS page, so this is nonconforming behavior.
First, in CST-to-AST, the function for building a macroexpander from a
macrolet
binding wraps the body in aprogn
. This means that any declarations will be treated as function calls. For example, in clasp (per report: https://github.com/clasp-developers/clasp/issues/781) compiling(macrolet ((m (foo) (declare (special *foo*)) foo)) (m 42))
triggers warnings about undefined functionsdeclare
andspecial
.Second, the underlying
cst:parse-macro
itself is unable to deal with declarations. While this example is a free declaration, there could be bound declarations as well. That's not in the SICL project strictly speaking, though.macrolet
bindings can certainly have local declarations, as per the CLHS page, so this is nonconforming behavior.