-
Kris Katterjohn authored
PROGV was allowed to bind constants in the C-compiler and the bytecode compiler and interpreter, but the behavior would differ between them: > (defun foo () (flet ((memq (item list) (member item list :test #'eq))) (progv (list :test) (list :test-not) (memq 'bar '(bar baz quux))))) FOO > (foo) (BAZ QUUX) > (compile 'foo) FOO > (foo) (BAR BAZ QUUX) CLHS says the behavior is undefined when attempting to bind or assign constant variables (CLHS 3.1.2.1.1.3 and the entry for defconstant). The C-compiler and bytecode compiler and interpreter give errors when attempting to bind or assign constant variables in lambda expressions, LET, SETQ and various other binding/assignment forms. So the behavior above in PROGV is inconsistent. Now give an error when attempting to bind a constant variable in PROGV in the C-compiler and the bytecode compiler and interpreter.
4e328370