diff options
| -rw-r--r-- | sb-eval2.lisp | 12 | 
1 files changed, 11 insertions, 1 deletions
| diff --git a/sb-eval2.lisp b/sb-eval2.lisp index 0e1e197..853ba02 100644 --- a/sb-eval2.lisp +++ b/sb-eval2.lisp @@ -1024,7 +1024,17 @@              (destructuring-bind (bindings &rest exprs) (rest form)                (with-parsed-body (body specials) exprs                  (let ((bindings (mapcar (lambda (form) -                                          (cons (first form) (second form))) +                                          (destructuring-bind (var macro-form) form +                                            (when (or (globally-special-p var) +                                                      (member var specials)) +                                              (error 'sb-int:simple-program-error +                                                     :format-control "Attempt to bind a special variable with SYMBOL-MACROLET: ~S" +                                                     :format-arguments (list var))) +                                            (when (constantp var) +                                              (error 'sb-int:simple-program-error +                                                     :format-control "Attempt to bind a special variable with SYMBOL-MACROLET: ~S" +                                                     :format-arguments (list var))) +                                            (cons var macro-form)))                                          bindings)))                    (prepare-progn body                                   (context-add-specials | 
