]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/subr.el (prog2): Define as a macro
authorStefan Monnier <monnier@iro.umontreal.ca>
Tue, 2 Apr 2019 13:51:20 +0000 (09:51 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Tue, 2 Apr 2019 14:04:44 +0000 (10:04 -0400)
* src/eval.c (Fprog2): Delete function.
(syms_of_eval): Don't register it.

* lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker):
* lisp/emacs-lisp/generator.el (cps--transform-1): Remove `prog2` case.

* lisp/emacs-lisp/bytecomp.el (prog2): Remove handlers.
(byte-compile-prog2): Delete.

* lisp/emacs-lisp/lisp-mode.el (prog2): Remove property.

lisp/emacs-lisp/byte-opt.el
lisp/emacs-lisp/bytecomp.el
lisp/emacs-lisp/cconv.el
lisp/emacs-lisp/generator.el
lisp/emacs-lisp/lisp-mode.el
lisp/subr.el
src/eval.c

index 4418c9a1bfcf392045e0bbcf60653e91108e98da..33d49647638dece50dd62db26df10729810ce96d 100644 (file)
                     (cons (byte-optimize-form (nth 1 form) for-effect)
                           (byte-optimize-body (cdr (cdr form)) t)))
             (byte-optimize-form (nth 1 form) for-effect)))
-         ((eq fn 'prog2)
-          (cons 'prog2
-            (cons (byte-optimize-form (nth 1 form) t)
-              (cons (byte-optimize-form (nth 2 form) for-effect)
-                    (byte-optimize-body (cdr (cdr (cdr form))) t)))))
 
          ((memq fn '(save-excursion save-restriction save-current-buffer))
           ;; those subrs which have an implicit progn; it's not quite good
index 9dd5151963b0a44b253d29f3aaf5f9ec208a799e..8bbe6292d9d007bd08d032c7d86885d531223d97 100644 (file)
@@ -2501,9 +2501,8 @@ list that represents a doc string reference.
 
 (put 'progn 'byte-hunk-handler 'byte-compile-file-form-progn)
 (put 'prog1 'byte-hunk-handler 'byte-compile-file-form-progn)
-(put 'prog2 'byte-hunk-handler 'byte-compile-file-form-progn)
 (defun byte-compile-file-form-progn (form)
-  (mapc 'byte-compile-file-form (cdr form))
+  (mapc #'byte-compile-file-form (cdr form))
   ;; Return nil so the forms are not output twice.
   nil)
 
@@ -3971,7 +3970,6 @@ discarding."
 (byte-defop-compiler-1 inline byte-compile-progn)
 (byte-defop-compiler-1 progn)
 (byte-defop-compiler-1 prog1)
-(byte-defop-compiler-1 prog2)
 (byte-defop-compiler-1 if)
 (byte-defop-compiler-1 cond)
 (byte-defop-compiler-1 and)
@@ -3988,11 +3986,6 @@ discarding."
   (byte-compile-form-do-effect (car (cdr form)))
   (byte-compile-body (cdr (cdr form)) t))
 
-(defun byte-compile-prog2 (form)
-  (byte-compile-form (nth 1 form) t)
-  (byte-compile-form-do-effect (nth 2 form))
-  (byte-compile-body (cdr (cdr (cdr form))) t))
-
 (defmacro byte-compile-goto-if (cond discard tag)
   `(byte-compile-goto
     (if ,cond
index e658270cd5c2d7b2a8e1c343e754bd04849115d8..58ca9d5f57e880eadacad2ad36b7235925b9198a 100644 (file)
@@ -556,7 +556,7 @@ places where they originally did not directly appear."
 
     (`(,func . ,forms)
      ;; First element is function or whatever function-like forms are: or, and,
-     ;; if, catch, progn, prog1, prog2, while, until
+     ;; if, catch, progn, prog1, while, until
      `(,func . ,(mapcar (lambda (form)
                           (cconv-convert form env extend))
                         forms)))
index 3fd66bfa8077dc0cfdd07411c1e359843f75e8d9..caf5fed154b24d475de56176aa89dd1a26694b17 100644 (file)
@@ -374,13 +374,6 @@ don't yield.")
                       `(setf ,cps--value-symbol ,temp-var-symbol
                              ,cps--state-symbol ,next-state))))))))
 
-    ;; Process `prog2'.
-
-    (`(prog2 ,form1 ,form2 . ,body)
-      (cps--transform-1
-       `(progn ,form1 (prog1 ,form2 ,@body))
-       next-state))
-
     ;; Process `unwind-protect': If we're inside an unwind-protect, we
     ;; have a block of code UNWINDFORMS which we would like to run
     ;; whenever control flows away from the main piece of code,
index 30a43d8827ed649ac904374fab8446777fcbdcb6..4c7a8bea3fbd3e09b7aa66d4d02eb7e669fc96ff 100644 (file)
@@ -1183,7 +1183,6 @@ Lisp function does not specify a special indentation."
 (put 'autoload 'lisp-indent-function 'defun) ;Elisp
 (put 'progn 'lisp-indent-function 0)
 (put 'prog1 'lisp-indent-function 1)
-(put 'prog2 'lisp-indent-function 2)
 (put 'save-excursion 'lisp-indent-function 0)      ;Elisp
 (put 'save-restriction 'lisp-indent-function 0)    ;Elisp
 (put 'save-current-buffer 'lisp-indent-function 0) ;Elisp
index 6a9492a3a7a4ddaef45ee2064facbc4ea9f899ab..8d51474b0c905ea29d5eef4ebff6f8c85e306299 100644 (file)
@@ -118,6 +118,13 @@ BODY should be a list of Lisp expressions.
   ;; depend on backquote.el.
   (list 'function (cons 'lambda cdr)))
 
+(defmacro prog2 (form1 form2 &rest body)
+  "Eval FORM1, FORM2 and BODY sequentially; return value from FORM2.
+The value of FORM2 is saved during the evaluation of the
+remaining args, whose values are discarded."
+  (declare (indent 2) (debug t))
+  `(progn ,form1 (prog1 ,form2 ,@body)))
+
 (defmacro setq-default (&rest args)
   "Set the default value of variable VAR to VALUE.
 VAR, the variable name, is literal (not evaluated);
index 49d6460e6e4e1df46c465fcc26d2e96f0e6c3741..e9f118c5cb9af2c23dcc15fa0a2b535a6d75b12b 100644 (file)
@@ -495,17 +495,6 @@ usage: (prog1 FIRST BODY...)  */)
   return val;
 }
 
-DEFUN ("prog2", Fprog2, Sprog2, 2, UNEVALLED, 0,
-       doc: /* Eval FORM1, FORM2 and BODY sequentially; return value from FORM2.
-The value of FORM2 is saved during the evaluation of the
-remaining args, whose values are discarded.
-usage: (prog2 FORM1 FORM2 BODY...)  */)
-  (Lisp_Object args)
-{
-  eval_sub (XCAR (args));
-  return Fprog1 (XCDR (args));
-}
-
 DEFUN ("setq", Fsetq, Ssetq, 0, UNEVALLED, 0,
        doc: /* Set each SYM to the value of its VAL.
 The symbols SYM are variables; they are literal (not evaluated).
@@ -4219,7 +4208,6 @@ alist of active lexical bindings.  */);
   defsubr (&Scond);
   defsubr (&Sprogn);
   defsubr (&Sprog1);
-  defsubr (&Sprog2);
   defsubr (&Ssetq);
   defsubr (&Squote);
   defsubr (&Sfunction);