Skip to content

Multiple values returned from PROG1 when body is empty

Moved from https://gitlab.common-lisp.net/ecl/ecl/-/issues/2

(prog1 (values 1 2 3)) is supposed to return only the primary value.

Possible fix at https://gitlab.com/embeddable-common-lisp/ecl/-/blob/develop/src/lsp/evalmacros.lsp#L233-239:

(defmacro prog1 (first &rest body &aux (sym (gensym)))
  "Syntax: (prog1 first-form {form}*)
Evaluates FIRST-FORM and FORMs in order.  Returns the value of FIRST-FORM."
  (if (null body) `(values ,first)
  `(LET ((,sym ,first))
;    (DECLARE (:READ-ONLY ,sym)) ; Beppe
    ,@body ,sym)))

ECL data:

     VERSION "20.4.24"
      VCS-ID "UNKNOWN"
          OS "Linux"
  OS-VERSION "5.9.0-2-amd64"
MACHINE-TYPE "x86_64"
    FEATURES (:WALKER :CDR-1 :CDR-5 :LINUX :FORMATTER :CDR-7 :ECL-WEAK-HASH
              :LITTLE-ENDIAN :LONG-LONG :UINT64-T :UINT32-T :UINT16-T
              :COMPLEX-FLOAT :LONG-FLOAT :UNICODE :DFFI :CLOS-STREAMS
              :CMU-FORMAT :UNIX :ECL-PDE :DLOPEN :CLOS :THREADS :BOEHM-GC
              :ANSI-CL :COMMON-LISP :FLOATING-POINT-EXCEPTIONS
              :IEEE-FLOATING-POINT :PACKAGE-LOCAL-NICKNAMES :CDR-14
              :PREFIXED-API :FFI :X86_64 :COMMON :ECL)