Simplify 'with-restriction' and 'without-restriction'

* lisp/subr.el (with-restriction, without-restriction): Merge the
bodies of the 'internal--with-restriction' and
'internal--without-restriction' function into the macros.  The
result is more efficient than a funcall.
(internal--with-restriction, internal--without-restriction):
Remove.
Suggested by Mattias Engdegård.
This commit is contained in:
Gregory Heytings 2023-08-16 15:58:39 +00:00
parent 9e9e11648d
commit c287a0fdc7

View file

@ -4116,17 +4116,10 @@ buffer, use `without-restriction' with the same LABEL argument.
\(fn START END [:label LABEL] BODY)"
(declare (indent 2) (debug t))
(if (eq (car rest) :label)
`(internal--with-restriction ,start ,end (lambda () ,@(cddr rest))
,(cadr rest))
`(internal--with-restriction ,start ,end (lambda () ,@rest))))
(defun internal--with-restriction (start end body &optional label)
"Helper function for `with-restriction', which see."
(save-restriction
(if label
(internal--labeled-narrow-to-region start end label)
(narrow-to-region start end))
(funcall body)))
`(save-restriction
(internal--labeled-narrow-to-region ,start ,end ,(cadr rest))
,@(cddr rest))
`(save-restriction (narrow-to-region ,start ,end) ,@rest)))
(defmacro without-restriction (&rest rest)
"Execute BODY without restrictions.
@ -4139,17 +4132,8 @@ by `with-restriction' with the same LABEL argument are lifted.
\(fn [:label LABEL] BODY)"
(declare (indent 0) (debug t))
(if (eq (car rest) :label)
`(internal--without-restriction (lambda () ,@(cddr rest))
,(cadr rest))
`(internal--without-restriction (lambda () ,@rest))))
(defun internal--without-restriction (body &optional label)
"Helper function for `without-restriction', which see."
(save-restriction
(if label
(internal--labeled-widen label)
(widen))
(funcall body)))
`(save-restriction (internal--labeled-widen ,(cadr rest)) ,@(cddr rest))
`(save-restriction (widen) ,@rest)))
(defun find-tag-default-bounds ()
"Determine the boundaries of the default tag, based on text at point.