[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 49c56f33352 7/7: Add function declarations
From: |
Mattias Engdegård |
Subject: |
master 49c56f33352 7/7: Add function declarations |
Date: |
Tue, 30 May 2023 11:46:53 -0400 (EDT) |
branch: master
commit 49c56f333524b2caa34151e44c14ca0dee8d8942
Author: Mattias Engdegård <mattiase@acm.org>
Commit: Mattias Engdegård <mattiase@acm.org>
Add function declarations
* lisp/emacs-lisp/byte-opt.el (side-effect-free-fns):
Add get-byte, string-width, unibyte-string, special-variable-p, frexp,
buffer-hash, buffer-line-statistics, load-average, md5, secure-hash,
string-collate-equalp, string-collate-lessp, string-to-unibyte,
string-version-lessp, current-cpu-time.
(side-effect-and-error-free-fns): Add equal-including-properties.
(pure-fns): Add equal-including-properties, string-version-lessp.
* lisp/emacs-lisp/bytecomp.el (important-return-value-fns):
Add match-data.
* lisp/subr.el (buffer-local-boundp, subr-primitive-p, gensym)
(frame-configuration-p, apply-partially, make-composed-keymap)
(keymap-canonicalize, listify-key-sequence, event-modifiers)
(event-basic-type, mouse-event-p, event-start, event-end)
(event-click-count, event-line-count, posnp, posn-window, posn-area)
(posn-point, posn-x-y, posn-col-row, posn-actual-col-row)
(posn-timestamp, posn-string, posn-image, posn-object)
(posn-object-x-y, posn-object-width-height, provided-mode-derived-p)
(derived-mode-p, autoloadp, locate-eln-file, symbol-file)
(process-lines-handling-status, process-lines)
(process-lines-ignore-status, process-get)
(copy-overlay, shell-quote-argument, field-at-pos):
Add appropriate function declarations.
---
lisp/emacs-lisp/byte-opt.el | 29 ++++++++++++++++++++---------
lisp/emacs-lisp/bytecomp.el | 2 ++
lisp/subr.el | 40 ++++++++++++++++++++++++++++++++++++++++
3 files changed, 62 insertions(+), 9 deletions(-)
diff --git a/lisp/emacs-lisp/byte-opt.el b/lisp/emacs-lisp/byte-opt.el
index 8fe5066c49e..562f21aa751 100644
--- a/lisp/emacs-lisp/byte-opt.el
+++ b/lisp/emacs-lisp/byte-opt.el
@@ -1685,7 +1685,8 @@ See Info node `(elisp) Integer Basics'."
category-docstring category-set-mnemonics char-category-set
copy-category-table get-unused-category make-category-set
;; character.c
- char-width multibyte-char-to-unibyte string unibyte-char-to-multibyte
+ char-width get-byte multibyte-char-to-unibyte string string-width
+ unibyte-char-to-multibyte unibyte-string
;; charset.c
decode-char encode-char
;; chartab.c
@@ -1715,6 +1716,8 @@ See Info node `(elisp) Integer Basics'."
line-beginning-position line-end-position ngettext pos-bol pos-eol
propertize region-beginning region-end string-to-char
user-full-name user-login-name
+ ;; eval.c
+ special-variable-p
;; fileio.c
car-less-than-car directory-name-p file-directory-p file-exists-p
file-name-absolute-p file-name-concat file-newer-than-file-p
@@ -1723,23 +1726,28 @@ See Info node `(elisp) Integer Basics'."
file-locked-p
;; floatfns.c
abs acos asin atan ceiling copysign cos exp expt fceiling ffloor
- float floor fround ftruncate isnan ldexp log logb round sin sqrt tan
+ float floor frexp fround ftruncate isnan ldexp log logb round
+ sin sqrt tan
truncate
;; fns.c
append assq
base64-decode-string base64-encode-string base64url-encode-string
+ buffer-hash buffer-line-statistics
compare-strings concat copy-alist copy-hash-table copy-sequence elt
featurep get
gethash hash-table-count hash-table-rehash-size
hash-table-rehash-threshold hash-table-size hash-table-test
hash-table-weakness
length length< length= length>
- line-number-at-pos locale-info make-hash-table
+ line-number-at-pos load-average locale-info make-hash-table md5
member memq memql nth nthcdr
- object-intervals rassoc rassq reverse
- string-as-multibyte string-as-unibyte string-bytes string-distance
+ object-intervals rassoc rassq reverse secure-hash
+ string-as-multibyte string-as-unibyte string-bytes
+ string-collate-equalp string-collate-lessp string-distance
string-equal string-lessp string-make-multibyte string-make-unibyte
- string-search string-to-multibyte substring substring-no-properties
+ string-search string-to-multibyte string-to-unibyte
+ string-version-lessp
+ substring substring-no-properties
sxhash-eq sxhash-eql sxhash-equal sxhash-equal-including-properties
take vconcat
;; frame.c
@@ -1799,6 +1807,7 @@ See Info node `(elisp) Integer Basics'."
all-threads condition-mutex condition-name mutex-name thread-live-p
thread-name
;; timefns.c
+ current-cpu-time
current-time-string current-time-zone decode-time encode-time
float-time format-time-string time-add time-convert time-equal-p
time-less-p time-subtract
@@ -1858,7 +1867,8 @@ See Info node `(elisp) Integer Basics'."
;; fileio.c
default-file-modes
;; fns.c
- eql equal hash-table-p identity proper-list-p safe-length
+ eql equal equal-including-properties
+ hash-table-p identity proper-list-p safe-length
secure-hash-algorithms
;; frame.c
frame-list frame-live-p framep last-nonminibuffer-frame
@@ -1936,10 +1946,11 @@ See Info node `(elisp) Integer Basics'."
isnan ldexp logb round sqrt truncate
;; fns.c
assq base64-decode-string base64-encode-string base64url-encode-string
- concat elt eql equal hash-table-p identity length length< length=
+ concat elt eql equal equal-including-properties
+ hash-table-p identity length length< length=
length> member memq memql nth nthcdr proper-list-p rassoc rassq
safe-length string-bytes string-distance string-equal string-lessp
- string-search take
+ string-search string-version-lessp take
;; search.c
regexp-quote
;; syntax.c
diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el
index aea50fc8e57..b7ae45a0610 100644
--- a/lisp/emacs-lisp/bytecomp.el
+++ b/lisp/emacs-lisp/bytecomp.el
@@ -3566,6 +3566,8 @@ lambda-expression."
;; when used on arrays, but most calls pass lists.
nreverse sort
+ match-data
+
;; Adding these functions causes many warnings;
;; evaluate how many of them are false first.
delq delete
diff --git a/lisp/subr.el b/lisp/subr.el
index 95d3bc03544..cef631a69c3 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -205,6 +205,7 @@ buffer-local wherever it is set."
(defun buffer-local-boundp (symbol buffer)
"Return non-nil if SYMBOL is bound in BUFFER.
Also see `local-variable-p'."
+ (declare (side-effect-free t))
(condition-case nil
(buffer-local-value symbol buffer)
(:success t)
@@ -298,6 +299,7 @@ value of last one, or nil if there are none."
(defsubst subr-primitive-p (object)
"Return t if OBJECT is a built-in primitive function."
+ (declare (side-effect-free error-free))
(and (subrp object)
(not (subr-native-elisp-p object))))
@@ -415,6 +417,7 @@ The CONDITION argument is not evaluated. Do not quote it."
"Return a new uninterned symbol.
The name is made by appending `gensym-counter' to PREFIX.
PREFIX is a string, and defaults to \"g\"."
+ (declare (important-return-value t))
(let ((num (prog1 gensym-counter
(setq gensym-counter (1+ gensym-counter)))))
(make-symbol (format "%s%d" (or prefix "g") num))))
@@ -497,6 +500,7 @@ Defaults to `error'."
"Return non-nil if OBJECT seems to be a frame configuration.
Any list whose car is `frame-configuration' is assumed to be a frame
configuration."
+ (declare (pure t) (side-effect-free error-free))
(and (consp object)
(eq (car object) 'frame-configuration)))
@@ -506,6 +510,7 @@ ARGS is a list of the first N arguments to pass to FUN.
The result is a new function which does the same as FUN, except that
the first N arguments are fixed at the values with which this function
was called."
+ (declare (side-effect-free error-free))
(lambda (&rest args2)
(apply fun (append args args2))))
@@ -1076,6 +1081,7 @@ any corresponding binding in PARENT, but it does not
override corresponding
bindings in other keymaps of MAPS.
MAPS can be a list of keymaps or a single keymap.
PARENT if non-nil should be a keymap."
+ (declare (side-effect-free t))
`(keymap
,@(if (keymapp maps) (list maps) maps)
,@parent))
@@ -1216,6 +1222,7 @@ This resolves inheritance and redefinitions. The
returned keymap
should behave identically to a copy of KEYMAP w.r.t `lookup-key'
and use in active keymaps and menus.
Subkeymaps may be modified but are not canonicalized."
+ (declare (important-return-value t))
;; FIXME: Problem with the difference between a nil binding
;; that hides a binding in an inherited map and a nil binding that's ignored
;; to let some further binding visible. Currently a nil binding hides all.
@@ -1538,6 +1545,7 @@ See also `current-global-map'.")
(defun listify-key-sequence (key)
"Convert a key sequence to a list of events."
+ (declare (side-effect-free t))
(if (vectorp key)
(append key nil)
(mapcar (lambda (c)
@@ -1565,6 +1573,7 @@ EVENT may be an event or an event type. If EVENT is a
symbol
that has never been used in an event that has been read as input
in the current Emacs session, then this function may fail to include
the `click' modifier."
+ (declare (side-effect-free t))
(unless (stringp event)
(let ((type event))
(if (listp type)
@@ -1598,6 +1607,7 @@ The value is a printing character (not upper case) or a
symbol.
EVENT may be an event or an event type. If EVENT is a symbol
that has never been used in an event that has been read as input
in the current Emacs session, then this function may return nil."
+ (declare (side-effect-free t))
(unless (stringp event)
(if (consp event)
(setq event (car event)))
@@ -1618,6 +1628,7 @@ in the current Emacs session, then this function may
return nil."
(defun mouse-event-p (object)
"Return non-nil if OBJECT is a mouse click event."
+ (declare (side-effect-free t))
;; is this really correct? maybe remove mouse-movement?
(memq (event-basic-type object) '(mouse-1 mouse-2 mouse-3 mouse-movement)))
@@ -1663,6 +1674,7 @@ nil or (STRING . POSITION)'.
`posn-timestamp': The time the event occurred, in milliseconds.
For more information, see Info node `(elisp)Click Events'."
+ (declare (side-effect-free t))
(or (and (consp event) (nth 1 event))
(event--posn-at-point)))
@@ -1671,17 +1683,20 @@ For more information, see Info node `(elisp)Click
Events'."
EVENT should be a click, drag, or key press event.
See `event-start' for a description of the value returned."
+ (declare (side-effect-free t))
(or (and (consp event) (nth (if (consp (nth 2 event)) 2 1) event))
(event--posn-at-point)))
(defsubst event-click-count (event)
"Return the multi-click count of EVENT, a click or drag event.
The return value is a positive integer."
+ (declare (side-effect-free t))
(if (and (consp event) (integerp (nth 2 event))) (nth 2 event) 1))
(defsubst event-line-count (event)
"Return the line count of EVENT, a mousewheel event.
The return value is a positive integer."
+ (declare (side-effect-free t))
(if (and (consp event) (integerp (nth 3 event))) (nth 3 event) 1))
;;;; Extracting fields of the positions in an event.
@@ -1691,6 +1706,7 @@ The return value is a positive integer."
A `posn' object is returned from functions such as `event-start'.
If OBJ is a valid `posn' object, but specifies a frame rather
than a window, return nil."
+ (declare (side-effect-free error-free))
;; FIXME: Correct the behavior of this function so that all valid
;; `posn' objects are recognized, after updating other code that
;; depends on its present behavior.
@@ -1704,12 +1720,14 @@ than a window, return nil."
If POSITION is outside the frame where the event was initiated,
return that frame instead. POSITION should be a list of the form
returned by the `event-start' and `event-end' functions."
+ (declare (side-effect-free t))
(nth 0 position))
(defsubst posn-area (position)
"Return the window area recorded in POSITION, or nil for the text area.
POSITION should be a list of the form returned by the `event-start'
and `event-end' functions."
+ (declare (side-effect-free t))
(let ((area (if (consp (nth 1 position))
(car (nth 1 position))
(nth 1 position))))
@@ -1721,6 +1739,7 @@ POSITION should be a list of the form returned by the
`event-start'
and `event-end' functions.
Returns nil if POSITION does not correspond to any buffer location (e.g.
a click on a scroll bar)."
+ (declare (side-effect-free t))
(or (nth 5 position)
(let ((pt (nth 1 position)))
(or (car-safe pt)
@@ -1746,6 +1765,7 @@ Select the corresponding window as well."
The return value has the form (X . Y), where X and Y are given in
pixels. POSITION should be a list of the form returned by
`event-start' and `event-end'."
+ (declare (side-effect-free t))
(nth 2 position))
(declare-function scroll-bar-scale "scroll-bar" (num-denom whole))
@@ -1765,6 +1785,7 @@ corresponds to the vertical position of the click in the
scroll bar.
POSITION should be a list of the form returned by the `event-start'
and `event-end' functions."
+ (declare (side-effect-free t))
(let* ((pair (posn-x-y position))
(frame-or-window (posn-window position))
(frame (if (framep frame-or-window)
@@ -1810,12 +1831,14 @@ This function does not account for the width on
display, like the
number of visual columns taken by a TAB or image. If you need
the coordinates of POSITION in character units, you should use
`posn-col-row', not this function."
+ (declare (side-effect-free t))
(nth 6 position))
(defsubst posn-timestamp (position)
"Return the timestamp of POSITION.
POSITION should be a list of the form returned by the `event-start'
and `event-end' functions."
+ (declare (side-effect-free t))
(nth 3 position))
(defun posn-string (position)
@@ -1823,6 +1846,7 @@ and `event-end' functions."
Value is a cons (STRING . STRING-POS), or nil if not a string.
POSITION should be a list of the form returned by the `event-start'
and `event-end' functions."
+ (declare (side-effect-free t))
(let ((x (nth 4 position)))
;; Apparently this can also be `handle' or `below-handle' (bug#13979).
(when (consp x) x)))
@@ -1832,6 +1856,7 @@ and `event-end' functions."
Value is a list (image ...), or nil if not an image.
POSITION should be a list of the form returned by the `event-start'
and `event-end' functions."
+ (declare (side-effect-free t))
(nth 7 position))
(defsubst posn-object (position)
@@ -1840,6 +1865,7 @@ Value is a list (image ...) for an image object, a cons
cell
\(STRING . STRING-POS) for a string object, and nil for a buffer position.
POSITION should be a list of the form returned by the `event-start'
and `event-end' functions."
+ (declare (side-effect-free t))
(or (posn-image position) (posn-string position)))
(defsubst posn-object-x-y (position)
@@ -1848,12 +1874,14 @@ The return value has the form (DX . DY), where DX and
DY are
given in pixels, and they are relative to the top-left corner of
the clicked glyph of object at POSITION. POSITION should be a
list of the form returned by `event-start' and `event-end'."
+ (declare (side-effect-free t))
(nth 8 position))
(defsubst posn-object-width-height (position)
"Return the pixel width and height of the object of POSITION.
The return value has the form (WIDTH . HEIGHT). POSITION should
be a list of the form returned by `event-start' and `event-end'."
+ (declare (side-effect-free t))
(nth 9 position))
(defun values--store-value (value)
@@ -2614,6 +2642,7 @@ The variable list SPEC is the same as in `if-let*'."
Uses the `derived-mode-parent' property of the symbol to trace backwards.
If you just want to check `major-mode', use `derived-mode-p'."
;; If MODE is an alias, then look up the real mode function first.
+ (declare (side-effect-free t))
(when-let ((alias (symbol-function mode)))
(when (symbolp alias)
(setq mode alias)))
@@ -2628,6 +2657,7 @@ If you just want to check `major-mode', use
`derived-mode-p'."
(defun derived-mode-p (&rest modes)
"Non-nil if the current major mode is derived from one of MODES.
Uses the `derived-mode-parent' property of the symbol to trace backwards."
+ (declare (side-effect-free t))
(apply #'provided-mode-derived-p major-mode modes))
(defvar-local major-mode--suspended nil)
@@ -2751,6 +2781,7 @@ If TOGGLE has a `:menu-tag', that is used for the menu
item's label."
(defsubst autoloadp (object)
"Non-nil if OBJECT is an autoload."
+ (declare (side-effect-free error-free))
(eq 'autoload (car-safe object)))
;; (defun autoload-type (object)
@@ -2795,6 +2826,7 @@ This is to `put' what `defalias' is to `fset'."
(defun locate-eln-file (eln-file)
"Locate a natively-compiled ELN-FILE by searching its load path.
This function looks in directories named by `native-comp-eln-load-path'."
+ (declare (important-return-value t))
(or (locate-file-internal (concat comp-native-version-dir "/" eln-file)
native-comp-eln-load-path)
(locate-file-internal
@@ -2826,6 +2858,7 @@ instead.
This function only works for symbols defined in Lisp files. For
symbols that are defined in C files, use `help-C-file-name'
instead."
+ (declare (important-return-value t))
(if (and (or (null type) (eq type 'defun))
(symbolp symbol)
(autoloadp (symbol-function symbol)))
@@ -2952,6 +2985,7 @@ argument, which will be called with the exit status of the
program before the output is collected. If STATUS-HANDLER is
nil, an error is signaled if the program returns with a non-zero
exit status."
+ (declare (important-return-value t))
(with-temp-buffer
(let ((status (apply #'call-process program nil (current-buffer) nil
args)))
(if status-handler
@@ -2972,12 +3006,14 @@ exit status."
"Execute PROGRAM with ARGS, returning its output as a list of lines.
Signal an error if the program returns with a non-zero exit status.
Also see `process-lines-ignore-status'."
+ (declare (important-return-value t))
(apply #'process-lines-handling-status program nil args))
(defun process-lines-ignore-status (program &rest args)
"Execute PROGRAM with ARGS, returning its output as a list of lines.
The exit status of the program is ignored.
Also see `process-lines'."
+ (declare (important-return-value t))
(apply #'process-lines-handling-status program #'ignore args))
(defun process-live-p (process)
@@ -3006,6 +3042,7 @@ process."
(defun process-get (process propname)
"Return the value of PROCESS' PROPNAME property.
This is the last value stored with `(process-put PROCESS PROPNAME VALUE)'."
+ (declare (side-effect-free t))
(plist-get (process-plist process) propname))
(defun process-put (process propname value)
@@ -3924,6 +3961,7 @@ If MESSAGE is nil, instructions to type EXIT-CHAR are
displayed there."
(defun copy-overlay (o)
"Return a copy of overlay O."
+ (declare (important-return-value t))
(let ((o1 (if (overlay-buffer o)
(make-overlay (overlay-start o) (overlay-end o)
;; FIXME: there's no easy way to find the
@@ -4133,6 +4171,7 @@ See Info node `(elisp)Security Considerations'.
If the optional POSIX argument is non-nil, ARGUMENT is quoted
according to POSIX shell quoting rules, regardless of the
system's shell."
+ (declare (important-return-value t))
(cond
((and (not posix) (eq system-type 'ms-dos))
;; Quote using double quotes, but escape any existing quotes in
@@ -4250,6 +4289,7 @@ or byte-code."
(defun field-at-pos (pos)
"Return the field at position POS, taking stickiness etc into account."
+ (declare (important-return-value t))
(let ((raw-field (get-char-property (field-beginning pos) 'field)))
(if (eq raw-field 'boundary)
(get-char-property (1- (field-end pos)) 'field)
- master updated (f8a79c0055f -> 49c56f33352), Mattias Engdegård, 2023/05/30
- master 9ae212fb1e5 4/7: xml.el: remove incorrect and botched attribute whitespace collapse, Mattias Engdegård, 2023/05/30
- master 49c56f33352 7/7: Add function declarations,
Mattias Engdegård <=
- master ace9f677558 2/7: Avoid using rx `any` for `not-newline`, Mattias Engdegård, 2023/05/30
- master 27d68d790f7 6/7: ; * admin/cus-test.el (cus-test-apropos): remove TODO (already done), Mattias Engdegård, 2023/05/30
- master 845f97d475b 5/7: ; * admin/admin.el (cusver-scan): remove broken warning, Mattias Engdegård, 2023/05/30
- master 08291e6f175 1/7: Clean up defcustom type quote check, Mattias Engdegård, 2023/05/30
- master 6e255ddfffa 3/7: * test/lisp/dnd-tests.el (dnd-tests-begin-text-drag): Fix typo., Mattias Engdegård, 2023/05/30