summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r--lisp/emacs-lisp/backquote.el54
-rw-r--r--lisp/emacs-lisp/byte-opt.el2
-rw-r--r--lisp/emacs-lisp/checkdoc.el3
-rw-r--r--lisp/emacs-lisp/easymenu.el2
-rw-r--r--lisp/emacs-lisp/rx.el2
-rw-r--r--lisp/emacs-lisp/unsafep.el2
6 files changed, 45 insertions, 20 deletions
diff --git a/lisp/emacs-lisp/backquote.el b/lisp/emacs-lisp/backquote.el
index 54fcfc3df8a..6daaf001433 100644
--- a/lisp/emacs-lisp/backquote.el
+++ b/lisp/emacs-lisp/backquote.el
@@ -118,10 +118,28 @@ Vectors work just like lists. Nested backquotes are permitted."
;; constant, 1 => to be unquoted, 2 => to be spliced in.
;; The top-level backquote macro just discards the tag.
-(defun backquote-process (s)
+(defun backquote-delay-process (s level)
+ "Process a (un|back|splice)quote inside a backquote.
+This simply recurses through the body."
+ (let ((exp (backquote-listify (list (backquote-process (nth 1 s) level)
+ (cons 0 (list 'quote (car s))))
+ '(0))))
+ (if (eq (car-safe exp) 'quote)
+ (cons 0 (list 'quote s))
+ (cons 1 exp))))
+
+(defun backquote-process (s &optional level)
+ "Process the body of a backquote.
+S is the body. Returns a cons cell whose cdr is piece of code which
+is the macro-expansion of S, and whose car is a small integer whose value
+can either indicate that the code is constant (0), or not (1), or returns
+a list which should be spliced into its environment (2).
+LEVEL is only used internally and indicates the nesting level:
+0 (the default) is for the toplevel nested inside a single backquote."
+ (unless level (setq level 0))
(cond
((vectorp s)
- (let ((n (backquote-process (append s ()))))
+ (let ((n (backquote-process (append s ()) level)))
(if (= (car n) 0)
(cons 0 s)
(cons 1 (cond
@@ -138,11 +156,15 @@ Vectors work just like lists. Nested backquotes are permitted."
s
(list 'quote s))))
((eq (car s) backquote-unquote-symbol)
- (cons 1 (nth 1 s)))
+ (if (<= level 0)
+ (cons 1 (nth 1 s))
+ (backquote-delay-process s (1- level))))
((eq (car s) backquote-splice-symbol)
- (cons 2 (nth 1 s)))
+ (if (<= level 0)
+ (cons 2 (nth 1 s))
+ (backquote-delay-process s (1- level))))
((eq (car s) backquote-backquote-symbol)
- (backquote-process (cdr (backquote-process (nth 1 s)))))
+ (backquote-delay-process s (1+ level)))
(t
(let ((rest s)
item firstlist list lists expression)
@@ -154,11 +176,13 @@ Vectors work just like lists. Nested backquotes are permitted."
;; at the beginning, put them in FIRSTLIST,
;; as a list of tagged values (TAG . FORM).
;; If there are any at the end, they go in LIST, likewise.
- (while (consp rest)
- ;; Turn . (, foo) into (,@ foo).
- (if (eq (car rest) backquote-unquote-symbol)
- (setq rest (list (list backquote-splice-symbol (nth 1 rest)))))
- (setq item (backquote-process (car rest)))
+ (while (and (consp rest)
+ ;; Stop if the cdr is an expression inside a backquote or
+ ;; unquote since this needs to go recursively through
+ ;; backquote-process.
+ (not (or (eq (car rest) backquote-unquote-symbol)
+ (eq (car rest) backquote-backquote-symbol))))
+ (setq item (backquote-process (car rest) level))
(cond
((= (car item) 2)
;; Put the nonspliced items before the first spliced item
@@ -168,8 +192,8 @@ Vectors work just like lists. Nested backquotes are permitted."
list nil))
;; Otherwise, put any preceding nonspliced items into LISTS.
(if list
- (setq lists (cons (backquote-listify list '(0 . nil)) lists)))
- (setq lists (cons (cdr item) lists))
+ (push (backquote-listify list '(0 . nil)) lists))
+ (push (cdr item) lists)
(setq list nil))
(t
(setq list (cons item list))))
@@ -177,8 +201,8 @@ Vectors work just like lists. Nested backquotes are permitted."
;; Handle nonsplicing final elements, and the tail of the list
;; (which remains in REST).
(if (or rest list)
- (setq lists (cons (backquote-listify list (backquote-process rest))
- lists)))
+ (push (backquote-listify list (backquote-process rest level))
+ lists))
;; Turn LISTS into a form that produces the combined list.
(setq expression
(if (or (cdr lists)
@@ -221,5 +245,5 @@ Vectors work just like lists. Nested backquotes are permitted."
tail))
(t (cons 'list heads)))))
-;;; arch-tag: 1a26206a-6b5e-4c56-8e24-2eef0f7e0e7a
+;; arch-tag: 1a26206a-6b5e-4c56-8e24-2eef0f7e0e7a
;;; backquote.el ends here
diff --git a/lisp/emacs-lisp/byte-opt.el b/lisp/emacs-lisp/byte-opt.el
index 811dc699bd0..82a5cf0a75a 100644
--- a/lisp/emacs-lisp/byte-opt.el
+++ b/lisp/emacs-lisp/byte-opt.el
@@ -564,7 +564,7 @@
(cons fn args)))))))
(defun byte-optimize-all-constp (list)
- "Non-nil iff all elements of LIST satisfy `byte-compile-constp'."
+ "Non-nil if all elements of LIST satisfy `byte-compile-constp'."
(let ((constant t))
(while (and list constant)
(unless (byte-compile-constp (car list))
diff --git a/lisp/emacs-lisp/checkdoc.el b/lisp/emacs-lisp/checkdoc.el
index 862a7efe046..e1835d75fcb 100644
--- a/lisp/emacs-lisp/checkdoc.el
+++ b/lisp/emacs-lisp/checkdoc.el
@@ -1243,7 +1243,8 @@ generating a buffered list of errors."
;;;###autoload
(define-minor-mode checkdoc-minor-mode
"Toggle Checkdoc minor mode, a mode for checking Lisp doc strings.
-With prefix ARG, turn Checkdoc minor mode on iff ARG is positive.
+With prefix ARG, turn Checkdoc minor mode on if ARG is positive, otherwise
+turn it off.
In Checkdoc minor mode, the usual bindings for `eval-defun' which is
bound to \\<checkdoc-minor-mode-map>\\[checkdoc-eval-defun] and `checkdoc-eval-current-buffer' are overridden to include
diff --git a/lisp/emacs-lisp/easymenu.el b/lisp/emacs-lisp/easymenu.el
index 5a7dc53e917..b802d8acd43 100644
--- a/lisp/emacs-lisp/easymenu.el
+++ b/lisp/emacs-lisp/easymenu.el
@@ -546,7 +546,7 @@ earlier by `easy-menu-define' or `easy-menu-create-menu'."
(easy-menu-define-key map (easy-menu-intern (car item)) (cdr item) before)))
(defun easy-menu-item-present-p (map path name)
- "In submenu of MAP with path PATH, return non-nil iff item NAME is present.
+ "In submenu of MAP with path PATH, return non-nil if item NAME is present.
MAP and PATH are defined as in `easy-menu-add-item'.
NAME should be a string, the name of the element to be looked for."
(easy-menu-return-item (easy-menu-get-map map path) name))
diff --git a/lisp/emacs-lisp/rx.el b/lisp/emacs-lisp/rx.el
index 957c5b23541..ae150078785 100644
--- a/lisp/emacs-lisp/rx.el
+++ b/lisp/emacs-lisp/rx.el
@@ -554,7 +554,7 @@ appended to R will apply to all of R. For example, \"a\"
This function may return false negatives, but it will not
return false positives. It is nevertheless useful in
-situations where an efficiency shortcut can be taken iff a
+situations where an efficiency shortcut can be taken only if a
regexp is atomic. The function can be improved to detect
more cases of atomic regexps. Presently, this function
detects the following categories of atomic regexp;
diff --git a/lisp/emacs-lisp/unsafep.el b/lisp/emacs-lisp/unsafep.el
index bf52acef382..d7dd1f19300 100644
--- a/lisp/emacs-lisp/unsafep.el
+++ b/lisp/emacs-lisp/unsafep.el
@@ -212,7 +212,7 @@ of symbols with local bindings."
(defun unsafep-function (fun)
- "Return nil iff FUN is a safe function.
+ "Return nil if FUN is a safe function.
\(either a safe lambda or a symbol that names a safe function). Otherwise
result is a reason code."
(cond