From: Tobias C. R. <tc...@fr...> - 2009-02-28 21:38:53
|
Hi The following exhibits some environment/scope issue: (defmacro symbol-macro-value (name &environment env) (macroexpand (second name) env)) (defmacro symbol-macro-expand (name &environment env) `',(macroexpand (second name) env)) (let ((.x. 'special)) (declare (special .x.)) (symbol-macrolet ((.x. 42)) (locally (declare (SPECIAL .x.) (TYPE fixnum .x.)) (list (symbol-value '.x.) (symbol-macro-value '.x.) (symbol-macro-expand '.x.) ) ))) ==> (SPECIAL 42 (THE FIXNUM 42)) Now if I transpose the SPECIAL and the TYPE declaration, i.e. (let ((.x. 'special)) (declare (special .x.)) (symbol-macrolet ((.x. 42)) (locally (declare (TYPE fixnum .x.) (SPECIAL .x.)) (list (symbol-value '.x.) (symbol-macro-value '.x.) (symbol-macro-expand '.x.) ) ))) I get ==> (SPECIAL SPECIAL .X.) as return value. (This also shows Bug #309122: https://bugs.launchpad.net/sbcl/+bug/309122) I'll submit this as a bug if none points out some thinko on my part. -T. |