Skip to content
  • Kris Katterjohn's avatar
    No longer allow PROGV to bind constants · 4e328370
    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