Mercurial > emacs
annotate lisp/emacs-lisp/bytecomp.el @ 98182:19ec1646fe6c
The Rmail/mbox merge has been abandoned in favor of a restart using
the current rmail.el file. A comprehensive list of changes will be
supplied when pmail.el is morphed back into rmail.el
The current status is that pmail.el supports basic Rmail navigation
(no summary support) and shows the current message in a special
buffer using buffer-swap-text. No decoding is done yet. That is the
next step.
author | Paul Reilly <pmr@pajato.com> |
---|---|
date | Mon, 15 Sep 2008 20:56:53 +0000 |
parents | c3512b2085a0 |
children | d0522fd272de |
rev | line source |
---|---|
38412
253f761ad37b
Some fixes to follow coding conventions in files maintained by FSF.
Pavel Janík <Pavel@Janik.cz>
parents:
37909
diff
changeset
|
1 ;;; bytecomp.el --- compilation of Lisp code into byte code |
757 | 2 |
58154 | 3 ;; Copyright (C) 1985, 1986, 1987, 1992, 1994, 1998, 2000, 2001, 2002, |
79704 | 4 ;; 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. |
846
20674ae6bf52
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
819
diff
changeset
|
5 |
819
5bbabfcef929
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
784
diff
changeset
|
6 ;; Author: Jamie Zawinski <jwz@lucid.com> |
5bbabfcef929
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
784
diff
changeset
|
7 ;; Hallvard Furuseth <hbf@ulrik.uio.no> |
20818
732ffd28a863
(byte-compile-from-buffer): Bind edebug-all-defs and edebug-all-forms to nil.
Richard M. Stallman <rms@gnu.org>
parents:
20779
diff
changeset
|
8 ;; Maintainer: FSF |
20779 | 9 ;; Keywords: lisp |
819
5bbabfcef929
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
784
diff
changeset
|
10 |
757 | 11 ;; This file is part of GNU Emacs. |
12 | |
94655
90a2847062be
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94392
diff
changeset
|
13 ;; GNU Emacs is free software: you can redistribute it and/or modify |
757 | 14 ;; it under the terms of the GNU General Public License as published by |
94655
90a2847062be
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94392
diff
changeset
|
15 ;; the Free Software Foundation, either version 3 of the License, or |
90a2847062be
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94392
diff
changeset
|
16 ;; (at your option) any later version. |
757 | 17 |
18 ;; GNU Emacs is distributed in the hope that it will be useful, | |
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
21 ;; GNU General Public License for more details. | |
22 | |
23 ;; You should have received a copy of the GNU General Public License | |
94655
90a2847062be
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94392
diff
changeset
|
24 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
757 | 25 |
2307
10e417efb12a
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2299
diff
changeset
|
26 ;;; Commentary: |
10e417efb12a
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2299
diff
changeset
|
27 |
10e417efb12a
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2299
diff
changeset
|
28 ;; The Emacs Lisp byte compiler. This crunches lisp source into a sort |
28295
8082575fec24
(byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
27824
diff
changeset
|
29 ;; of p-code (`lapcode') which takes up less space and can be interpreted |
8082575fec24
(byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
27824
diff
changeset
|
30 ;; faster. [`LAP' == `Lisp Assembly Program'.] |
2307
10e417efb12a
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2299
diff
changeset
|
31 ;; The user entry points are byte-compile-file and byte-recompile-directory. |
10e417efb12a
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2299
diff
changeset
|
32 |
819
5bbabfcef929
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
784
diff
changeset
|
33 ;;; Code: |
5bbabfcef929
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
784
diff
changeset
|
34 |
14169 | 35 ;; ======================================================================== |
36 ;; Entry points: | |
37 ;; byte-recompile-directory, byte-compile-file, | |
38 ;; batch-byte-compile, batch-byte-recompile-directory, | |
39 ;; byte-compile, compile-defun, | |
40 ;; display-call-tree | |
41 ;; (byte-compile-buffer and byte-compile-and-load-file were turned off | |
42 ;; because they are not terribly useful and get in the way of completion.) | |
757 | 43 |
14169 | 44 ;; This version of the byte compiler has the following improvements: |
45 ;; + optimization of compiled code: | |
46 ;; - removal of unreachable code; | |
47 ;; - removal of calls to side-effectless functions whose return-value | |
48 ;; is unused; | |
49 ;; - compile-time evaluation of safe constant forms, such as (consp nil) | |
50 ;; and (ash 1 6); | |
51 ;; - open-coding of literal lambdas; | |
52 ;; - peephole optimization of emitted code; | |
53 ;; - trivial functions are left uncompiled for speed. | |
54 ;; + support for inline functions; | |
55 ;; + compile-time evaluation of arbitrary expressions; | |
56 ;; + compile-time warning messages for: | |
57 ;; - functions being redefined with incompatible arglists; | |
58 ;; - functions being redefined as macros, or vice-versa; | |
59 ;; - functions or macros defined multiple times in the same file; | |
60 ;; - functions being called with the incorrect number of arguments; | |
28402 | 61 ;; - functions being called which are not defined globally, in the |
14169 | 62 ;; file, or as autoloads; |
63 ;; - assignment and reference of undeclared free variables; | |
64 ;; - various syntax errors; | |
65 ;; + correct compilation of nested defuns, defmacros, defvars and defsubsts; | |
66 ;; + correct compilation of top-level uses of macros; | |
67 ;; + the ability to generate a histogram of functions called. | |
757 | 68 |
14169 | 69 ;; User customization variables: |
70 ;; | |
71 ;; byte-compile-verbose Whether to report the function currently being | |
53573
3a95b6e83d47
(compile-defun): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents:
52568
diff
changeset
|
72 ;; compiled in the echo area; |
28402 | 73 ;; byte-optimize Whether to do optimizations; this may be |
14169 | 74 ;; t, nil, 'source, or 'byte; |
28402 | 75 ;; byte-optimize-log Whether to report (in excruciating detail) |
14169 | 76 ;; exactly which optimizations have been made. |
77 ;; This may be t, nil, 'source, or 'byte; | |
78 ;; byte-compile-error-on-warn Whether to stop compilation when a warning is | |
79 ;; produced; | |
80 ;; byte-compile-delete-errors Whether the optimizer may delete calls or | |
81 ;; variable references that are side-effect-free | |
82 ;; except that they may return an error. | |
83 ;; byte-compile-generate-call-tree Whether to generate a histogram of | |
28402 | 84 ;; function calls. This can be useful for |
14169 | 85 ;; finding unused functions, as well as simple |
86 ;; performance metering. | |
87 ;; byte-compile-warnings List of warnings to issue, or t. May contain | |
49821 | 88 ;; `free-vars' (references to variables not in the |
89 ;; current lexical scope) | |
90 ;; `unresolved' (calls to unknown functions) | |
91 ;; `callargs' (lambda calls with args that don't | |
92 ;; match the lambda's definition) | |
93 ;; `redefine' (function cell redefined from | |
94 ;; a macro to a lambda or vice versa, | |
95 ;; or redefined to take other args) | |
96 ;; `obsolete' (obsolete variables and functions) | |
97 ;; `noruntime' (calls to functions only defined | |
98 ;; within `eval-when-compile') | |
81295
26b46295877f
(byte-compile-find-cl-functions): Match
Martin Rudalics <rudalics@gmx.at>
parents:
81217
diff
changeset
|
99 ;; `cl-functions' (calls to CL functions) |
57881
f57a9010e865
(byte-compile-warning-types): Add interactive-only.
Richard M. Stallman <rms@gnu.org>
parents:
57518
diff
changeset
|
100 ;; `interactive-only' (calls to commands that are |
f57a9010e865
(byte-compile-warning-types): Add interactive-only.
Richard M. Stallman <rms@gnu.org>
parents:
57518
diff
changeset
|
101 ;; not good to call from Lisp) |
81217
908a902d5545
(byte-compile-warnings): Add new option `make-local'.
Glenn Morris <rgm@gnu.org>
parents:
77119
diff
changeset
|
102 ;; `make-local' (dubious calls to |
908a902d5545
(byte-compile-warnings): Add new option `make-local'.
Glenn Morris <rgm@gnu.org>
parents:
77119
diff
changeset
|
103 ;; `make-variable-buffer-local') |
84746 | 104 ;; `mapcar' (mapcar called for effect) |
14169 | 105 ;; byte-compile-compatibility Whether the compiler should |
106 ;; generate .elc files which can be loaded into | |
107 ;; generic emacs 18. | |
108 ;; emacs-lisp-file-regexp Regexp for the extension of source-files; | |
109 ;; see also the function byte-compile-dest-file. | |
757 | 110 |
14169 | 111 ;; New Features: |
112 ;; | |
113 ;; o The form `defsubst' is just like `defun', except that the function | |
114 ;; generated will be open-coded in compiled code which uses it. This | |
115 ;; means that no function call will be generated, it will simply be | |
116 ;; spliced in. Lisp functions calls are very slow, so this can be a | |
117 ;; big win. | |
118 ;; | |
119 ;; You can generally accomplish the same thing with `defmacro', but in | |
120 ;; that case, the defined procedure can't be used as an argument to | |
121 ;; mapcar, etc. | |
122 ;; | |
123 ;; o You can also open-code one particular call to a function without | |
124 ;; open-coding all calls. Use the 'inline' form to do this, like so: | |
125 ;; | |
126 ;; (inline (foo 1 2 3)) ;; `foo' will be open-coded | |
127 ;; or... | |
28402 | 128 ;; (inline ;; `foo' and `baz' will be |
14169 | 129 ;; (foo 1 2 3 (bar 5)) ;; open-coded, but `bar' will not. |
130 ;; (baz 0)) | |
131 ;; | |
132 ;; o It is possible to open-code a function in the same file it is defined | |
53575
a679a0134e06
*** empty log message ***
Luc Teirlinck <teirllm@auburn.edu>
parents:
53573
diff
changeset
|
133 ;; in without having to load that file before compiling it. The |
14169 | 134 ;; byte-compiler has been modified to remember function definitions in |
135 ;; the compilation environment in the same way that it remembers macro | |
136 ;; definitions. | |
137 ;; | |
138 ;; o Forms like ((lambda ...) ...) are open-coded. | |
139 ;; | |
140 ;; o The form `eval-when-compile' is like progn, except that the body | |
141 ;; is evaluated at compile-time. When it appears at top-level, this | |
142 ;; is analogous to the Common Lisp idiom (eval-when (compile) ...). | |
143 ;; When it does not appear at top-level, it is similar to the | |
144 ;; Common Lisp #. reader macro (but not in interpreted code). | |
145 ;; | |
146 ;; o The form `eval-and-compile' is similar to eval-when-compile, but | |
147 ;; the whole form is evalled both at compile-time and at run-time. | |
148 ;; | |
149 ;; o The command compile-defun is analogous to eval-defun. | |
150 ;; | |
28402 | 151 ;; o If you run byte-compile-file on a filename which is visited in a |
14169 | 152 ;; buffer, and that buffer is modified, you are asked whether you want |
153 ;; to save the buffer before compiling. | |
154 ;; | |
155 ;; o byte-compiled files now start with the string `;ELC'. | |
156 ;; Some versions of `file' can be customized to recognize that. | |
757 | 157 |
1604
25173c1db5a6
* bytecomp.el: Declare unread-command-char an obsolete variable.
Jim Blandy <jimb@redhat.com>
parents:
1532
diff
changeset
|
158 (require 'backquote) |
25173c1db5a6
* bytecomp.el: Declare unread-command-char an obsolete variable.
Jim Blandy <jimb@redhat.com>
parents:
1532
diff
changeset
|
159 |
757 | 160 (or (fboundp 'defsubst) |
161 ;; This really ought to be loaded already! | |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
162 (load "byte-run")) |
757 | 163 |
39561
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
164 ;; The feature of compiling in a specific target Emacs version |
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
165 ;; has been turned off because compile time options are a bad idea. |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
166 (defmacro byte-compile-single-version () nil) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
167 (defmacro byte-compile-version-cond (cond) cond) |
757 | 168 |
39561
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
169 ;; The crud you see scattered through this file of the form |
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
170 ;; (or (and (boundp 'epoch::version) epoch::version) |
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
171 ;; (string-lessp emacs-version "19")) |
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
172 ;; is because the Epoch folks couldn't be bothered to follow the |
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
173 ;; normal emacs version numbering convention. |
757 | 174 |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
175 ;; (if (byte-compile-version-cond |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
176 ;; (or (and (boundp 'epoch::version) epoch::version) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
177 ;; (string-lessp emacs-version "19"))) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
178 ;; (progn |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
179 ;; ;; emacs-18 compatibility. |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
180 ;; (defvar baud-rate (baud-rate)) ;Define baud-rate if it's undefined |
40035
2b16a80692ef
Put the *Compile-Log* buffer in `compilation-mode'.
Sam Steingold <sds@gnu.org>
parents:
39852
diff
changeset
|
181 ;; |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
182 ;; (if (byte-compile-single-version) |
1819
df06a60f3362
* disass.el (disassemble): Add autoload cookie for this.
Jim Blandy <jimb@redhat.com>
parents:
1604
diff
changeset
|
183 ;; (defmacro byte-code-function-p (x) "Emacs 18 doesn't have these." nil) |
df06a60f3362
* disass.el (disassemble): Add autoload cookie for this.
Jim Blandy <jimb@redhat.com>
parents:
1604
diff
changeset
|
184 ;; (defun byte-code-function-p (x) "Emacs 18 doesn't have these." nil)) |
40035
2b16a80692ef
Put the *Compile-Log* buffer in `compilation-mode'.
Sam Steingold <sds@gnu.org>
parents:
39852
diff
changeset
|
185 ;; |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
186 ;; (or (and (fboundp 'member) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
187 ;; ;; avoid using someone else's possibly bogus definition of this. |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
188 ;; (subrp (symbol-function 'member))) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
189 ;; (defun member (elt list) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
190 ;; "like memq, but uses equal instead of eq. In v19, this is a subr." |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
191 ;; (while (and list (not (equal elt (car list)))) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
192 ;; (setq list (cdr list))) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
193 ;; list)))) |
757 | 194 |
195 | |
20779 | 196 (defgroup bytecomp nil |
64028
26cc453cc38d
(bytecomp): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents:
63939
diff
changeset
|
197 "Emacs Lisp byte-compiler." |
20779 | 198 :group 'lisp) |
199 | |
97142 | 200 (defcustom emacs-lisp-file-regexp "\\.el$" |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
201 "*Regexp which matches Emacs Lisp source files. |
20779 | 202 You may want to redefine the function `byte-compile-dest-file' |
203 if you change this variable." | |
204 :group 'bytecomp | |
205 :type 'regexp) | |
757 | 206 |
12928
5c76c36717cb
(byte-compiler-base-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12823
diff
changeset
|
207 ;; This enables file name handlers such as jka-compr |
5c76c36717cb
(byte-compiler-base-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12823
diff
changeset
|
208 ;; to remove parts of the file name that should not be copied |
5c76c36717cb
(byte-compiler-base-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12823
diff
changeset
|
209 ;; through to the output file name. |
5c76c36717cb
(byte-compiler-base-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12823
diff
changeset
|
210 (defun byte-compiler-base-file-name (filename) |
5c76c36717cb
(byte-compiler-base-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12823
diff
changeset
|
211 (let ((handler (find-file-name-handler filename |
5c76c36717cb
(byte-compiler-base-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12823
diff
changeset
|
212 'byte-compiler-base-file-name))) |
5c76c36717cb
(byte-compiler-base-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12823
diff
changeset
|
213 (if handler |
5c76c36717cb
(byte-compiler-base-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12823
diff
changeset
|
214 (funcall handler 'byte-compiler-base-file-name filename) |
5c76c36717cb
(byte-compiler-base-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12823
diff
changeset
|
215 filename))) |
5c76c36717cb
(byte-compiler-base-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12823
diff
changeset
|
216 |
757 | 217 (or (fboundp 'byte-compile-dest-file) |
3653
974055b516d9
* bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents:
3591
diff
changeset
|
218 ;; The user may want to redefine this along with emacs-lisp-file-regexp, |
757 | 219 ;; so only define it if it is undefined. |
220 (defun byte-compile-dest-file (filename) | |
75836
6a3bdbdc77a5
(byte-compile-dest-file, byte-compile-file): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents:
75489
diff
changeset
|
221 "Convert an Emacs Lisp source file name to a compiled file name. |
6a3bdbdc77a5
(byte-compile-dest-file, byte-compile-file): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents:
75489
diff
changeset
|
222 If FILENAME matches `emacs-lisp-file-regexp' (by default, files |
6a3bdbdc77a5
(byte-compile-dest-file, byte-compile-file): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents:
75489
diff
changeset
|
223 with the extension `.el'), add `c' to it; otherwise add `.elc'." |
12928
5c76c36717cb
(byte-compiler-base-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12823
diff
changeset
|
224 (setq filename (byte-compiler-base-file-name filename)) |
757 | 225 (setq filename (file-name-sans-versions filename)) |
97142 | 226 (cond ((string-match emacs-lisp-file-regexp filename) |
23054 | 227 (concat (substring filename 0 (match-beginning 0)) ".elc")) |
228 (t (concat filename ".elc"))))) | |
757 | 229 |
230 ;; This can be the 'byte-compile property of any symbol. | |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
231 (autoload 'byte-compile-inline-expand "byte-opt") |
757 | 232 |
233 ;; This is the entrypoint to the lapcode optimizer pass1. | |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
234 (autoload 'byte-optimize-form "byte-opt") |
757 | 235 ;; This is the entrypoint to the lapcode optimizer pass2. |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
236 (autoload 'byte-optimize-lapcode "byte-opt") |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
237 (autoload 'byte-compile-unfold-lambda "byte-opt") |
757 | 238 |
1819
df06a60f3362
* disass.el (disassemble): Add autoload cookie for this.
Jim Blandy <jimb@redhat.com>
parents:
1604
diff
changeset
|
239 ;; This is the entry point to the decompiler, which is used by the |
df06a60f3362
* disass.el (disassemble): Add autoload cookie for this.
Jim Blandy <jimb@redhat.com>
parents:
1604
diff
changeset
|
240 ;; disassembler. The disassembler just requires 'byte-compile, but |
df06a60f3362
* disass.el (disassemble): Add autoload cookie for this.
Jim Blandy <jimb@redhat.com>
parents:
1604
diff
changeset
|
241 ;; that doesn't define this function, so this seems to be a reasonable |
df06a60f3362
* disass.el (disassemble): Add autoload cookie for this.
Jim Blandy <jimb@redhat.com>
parents:
1604
diff
changeset
|
242 ;; thing to do. |
df06a60f3362
* disass.el (disassemble): Add autoload cookie for this.
Jim Blandy <jimb@redhat.com>
parents:
1604
diff
changeset
|
243 (autoload 'byte-decompile-bytecode "byte-opt") |
df06a60f3362
* disass.el (disassemble): Add autoload cookie for this.
Jim Blandy <jimb@redhat.com>
parents:
1604
diff
changeset
|
244 |
20779 | 245 (defcustom byte-compile-verbose |
757 | 246 (and (not noninteractive) (> baud-rate search-slow-speed)) |
20779 | 247 "*Non-nil means print messages describing progress of byte-compiler." |
248 :group 'bytecomp | |
249 :type 'boolean) | |
757 | 250 |
20779 | 251 (defcustom byte-compile-compatibility nil |
53753
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
252 "*Non-nil means generate output that can run in Emacs 18. |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
253 This only means that it can run in principle, if it doesn't require |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
254 facilities that have been added more recently." |
20779 | 255 :group 'bytecomp |
256 :type 'boolean) | |
757 | 257 |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
258 ;; (defvar byte-compile-generate-emacs19-bytecodes |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
259 ;; (not (or (and (boundp 'epoch::version) epoch::version) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
260 ;; (string-lessp emacs-version "19"))) |
28402 | 261 ;; "*If this is true, then the byte-compiler will generate bytecode which |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
262 ;; makes use of byte-ops which are present only in Emacs 19. Code generated |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
263 ;; this way can never be run in Emacs 18, and may even cause it to crash.") |
757 | 264 |
20779 | 265 (defcustom byte-optimize t |
74334
5a84c691a685
(byte-optimize, byte-compile-warnings): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents:
74285
diff
changeset
|
266 "*Enable optimization in the byte compiler. |
5a84c691a685
(byte-optimize, byte-compile-warnings): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents:
74285
diff
changeset
|
267 Possible values are: |
5a84c691a685
(byte-optimize, byte-compile-warnings): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents:
74285
diff
changeset
|
268 nil - no optimization |
5a84c691a685
(byte-optimize, byte-compile-warnings): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents:
74285
diff
changeset
|
269 t - all optimizations |
5a84c691a685
(byte-optimize, byte-compile-warnings): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents:
74285
diff
changeset
|
270 `source' - source-level optimizations only |
5a84c691a685
(byte-optimize, byte-compile-warnings): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents:
74285
diff
changeset
|
271 `byte' - code-level optimizations only" |
20779 | 272 :group 'bytecomp |
273 :type '(choice (const :tag "none" nil) | |
274 (const :tag "all" t) | |
275 (const :tag "source-level" source) | |
276 (const :tag "byte-level" byte))) | |
757 | 277 |
47318
1a358c4f4b8b
(byte-compile-delete-errors): Default to nil.
Richard M. Stallman <rms@gnu.org>
parents:
47110
diff
changeset
|
278 (defcustom byte-compile-delete-errors nil |
1129 | 279 "*If non-nil, the optimizer may delete forms that may signal an error. |
20779 | 280 This includes variable references and calls to functions such as `car'." |
281 :group 'bytecomp | |
282 :type 'boolean) | |
757 | 283 |
10235
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
284 (defvar byte-compile-dynamic nil |
20779 | 285 "If non-nil, compile function bodies so they load lazily. |
23342
8cc9aa86ee9d
(byte-compile-dynamic): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23135
diff
changeset
|
286 They are hidden in comments in the compiled file, |
8cc9aa86ee9d
(byte-compile-dynamic): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23135
diff
changeset
|
287 and each one is brought into core when the |
10235
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
288 function is called. |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
289 |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
290 To enable this option, make it a file-local variable |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
291 in the source file you want it to apply to. |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
292 For example, add -*-byte-compile-dynamic: t;-*- on the first line. |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
293 |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
294 When this option is true, if you load the compiled file and then move it, |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
295 the functions you loaded will not be able to run.") |
70590
63b772bfba93
Move `safe-local-variable' declarations to the respective files.
Reiner Steib <Reiner.Steib@gmx.de>
parents:
69937
diff
changeset
|
296 ;;;###autoload(put 'byte-compile-dynamic 'safe-local-variable 'booleanp) |
10235
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
297 |
75489
76c18a7841bf
(byte-compile-disable-print-circle): New
Kenichi Handa <handa@m17n.org>
parents:
75402
diff
changeset
|
298 (defvar byte-compile-disable-print-circle nil |
76c18a7841bf
(byte-compile-disable-print-circle): New
Kenichi Handa <handa@m17n.org>
parents:
75402
diff
changeset
|
299 "If non-nil, disable `print-circle' on printing a byte-compiled code.") |
76c18a7841bf
(byte-compile-disable-print-circle): New
Kenichi Handa <handa@m17n.org>
parents:
75402
diff
changeset
|
300 ;;;###autoload(put 'byte-compile-disable-print-circle 'safe-local-variable 'booleanp) |
76c18a7841bf
(byte-compile-disable-print-circle): New
Kenichi Handa <handa@m17n.org>
parents:
75402
diff
changeset
|
301 |
20779 | 302 (defcustom byte-compile-dynamic-docstrings t |
10235
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
303 "*If non-nil, compile doc strings for lazy access. |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
304 We bury the doc strings of functions and variables |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
305 inside comments in the file, and bring them into core only when they |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
306 are actually needed. |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
307 |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
308 When this option is true, if you load the compiled file and then move it, |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
309 you won't be able to find the documentation of anything in that file. |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
310 |
11848
1a50b9d542ce
(byte-compile-dynamic-docstrings): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
11819
diff
changeset
|
311 To disable this option for a certain file, make it a file-local variable |
1a50b9d542ce
(byte-compile-dynamic-docstrings): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
11819
diff
changeset
|
312 in the source file. For example, add this to the first line: |
1a50b9d542ce
(byte-compile-dynamic-docstrings): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
11819
diff
changeset
|
313 -*-byte-compile-dynamic-docstrings:nil;-*- |
1a50b9d542ce
(byte-compile-dynamic-docstrings): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
11819
diff
changeset
|
314 You can also set the variable globally. |
1a50b9d542ce
(byte-compile-dynamic-docstrings): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
11819
diff
changeset
|
315 |
20779 | 316 This option is enabled by default because it reduces Emacs memory usage." |
317 :group 'bytecomp | |
318 :type 'boolean) | |
70590
63b772bfba93
Move `safe-local-variable' declarations to the respective files.
Reiner Steib <Reiner.Steib@gmx.de>
parents:
69937
diff
changeset
|
319 ;;;###autoload(put 'byte-compile-dynamic-docstrings 'safe-local-variable 'booleanp) |
10235
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
320 |
20779 | 321 (defcustom byte-optimize-log nil |
757 | 322 "*If true, the byte-compiler will log its optimizations into *Compile-Log*. |
323 If this is 'source, then only source-level optimizations will be logged. | |
20779 | 324 If it is 'byte, then only byte-level optimizations will be logged." |
325 :group 'bytecomp | |
326 :type '(choice (const :tag "none" nil) | |
327 (const :tag "all" t) | |
328 (const :tag "source-level" source) | |
329 (const :tag "byte-level" byte))) | |
757 | 330 |
20779 | 331 (defcustom byte-compile-error-on-warn nil |
332 "*If true, the byte-compiler reports warnings with `error'." | |
333 :group 'bytecomp | |
334 :type 'boolean) | |
757 | 335 |
10256
83d56dd99a40
(byte-compile-warning-types): Add obsolete.
Richard M. Stallman <rms@gnu.org>
parents:
10235
diff
changeset
|
336 (defconst byte-compile-warning-types |
57881
f57a9010e865
(byte-compile-warning-types): Add interactive-only.
Richard M. Stallman <rms@gnu.org>
parents:
57518
diff
changeset
|
337 '(redefine callargs free-vars unresolved |
84747
c793c2191087
(byte-compile-warning-types): Add mapcar and make-local.
Glenn Morris <rgm@gnu.org>
parents:
84746
diff
changeset
|
338 obsolete noruntime cl-functions interactive-only |
c793c2191087
(byte-compile-warning-types): Add mapcar and make-local.
Glenn Morris <rgm@gnu.org>
parents:
84746
diff
changeset
|
339 make-local mapcar) |
46136
79f132657570
(byte-compile-warning-types):
Richard M. Stallman <rms@gnu.org>
parents:
46050
diff
changeset
|
340 "The list of warning types used when `byte-compile-warnings' is t.") |
20779 | 341 (defcustom byte-compile-warnings t |
757 | 342 "*List of warnings that the byte-compiler should issue (t for all). |
46136
79f132657570
(byte-compile-warning-types):
Richard M. Stallman <rms@gnu.org>
parents:
46050
diff
changeset
|
343 |
74334
5a84c691a685
(byte-optimize, byte-compile-warnings): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents:
74285
diff
changeset
|
344 Elements of the list may be: |
958 | 345 |
346 free-vars references to variables not in the current lexical scope. | |
347 unresolved calls to unknown functions. | |
62319
150380a7c3d6
(byte-compile-nogroup-warn): New function.
Richard M. Stallman <rms@gnu.org>
parents:
61966
diff
changeset
|
348 callargs function calls with args that don't match the definition. |
150380a7c3d6
(byte-compile-nogroup-warn): New function.
Richard M. Stallman <rms@gnu.org>
parents:
61966
diff
changeset
|
349 redefine function name redefined from a macro to ordinary function or vice |
958 | 350 versa, or redefined to take a different number of arguments. |
46136
79f132657570
(byte-compile-warning-types):
Richard M. Stallman <rms@gnu.org>
parents:
46050
diff
changeset
|
351 obsolete obsolete variables and functions. |
79f132657570
(byte-compile-warning-types):
Richard M. Stallman <rms@gnu.org>
parents:
46050
diff
changeset
|
352 noruntime functions that may not be defined at runtime (typically |
79f132657570
(byte-compile-warning-types):
Richard M. Stallman <rms@gnu.org>
parents:
46050
diff
changeset
|
353 defined only under `eval-when-compile'). |
47912 | 354 cl-functions calls to runtime functions from the CL package (as |
57881
f57a9010e865
(byte-compile-warning-types): Add interactive-only.
Richard M. Stallman <rms@gnu.org>
parents:
57518
diff
changeset
|
355 distinguished from macros and aliases). |
f57a9010e865
(byte-compile-warning-types): Add interactive-only.
Richard M. Stallman <rms@gnu.org>
parents:
57518
diff
changeset
|
356 interactive-only |
81217
908a902d5545
(byte-compile-warnings): Add new option `make-local'.
Glenn Morris <rgm@gnu.org>
parents:
77119
diff
changeset
|
357 commands that normally shouldn't be called from Lisp code. |
84746 | 358 make-local calls to make-variable-buffer-local that may be incorrect. |
85730
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
359 mapcar mapcar called for effect. |
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
360 |
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
361 If the list begins with `not', then the remaining elements specify warnings to |
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
362 suppress. For example, (not mapcar) will suppress warnings about mapcar." |
20779 | 363 :group 'bytecomp |
46136
79f132657570
(byte-compile-warning-types):
Richard M. Stallman <rms@gnu.org>
parents:
46050
diff
changeset
|
364 :type `(choice (const :tag "All" t) |
21510
daf7dfe93205
(byte-compile-warnings): Fix customize
Andreas Schwab <schwab@suse.de>
parents:
20847
diff
changeset
|
365 (set :menu-tag "Some" |
daf7dfe93205
(byte-compile-warnings): Fix customize
Andreas Schwab <schwab@suse.de>
parents:
20847
diff
changeset
|
366 (const free-vars) (const unresolved) |
46136
79f132657570
(byte-compile-warning-types):
Richard M. Stallman <rms@gnu.org>
parents:
46050
diff
changeset
|
367 (const callargs) (const redefine) |
57881
f57a9010e865
(byte-compile-warning-types): Add interactive-only.
Richard M. Stallman <rms@gnu.org>
parents:
57518
diff
changeset
|
368 (const obsolete) (const noruntime) |
81217
908a902d5545
(byte-compile-warnings): Add new option `make-local'.
Glenn Morris <rgm@gnu.org>
parents:
77119
diff
changeset
|
369 (const cl-functions) (const interactive-only) |
84746 | 370 (const make-local) (const mapcar)))) |
79231
3dd857fc95d9
(byte-compile-warnings): Autoload the safe-local-variable property.
Glenn Morris <rgm@gnu.org>
parents:
78711
diff
changeset
|
371 ;;;###autoload(put 'byte-compile-warnings 'safe-local-variable 'byte-compile-warnings-safe-p) |
3dd857fc95d9
(byte-compile-warnings): Autoload the safe-local-variable property.
Glenn Morris <rgm@gnu.org>
parents:
78711
diff
changeset
|
372 |
70674
13c49a63f416
(byte-compile-warnings-safe-p): New
Reiner Steib <Reiner.Steib@gmx.de>
parents:
70590
diff
changeset
|
373 ;;;###autoload |
13c49a63f416
(byte-compile-warnings-safe-p): New
Reiner Steib <Reiner.Steib@gmx.de>
parents:
70590
diff
changeset
|
374 (defun byte-compile-warnings-safe-p (x) |
93457
4d3eb46a3b84
(byte-compile-warnings-safe-p): Use `byte-compile-warning-types'.
Juanma Barranquero <lekktu@gmail.com>
parents:
93244
diff
changeset
|
375 "Return non-nil if X is valid as a value of `byte-compile-warnings'." |
70674
13c49a63f416
(byte-compile-warnings-safe-p): New
Reiner Steib <Reiner.Steib@gmx.de>
parents:
70590
diff
changeset
|
376 (or (booleanp x) |
13c49a63f416
(byte-compile-warnings-safe-p): New
Reiner Steib <Reiner.Steib@gmx.de>
parents:
70590
diff
changeset
|
377 (and (listp x) |
85730
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
378 (if (eq (car x) 'not) (setq x (cdr x)) |
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
379 t) |
70674
13c49a63f416
(byte-compile-warnings-safe-p): New
Reiner Steib <Reiner.Steib@gmx.de>
parents:
70590
diff
changeset
|
380 (equal (mapcar |
13c49a63f416
(byte-compile-warnings-safe-p): New
Reiner Steib <Reiner.Steib@gmx.de>
parents:
70590
diff
changeset
|
381 (lambda (e) |
93457
4d3eb46a3b84
(byte-compile-warnings-safe-p): Use `byte-compile-warning-types'.
Juanma Barranquero <lekktu@gmail.com>
parents:
93244
diff
changeset
|
382 (when (memq e byte-compile-warning-types) |
70674
13c49a63f416
(byte-compile-warnings-safe-p): New
Reiner Steib <Reiner.Steib@gmx.de>
parents:
70590
diff
changeset
|
383 e)) |
13c49a63f416
(byte-compile-warnings-safe-p): New
Reiner Steib <Reiner.Steib@gmx.de>
parents:
70590
diff
changeset
|
384 x) |
13c49a63f416
(byte-compile-warnings-safe-p): New
Reiner Steib <Reiner.Steib@gmx.de>
parents:
70590
diff
changeset
|
385 x)))) |
57881
f57a9010e865
(byte-compile-warning-types): Add interactive-only.
Richard M. Stallman <rms@gnu.org>
parents:
57518
diff
changeset
|
386 |
85730
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
387 (defun byte-compile-warning-enabled-p (warning) |
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
388 "Return non-nil if WARNING is enabled, according to `byte-compile-warnings'." |
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
389 (or (eq byte-compile-warnings t) |
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
390 (if (eq (car byte-compile-warnings) 'not) |
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
391 (not (memq warning byte-compile-warnings)) |
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
392 (memq warning byte-compile-warnings)))) |
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
393 |
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
394 ;;;###autoload |
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
395 (defun byte-compile-disable-warning (warning) |
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
396 "Change `byte-compile-warnings' to disable WARNING. |
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
397 If `byte-compile-warnings' is t, set it to `(not WARNING)'. |
85780
1b8904c5babf
(byte-compile-disable-warning)
Glenn Morris <rgm@gnu.org>
parents:
85730
diff
changeset
|
398 Otherwise, if the first element is `not', add WARNING, else remove it. |
1b8904c5babf
(byte-compile-disable-warning)
Glenn Morris <rgm@gnu.org>
parents:
85730
diff
changeset
|
399 Normally you should let-bind `byte-compile-warnings' before calling this, |
1b8904c5babf
(byte-compile-disable-warning)
Glenn Morris <rgm@gnu.org>
parents:
85730
diff
changeset
|
400 else the global value will be modified." |
85730
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
401 (setq byte-compile-warnings |
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
402 (cond ((eq byte-compile-warnings t) |
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
403 (list 'not warning)) |
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
404 ((eq (car byte-compile-warnings) 'not) |
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
405 (if (memq warning byte-compile-warnings) |
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
406 byte-compile-warnings |
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
407 (append byte-compile-warnings (list warning)))) |
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
408 (t |
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
409 (delq warning byte-compile-warnings))))) |
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
410 |
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
411 ;;;###autoload |
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
412 (defun byte-compile-enable-warning (warning) |
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
413 "Change `byte-compile-warnings' to enable WARNING. |
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
414 If `byte-compile-warnings' is `t', do nothing. Otherwise, if the |
85780
1b8904c5babf
(byte-compile-disable-warning)
Glenn Morris <rgm@gnu.org>
parents:
85730
diff
changeset
|
415 first element is `not', remove WARNING, else add it. |
1b8904c5babf
(byte-compile-disable-warning)
Glenn Morris <rgm@gnu.org>
parents:
85730
diff
changeset
|
416 Normally you should let-bind `byte-compile-warnings' before calling this, |
1b8904c5babf
(byte-compile-disable-warning)
Glenn Morris <rgm@gnu.org>
parents:
85730
diff
changeset
|
417 else the global value will be modified." |
85730
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
418 (or (eq byte-compile-warnings t) |
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
419 (setq byte-compile-warnings |
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
420 (cond ((eq (car byte-compile-warnings) 'not) |
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
421 (delq warning byte-compile-warnings)) |
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
422 ((memq warning byte-compile-warnings) |
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
423 byte-compile-warnings) |
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
424 (t |
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
425 (append byte-compile-warnings (list warning))))))) |
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
426 |
57881
f57a9010e865
(byte-compile-warning-types): Add interactive-only.
Richard M. Stallman <rms@gnu.org>
parents:
57518
diff
changeset
|
427 (defvar byte-compile-interactive-only-functions |
f57a9010e865
(byte-compile-warning-types): Add interactive-only.
Richard M. Stallman <rms@gnu.org>
parents:
57518
diff
changeset
|
428 '(beginning-of-buffer end-of-buffer replace-string replace-regexp |
82503
ee14b9e1fa7f
(byte-compile-interactive-only-functions): Add previous-line and next-line.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82140
diff
changeset
|
429 insert-file insert-buffer insert-file-literally previous-line next-line) |
57881
f57a9010e865
(byte-compile-warning-types): Add interactive-only.
Richard M. Stallman <rms@gnu.org>
parents:
57518
diff
changeset
|
430 "List of commands that are not meant to be called from Lisp.") |
757 | 431 |
52133
4c112142c56f
(byte-compile-not-obsolete-var): New var.
Richard M. Stallman <rms@gnu.org>
parents:
51737
diff
changeset
|
432 (defvar byte-compile-not-obsolete-var nil |
4c112142c56f
(byte-compile-not-obsolete-var): New var.
Richard M. Stallman <rms@gnu.org>
parents:
51737
diff
changeset
|
433 "If non-nil, this is a variable that shouldn't be reported as obsolete.") |
4c112142c56f
(byte-compile-not-obsolete-var): New var.
Richard M. Stallman <rms@gnu.org>
parents:
51737
diff
changeset
|
434 |
20779 | 435 (defcustom byte-compile-generate-call-tree nil |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
436 "*Non-nil means collect call-graph information when compiling. |
57004
e9a116c0f176
(byte-compile-generate-call-tree): Doc fix.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
56657
diff
changeset
|
437 This records which functions were called and from where. |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
438 If the value is t, compilation displays the call graph when it finishes. |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
439 If the value is neither t nor nil, compilation asks you whether to display |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
440 the graph. |
757 | 441 |
442 The call tree only lists functions called, not macros used. Those functions | |
443 which the byte-code interpreter knows about directly (eq, cons, etc.) are | |
444 not reported. | |
445 | |
446 The call tree also lists those functions which are not known to be called | |
10372 | 447 \(that is, to which no calls have been compiled). Functions which can be |
20779 | 448 invoked interactively are excluded from this list." |
449 :group 'bytecomp | |
450 :type '(choice (const :tag "Yes" t) (const :tag "No" nil) | |
22578
f330ab785b83
(byte-compile-generate-call-tree):
Andreas Schwab <schwab@suse.de>
parents:
22350
diff
changeset
|
451 (other :tag "Ask" lambda))) |
757 | 452 |
41176
2d63191afacd
(byte-compile-call-tree, byte-code-vector)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40451
diff
changeset
|
453 (defvar byte-compile-call-tree nil "Alist of functions and their call tree. |
757 | 454 Each element looks like |
455 | |
456 \(FUNCTION CALLERS CALLS\) | |
457 | |
458 where CALLERS is a list of functions that call FUNCTION, and CALLS | |
459 is a list of functions for which calls were generated while compiling | |
460 FUNCTION.") | |
461 | |
20779 | 462 (defcustom byte-compile-call-tree-sort 'name |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
463 "*If non-nil, sort the call tree. |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
464 The values `name', `callers', `calls', `calls+callers' |
20779 | 465 specify different fields to sort on." |
466 :group 'bytecomp | |
467 :type '(choice (const name) (const callers) (const calls) | |
468 (const calls+callers) (const nil))) | |
757 | 469 |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
470 (defvar byte-compile-debug nil) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
471 |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
472 ;; (defvar byte-compile-overwrite-file t |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
473 ;; "If nil, old .elc files are deleted before the new is saved, and .elc |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
474 ;; files will have the same modes as the corresponding .el file. Otherwise, |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
475 ;; existing .elc files will simply be overwritten, and the existing modes |
28402 | 476 ;; will not be changed. If this variable is nil, then an .elc file which |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
477 ;; is a symbolic link will be turned into a normal file, instead of the file |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
478 ;; which the link points to being overwritten.") |
757 | 479 |
480 (defvar byte-compile-constants nil | |
28295
8082575fec24
(byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
27824
diff
changeset
|
481 "List of all constants encountered during compilation of this form.") |
757 | 482 (defvar byte-compile-variables nil |
28295
8082575fec24
(byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
27824
diff
changeset
|
483 "List of all variables encountered during compilation of this form.") |
757 | 484 (defvar byte-compile-bound-variables nil |
26922
6fdf1f6c23a0
(byte-compile-bound-variables): Doc fix.
Dave Love <fx@gnu.org>
parents:
25636
diff
changeset
|
485 "List of variables bound in the context of the current form. |
6fdf1f6c23a0
(byte-compile-bound-variables): Doc fix.
Dave Love <fx@gnu.org>
parents:
25636
diff
changeset
|
486 This list lives partly on the stack.") |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
487 (defvar byte-compile-const-variables nil |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
488 "List of variables declared as constants during compilation of this file.") |
757 | 489 (defvar byte-compile-free-references) |
490 (defvar byte-compile-free-assignments) | |
491 | |
1129 | 492 (defvar byte-compiler-error-flag) |
493 | |
757 | 494 (defconst byte-compile-initial-macro-environment |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
495 '( |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
496 ;; (byte-compiler-options . (lambda (&rest forms) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
497 ;; (apply 'byte-compiler-options-handler forms))) |
757 | 498 (eval-when-compile . (lambda (&rest body) |
28295
8082575fec24
(byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
27824
diff
changeset
|
499 (list 'quote |
8082575fec24
(byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
27824
diff
changeset
|
500 (byte-compile-eval (byte-compile-top-level |
8082575fec24
(byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
27824
diff
changeset
|
501 (cons 'progn body)))))) |
757 | 502 (eval-and-compile . (lambda (&rest body) |
46136
79f132657570
(byte-compile-warning-types):
Richard M. Stallman <rms@gnu.org>
parents:
46050
diff
changeset
|
503 (byte-compile-eval-before-compile (cons 'progn body)) |
757 | 504 (cons 'progn body)))) |
505 "The default macro-environment passed to macroexpand by the compiler. | |
506 Placing a macro here will cause a macro to have different semantics when | |
507 expanded by the compiler as when expanded by the interpreter.") | |
508 | |
509 (defvar byte-compile-macro-environment byte-compile-initial-macro-environment | |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
510 "Alist of macros defined in the file being compiled. |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
511 Each element looks like (MACRONAME . DEFINITION). It is |
3653
974055b516d9
* bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents:
3591
diff
changeset
|
512 \(MACRONAME . nil) when a macro is redefined as a function.") |
757 | 513 |
514 (defvar byte-compile-function-environment nil | |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
515 "Alist of functions defined in the file being compiled. |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
516 This is so we can inline them when necessary. |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
517 Each element looks like (FUNCTIONNAME . DEFINITION). It is |
58073
9412413950a3
(byte-compile-defalias):
Richard M. Stallman <rms@gnu.org>
parents:
57881
diff
changeset
|
518 \(FUNCTIONNAME . nil) when a function is redefined as a macro. |
9412413950a3
(byte-compile-defalias):
Richard M. Stallman <rms@gnu.org>
parents:
57881
diff
changeset
|
519 It is \(FUNCTIONNAME . t) when all we know is that it was defined, |
9412413950a3
(byte-compile-defalias):
Richard M. Stallman <rms@gnu.org>
parents:
57881
diff
changeset
|
520 and we don't know the definition.") |
757 | 521 |
522 (defvar byte-compile-unresolved-functions nil | |
28295
8082575fec24
(byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
27824
diff
changeset
|
523 "Alist of undefined functions to which calls have been compiled. |
78210
964d6961bdb6
(byte-compile-from-buffer): initialise byte-compile-unresolved-functions before
Alan Mackenzie <acm@muc.de>
parents:
77119
diff
changeset
|
524 This variable is only significant whilst compiling an entire buffer. |
964d6961bdb6
(byte-compile-from-buffer): initialise byte-compile-unresolved-functions before
Alan Mackenzie <acm@muc.de>
parents:
77119
diff
changeset
|
525 Used for warnings when a function is not known to be defined or is later |
28295
8082575fec24
(byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
27824
diff
changeset
|
526 defined with incorrect args.") |
757 | 527 |
53753
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
528 (defvar byte-compile-noruntime-functions nil |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
529 "Alist of functions called that may not be defined when the compiled code is run. |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
530 Used for warnings about calling a function that is defined during compilation |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
531 but won't necessarily be defined when the compiled file is loaded.") |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
532 |
757 | 533 (defvar byte-compile-tag-number 0) |
534 (defvar byte-compile-output nil | |
535 "Alist describing contents to put in byte code string. | |
536 Each element is (INDEX . VALUE)") | |
537 (defvar byte-compile-depth 0 "Current depth of execution stack.") | |
538 (defvar byte-compile-maxdepth 0 "Maximum depth of execution stack.") | |
539 | |
540 | |
541 ;;; The byte codes; this information is duplicated in bytecomp.c | |
542 | |
41176
2d63191afacd
(byte-compile-call-tree, byte-code-vector)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40451
diff
changeset
|
543 (defvar byte-code-vector nil |
757 | 544 "An array containing byte-code names indexed by byte-code values.") |
545 | |
41176
2d63191afacd
(byte-compile-call-tree, byte-code-vector)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40451
diff
changeset
|
546 (defvar byte-stack+-info nil |
757 | 547 "An array with the stack adjustment for each byte-code.") |
548 | |
549 (defmacro byte-defop (opcode stack-adjust opname &optional docstring) | |
550 ;; This is a speed-hack for building the byte-code-vector at compile-time. | |
551 ;; We fill in the vector at macroexpand-time, and then after the last call | |
552 ;; to byte-defop, we write the vector out as a constant instead of writing | |
553 ;; out a bunch of calls to aset. | |
554 ;; Actually, we don't fill in the vector itself, because that could make | |
555 ;; it problematic to compile big changes to this compiler; we store the | |
556 ;; values on its plist, and remove them later in -extrude. | |
557 (let ((v1 (or (get 'byte-code-vector 'tmp-compile-time-value) | |
558 (put 'byte-code-vector 'tmp-compile-time-value | |
559 (make-vector 256 nil)))) | |
560 (v2 (or (get 'byte-stack+-info 'tmp-compile-time-value) | |
561 (put 'byte-stack+-info 'tmp-compile-time-value | |
562 (make-vector 256 nil))))) | |
563 (aset v1 opcode opname) | |
564 (aset v2 opcode stack-adjust)) | |
565 (if docstring | |
566 (list 'defconst opname opcode (concat "Byte code opcode " docstring ".")) | |
567 (list 'defconst opname opcode))) | |
568 | |
569 (defmacro byte-extrude-byte-code-vectors () | |
570 (prog1 (list 'setq 'byte-code-vector | |
571 (get 'byte-code-vector 'tmp-compile-time-value) | |
572 'byte-stack+-info | |
573 (get 'byte-stack+-info 'tmp-compile-time-value)) | |
27230
6eba74503556
(byte-extrude-byte-code-vectors): Use remprop.
Dave Love <fx@gnu.org>
parents:
26936
diff
changeset
|
574 (put 'byte-code-vector 'tmp-compile-time-value nil) |
6eba74503556
(byte-extrude-byte-code-vectors): Use remprop.
Dave Love <fx@gnu.org>
parents:
26936
diff
changeset
|
575 (put 'byte-stack+-info 'tmp-compile-time-value nil))) |
757 | 576 |
577 | |
578 ;; unused: 0-7 | |
579 | |
580 ;; These opcodes are special in that they pack their argument into the | |
581 ;; opcode word. | |
582 ;; | |
583 (byte-defop 8 1 byte-varref "for variable reference") | |
584 (byte-defop 16 -1 byte-varset "for setting a variable") | |
585 (byte-defop 24 -1 byte-varbind "for binding a variable") | |
586 (byte-defop 32 0 byte-call "for calling a function") | |
587 (byte-defop 40 0 byte-unbind "for unbinding special bindings") | |
3591
507f64624555
Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents:
3455
diff
changeset
|
588 ;; codes 8-47 are consumed by the preceding opcodes |
757 | 589 |
590 ;; unused: 48-55 | |
591 | |
592 (byte-defop 56 -1 byte-nth) | |
593 (byte-defop 57 0 byte-symbolp) | |
594 (byte-defop 58 0 byte-consp) | |
595 (byte-defop 59 0 byte-stringp) | |
596 (byte-defop 60 0 byte-listp) | |
597 (byte-defop 61 -1 byte-eq) | |
598 (byte-defop 62 -1 byte-memq) | |
599 (byte-defop 63 0 byte-not) | |
600 (byte-defop 64 0 byte-car) | |
601 (byte-defop 65 0 byte-cdr) | |
602 (byte-defop 66 -1 byte-cons) | |
603 (byte-defop 67 0 byte-list1) | |
604 (byte-defop 68 -1 byte-list2) | |
605 (byte-defop 69 -2 byte-list3) | |
606 (byte-defop 70 -3 byte-list4) | |
607 (byte-defop 71 0 byte-length) | |
608 (byte-defop 72 -1 byte-aref) | |
609 (byte-defop 73 -2 byte-aset) | |
610 (byte-defop 74 0 byte-symbol-value) | |
611 (byte-defop 75 0 byte-symbol-function) ; this was commented out | |
612 (byte-defop 76 -1 byte-set) | |
613 (byte-defop 77 -1 byte-fset) ; this was commented out | |
614 (byte-defop 78 -1 byte-get) | |
615 (byte-defop 79 -2 byte-substring) | |
616 (byte-defop 80 -1 byte-concat2) | |
617 (byte-defop 81 -2 byte-concat3) | |
618 (byte-defop 82 -3 byte-concat4) | |
619 (byte-defop 83 0 byte-sub1) | |
620 (byte-defop 84 0 byte-add1) | |
621 (byte-defop 85 -1 byte-eqlsign) | |
622 (byte-defop 86 -1 byte-gtr) | |
623 (byte-defop 87 -1 byte-lss) | |
624 (byte-defop 88 -1 byte-leq) | |
625 (byte-defop 89 -1 byte-geq) | |
626 (byte-defop 90 -1 byte-diff) | |
627 (byte-defop 91 0 byte-negate) | |
628 (byte-defop 92 -1 byte-plus) | |
629 (byte-defop 93 -1 byte-max) | |
630 (byte-defop 94 -1 byte-min) | |
631 (byte-defop 95 -1 byte-mult) ; v19 only | |
632 (byte-defop 96 1 byte-point) | |
633 (byte-defop 98 0 byte-goto-char) | |
634 (byte-defop 99 0 byte-insert) | |
635 (byte-defop 100 1 byte-point-max) | |
636 (byte-defop 101 1 byte-point-min) | |
637 (byte-defop 102 0 byte-char-after) | |
638 (byte-defop 103 1 byte-following-char) | |
639 (byte-defop 104 1 byte-preceding-char) | |
640 (byte-defop 105 1 byte-current-column) | |
641 (byte-defop 106 0 byte-indent-to) | |
642 (byte-defop 107 0 byte-scan-buffer-OBSOLETE) ; no longer generated as of v18 | |
643 (byte-defop 108 1 byte-eolp) | |
644 (byte-defop 109 1 byte-eobp) | |
645 (byte-defop 110 1 byte-bolp) | |
646 (byte-defop 111 1 byte-bobp) | |
647 (byte-defop 112 1 byte-current-buffer) | |
648 (byte-defop 113 0 byte-set-buffer) | |
18266
fd7bd1ad0763
(byte-save-current-buffer): Change to code 114 (0162).
Richard M. Stallman <rms@gnu.org>
parents:
17704
diff
changeset
|
649 (byte-defop 114 0 byte-save-current-buffer |
fd7bd1ad0763
(byte-save-current-buffer): Change to code 114 (0162).
Richard M. Stallman <rms@gnu.org>
parents:
17704
diff
changeset
|
650 "To make a binding to record the current buffer") |
757 | 651 (byte-defop 115 0 byte-set-mark-OBSOLETE) |
652 (byte-defop 116 1 byte-interactive-p) | |
653 | |
654 ;; These ops are new to v19 | |
655 (byte-defop 117 0 byte-forward-char) | |
656 (byte-defop 118 0 byte-forward-word) | |
657 (byte-defop 119 -1 byte-skip-chars-forward) | |
658 (byte-defop 120 -1 byte-skip-chars-backward) | |
659 (byte-defop 121 0 byte-forward-line) | |
660 (byte-defop 122 0 byte-char-syntax) | |
661 (byte-defop 123 -1 byte-buffer-substring) | |
662 (byte-defop 124 -1 byte-delete-region) | |
663 (byte-defop 125 -1 byte-narrow-to-region) | |
664 (byte-defop 126 1 byte-widen) | |
665 (byte-defop 127 0 byte-end-of-line) | |
666 | |
667 ;; unused: 128 | |
668 | |
669 ;; These store their argument in the next two bytes | |
670 (byte-defop 129 1 byte-constant2 | |
671 "for reference to a constant with vector index >= byte-constant-limit") | |
672 (byte-defop 130 0 byte-goto "for unconditional jump") | |
673 (byte-defop 131 -1 byte-goto-if-nil "to pop value and jump if it's nil") | |
674 (byte-defop 132 -1 byte-goto-if-not-nil "to pop value and jump if it's not nil") | |
675 (byte-defop 133 -1 byte-goto-if-nil-else-pop | |
28402 | 676 "to examine top-of-stack, jump and don't pop it if it's nil, |
757 | 677 otherwise pop it") |
678 (byte-defop 134 -1 byte-goto-if-not-nil-else-pop | |
28402 | 679 "to examine top-of-stack, jump and don't pop it if it's non nil, |
757 | 680 otherwise pop it") |
681 | |
682 (byte-defop 135 -1 byte-return "to pop a value and return it from `byte-code'") | |
683 (byte-defop 136 -1 byte-discard "to discard one value from stack") | |
684 (byte-defop 137 1 byte-dup "to duplicate the top of the stack") | |
685 | |
686 (byte-defop 138 0 byte-save-excursion | |
687 "to make a binding to record the buffer, point and mark") | |
688 (byte-defop 139 0 byte-save-window-excursion | |
689 "to make a binding to record entire window configuration") | |
690 (byte-defop 140 0 byte-save-restriction | |
691 "to make a binding to record the current buffer clipping restrictions") | |
692 (byte-defop 141 -1 byte-catch | |
693 "for catch. Takes, on stack, the tag and an expression for the body") | |
694 (byte-defop 142 -1 byte-unwind-protect | |
695 "for unwind-protect. Takes, on stack, an expression for the unwind-action") | |
696 | |
28402 | 697 ;; For condition-case. Takes, on stack, the variable to bind, |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
698 ;; an expression for the body, and a list of clauses. |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
699 (byte-defop 143 -2 byte-condition-case) |
757 | 700 |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
701 ;; For entry to with-output-to-temp-buffer. |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
702 ;; Takes, on stack, the buffer name. |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
703 ;; Binds standard-output and does some other things. |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
704 ;; Returns with temp buffer on the stack in place of buffer name. |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
705 (byte-defop 144 0 byte-temp-output-buffer-setup) |
757 | 706 |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
707 ;; For exit from with-output-to-temp-buffer. |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
708 ;; Expects the temp buffer on the stack underneath value to return. |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
709 ;; Pops them both, then pushes the value back on. |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
710 ;; Unbinds standard-output and makes the temp buffer visible. |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
711 (byte-defop 145 -1 byte-temp-output-buffer-show) |
757 | 712 |
713 ;; these ops are new to v19 | |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
714 |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
715 ;; To unbind back to the beginning of this frame. |
11117
34477ac36e6e
(byte-compile-out-toplevel): Compile lambda forms even if trivial.
Karl Heuer <kwzh@gnu.org>
parents:
10836
diff
changeset
|
716 ;; Not used yet, but will be needed for tail-recursion elimination. |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
717 (byte-defop 146 0 byte-unbind-all) |
757 | 718 |
719 ;; these ops are new to v19 | |
720 (byte-defop 147 -2 byte-set-marker) | |
721 (byte-defop 148 0 byte-match-beginning) | |
722 (byte-defop 149 0 byte-match-end) | |
723 (byte-defop 150 0 byte-upcase) | |
724 (byte-defop 151 0 byte-downcase) | |
725 (byte-defop 152 -1 byte-string=) | |
726 (byte-defop 153 -1 byte-string<) | |
727 (byte-defop 154 -1 byte-equal) | |
728 (byte-defop 155 -1 byte-nthcdr) | |
729 (byte-defop 156 -1 byte-elt) | |
730 (byte-defop 157 -1 byte-member) | |
731 (byte-defop 158 -1 byte-assq) | |
732 (byte-defop 159 0 byte-nreverse) | |
733 (byte-defop 160 -1 byte-setcar) | |
734 (byte-defop 161 -1 byte-setcdr) | |
735 (byte-defop 162 0 byte-car-safe) | |
736 (byte-defop 163 0 byte-cdr-safe) | |
737 (byte-defop 164 -1 byte-nconc) | |
738 (byte-defop 165 -1 byte-quo) | |
739 (byte-defop 166 -1 byte-rem) | |
740 (byte-defop 167 0 byte-numberp) | |
741 (byte-defop 168 0 byte-integerp) | |
742 | |
848 | 743 ;; unused: 169-174 |
757 | 744 (byte-defop 175 nil byte-listN) |
745 (byte-defop 176 nil byte-concatN) | |
746 (byte-defop 177 nil byte-insertN) | |
747 | |
748 ;; unused: 178-191 | |
749 | |
750 (byte-defop 192 1 byte-constant "for reference to a constant") | |
751 ;; codes 193-255 are consumed by byte-constant. | |
752 (defconst byte-constant-limit 64 | |
753 "Exclusive maximum index usable in the `byte-constant' opcode.") | |
754 | |
755 (defconst byte-goto-ops '(byte-goto byte-goto-if-nil byte-goto-if-not-nil | |
756 byte-goto-if-nil-else-pop | |
757 byte-goto-if-not-nil-else-pop) | |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
758 "List of byte-codes whose offset is a pc.") |
757 | 759 |
760 (defconst byte-goto-always-pop-ops '(byte-goto-if-nil byte-goto-if-not-nil)) | |
761 | |
762 (byte-extrude-byte-code-vectors) | |
763 | |
764 ;;; lapcode generator | |
39561
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
765 ;; |
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
766 ;; the byte-compiler now does source -> lapcode -> bytecode instead of |
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
767 ;; source -> bytecode, because it's a lot easier to make optimizations |
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
768 ;; on lapcode than on bytecode. |
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
769 ;; |
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
770 ;; Elements of the lapcode list are of the form (<instruction> . <parameter>) |
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
771 ;; where instruction is a symbol naming a byte-code instruction, |
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
772 ;; and parameter is an argument to that instruction, if any. |
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
773 ;; |
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
774 ;; The instruction can be the pseudo-op TAG, which means that this position |
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
775 ;; in the instruction stream is a target of a goto. (car PARAMETER) will be |
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
776 ;; the PC for this location, and the whole instruction "(TAG pc)" will be the |
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
777 ;; parameter for some goto op. |
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
778 ;; |
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
779 ;; If the operation is varbind, varref, varset or push-constant, then the |
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
780 ;; parameter is (variable/constant . index_in_constant_vector). |
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
781 ;; |
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
782 ;; First, the source code is macroexpanded and optimized in various ways. |
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
783 ;; Then the resultant code is compiled into lapcode. Another set of |
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
784 ;; optimizations are then run over the lapcode. Then the variables and |
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
785 ;; constants referenced by the lapcode are collected and placed in the |
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
786 ;; constants-vector. (This happens now so that variables referenced by dead |
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
787 ;; code don't consume space.) And finally, the lapcode is transformed into |
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
788 ;; compacted byte-code. |
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
789 ;; |
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
790 ;; A distinction is made between variables and constants because the variable- |
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
791 ;; referencing instructions are more sensitive to the variables being near the |
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
792 ;; front of the constants-vector than the constant-referencing instructions. |
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
793 ;; Also, this lets us notice references to free variables. |
757 | 794 |
795 (defun byte-compile-lapcode (lap) | |
796 "Turns lapcode into bytecode. The lapcode is destroyed." | |
797 ;; Lapcode modifications: changes the ID of a tag to be the tag's PC. | |
798 (let ((pc 0) ; Program counter | |
799 op off ; Operation & offset | |
800 (bytes '()) ; Put the output bytes here | |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
801 (patchlist nil)) ; List of tags and goto's to patch |
757 | 802 (while lap |
803 (setq op (car (car lap)) | |
804 off (cdr (car lap))) | |
805 (cond ((not (symbolp op)) | |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
806 (error "Non-symbolic opcode `%s'" op)) |
757 | 807 ((eq op 'TAG) |
808 (setcar off pc) | |
809 (setq patchlist (cons off patchlist))) | |
810 ((memq op byte-goto-ops) | |
811 (setq pc (+ pc 3)) | |
812 (setq bytes (cons (cons pc (cdr off)) | |
813 (cons nil | |
814 (cons (symbol-value op) bytes)))) | |
815 (setq patchlist (cons bytes patchlist))) | |
816 (t | |
817 (setq bytes | |
818 (cond ((cond ((consp off) | |
819 ;; Variable or constant reference | |
820 (setq off (cdr off)) | |
821 (eq op 'byte-constant))) | |
822 (cond ((< off byte-constant-limit) | |
823 (setq pc (1+ pc)) | |
824 (cons (+ byte-constant off) bytes)) | |
825 (t | |
826 (setq pc (+ 3 pc)) | |
827 (cons (lsh off -8) | |
828 (cons (logand off 255) | |
829 (cons byte-constant2 bytes)))))) | |
830 ((<= byte-listN (symbol-value op)) | |
831 (setq pc (+ 2 pc)) | |
832 (cons off (cons (symbol-value op) bytes))) | |
833 ((< off 6) | |
834 (setq pc (1+ pc)) | |
835 (cons (+ (symbol-value op) off) bytes)) | |
836 ((< off 256) | |
837 (setq pc (+ 2 pc)) | |
838 (cons off (cons (+ (symbol-value op) 6) bytes))) | |
839 (t | |
840 (setq pc (+ 3 pc)) | |
841 (cons (lsh off -8) | |
842 (cons (logand off 255) | |
843 (cons (+ (symbol-value op) 7) | |
844 bytes)))))))) | |
845 (setq lap (cdr lap))) | |
846 ;;(if (not (= pc (length bytes))) | |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
847 ;; (error "Compiler error: pc mismatch - %s %s" pc (length bytes))) |
757 | 848 ;; Patch PC into jumps |
849 (let (bytes) | |
850 (while patchlist | |
851 (setq bytes (car patchlist)) | |
852 (cond ((atom (car bytes))) ; Tag | |
853 (t ; Absolute jump | |
854 (setq pc (car (cdr (car bytes)))) ; Pick PC from tag | |
855 (setcar (cdr bytes) (logand pc 255)) | |
856 (setcar bytes (lsh pc -8)))) | |
857 (setq patchlist (cdr patchlist)))) | |
91797
5ed3a8ae2d11
(byte-compile-lapcode): Use
Kenichi Handa <handa@m17n.org>
parents:
91327
diff
changeset
|
858 (apply 'unibyte-string (nreverse bytes)))) |
757 | 859 |
860 | |
28295
8082575fec24
(byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
27824
diff
changeset
|
861 ;;; compile-time evaluation |
8082575fec24
(byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
27824
diff
changeset
|
862 |
28336
49b7af1b8e1b
(byte-compile-eval): Fix and reenable the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
28305
diff
changeset
|
863 (defun byte-compile-eval (form) |
49b7af1b8e1b
(byte-compile-eval): Fix and reenable the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
28305
diff
changeset
|
864 "Eval FORM and mark the functions defined therein. |
53753
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
865 Each function's symbol gets added to `byte-compile-noruntime-functions'." |
28295
8082575fec24
(byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
27824
diff
changeset
|
866 (let ((hist-orig load-history) |
8082575fec24
(byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
27824
diff
changeset
|
867 (hist-nil-orig current-load-list)) |
28336
49b7af1b8e1b
(byte-compile-eval): Fix and reenable the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
28305
diff
changeset
|
868 (prog1 (eval form) |
85730
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
869 (when (byte-compile-warning-enabled-p 'noruntime) |
28295
8082575fec24
(byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
27824
diff
changeset
|
870 (let ((hist-new load-history) |
8082575fec24
(byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
27824
diff
changeset
|
871 (hist-nil-new current-load-list)) |
28336
49b7af1b8e1b
(byte-compile-eval): Fix and reenable the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
28305
diff
changeset
|
872 ;; Go through load-history, look for newly loaded files |
49b7af1b8e1b
(byte-compile-eval): Fix and reenable the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
28305
diff
changeset
|
873 ;; and mark all the functions defined therein. |
49b7af1b8e1b
(byte-compile-eval): Fix and reenable the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
28305
diff
changeset
|
874 (while (and hist-new (not (eq hist-new hist-orig))) |
48719
0cc3c6bc6da0
(byte-compile-eval): Handle (t . SYMBOL) elements in load-history.
Richard M. Stallman <rms@gnu.org>
parents:
48468
diff
changeset
|
875 (let ((xs (pop hist-new)) |
0cc3c6bc6da0
(byte-compile-eval): Handle (t . SYMBOL) elements in load-history.
Richard M. Stallman <rms@gnu.org>
parents:
48468
diff
changeset
|
876 old-autoloads) |
28336
49b7af1b8e1b
(byte-compile-eval): Fix and reenable the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
28305
diff
changeset
|
877 ;; Make sure the file was not already loaded before. |
57518
25bf13fe1c10
(byte-compile-eval): Don't process
Richard M. Stallman <rms@gnu.org>
parents:
57004
diff
changeset
|
878 (unless (or (assoc (car xs) hist-orig) |
25bf13fe1c10
(byte-compile-eval): Don't process
Richard M. Stallman <rms@gnu.org>
parents:
57004
diff
changeset
|
879 (equal (car xs) "cl")) |
28336
49b7af1b8e1b
(byte-compile-eval): Fix and reenable the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
28305
diff
changeset
|
880 (dolist (s xs) |
49b7af1b8e1b
(byte-compile-eval): Fix and reenable the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
28305
diff
changeset
|
881 (cond |
48719
0cc3c6bc6da0
(byte-compile-eval): Handle (t . SYMBOL) elements in load-history.
Richard M. Stallman <rms@gnu.org>
parents:
48468
diff
changeset
|
882 ((symbolp s) |
0cc3c6bc6da0
(byte-compile-eval): Handle (t . SYMBOL) elements in load-history.
Richard M. Stallman <rms@gnu.org>
parents:
48468
diff
changeset
|
883 (unless (memq s old-autoloads) |
53753
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
884 (push s byte-compile-noruntime-functions))) |
48719
0cc3c6bc6da0
(byte-compile-eval): Handle (t . SYMBOL) elements in load-history.
Richard M. Stallman <rms@gnu.org>
parents:
48468
diff
changeset
|
885 ((and (consp s) (eq t (car s))) |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
886 (push (cdr s) old-autoloads)) |
28336
49b7af1b8e1b
(byte-compile-eval): Fix and reenable the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
28305
diff
changeset
|
887 ((and (consp s) (eq 'autoload (car s))) |
53753
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
888 (push (cdr s) byte-compile-noruntime-functions))))))) |
28336
49b7af1b8e1b
(byte-compile-eval): Fix and reenable the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
28305
diff
changeset
|
889 ;; Go through current-load-list for the locally defined funs. |
48719
0cc3c6bc6da0
(byte-compile-eval): Handle (t . SYMBOL) elements in load-history.
Richard M. Stallman <rms@gnu.org>
parents:
48468
diff
changeset
|
890 (let (old-autoloads) |
0cc3c6bc6da0
(byte-compile-eval): Handle (t . SYMBOL) elements in load-history.
Richard M. Stallman <rms@gnu.org>
parents:
48468
diff
changeset
|
891 (while (and hist-nil-new (not (eq hist-nil-new hist-nil-orig))) |
0cc3c6bc6da0
(byte-compile-eval): Handle (t . SYMBOL) elements in load-history.
Richard M. Stallman <rms@gnu.org>
parents:
48468
diff
changeset
|
892 (let ((s (pop hist-nil-new))) |
0cc3c6bc6da0
(byte-compile-eval): Handle (t . SYMBOL) elements in load-history.
Richard M. Stallman <rms@gnu.org>
parents:
48468
diff
changeset
|
893 (when (and (symbolp s) (not (memq s old-autoloads))) |
53753
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
894 (push s byte-compile-noruntime-functions)) |
48719
0cc3c6bc6da0
(byte-compile-eval): Handle (t . SYMBOL) elements in load-history.
Richard M. Stallman <rms@gnu.org>
parents:
48468
diff
changeset
|
895 (when (and (consp s) (eq t (car s))) |
57518
25bf13fe1c10
(byte-compile-eval): Don't process
Richard M. Stallman <rms@gnu.org>
parents:
57004
diff
changeset
|
896 (push (cdr s) old-autoloads))))))) |
85730
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
897 (when (byte-compile-warning-enabled-p 'cl-functions) |
81333
fc32f1336974
(byte-compile-current-group): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81295
diff
changeset
|
898 (let ((hist-new load-history)) |
57518
25bf13fe1c10
(byte-compile-eval): Don't process
Richard M. Stallman <rms@gnu.org>
parents:
57004
diff
changeset
|
899 ;; Go through load-history, look for newly loaded files |
25bf13fe1c10
(byte-compile-eval): Don't process
Richard M. Stallman <rms@gnu.org>
parents:
57004
diff
changeset
|
900 ;; and mark all the functions defined therein. |
25bf13fe1c10
(byte-compile-eval): Don't process
Richard M. Stallman <rms@gnu.org>
parents:
57004
diff
changeset
|
901 (while (and hist-new (not (eq hist-new hist-orig))) |
81333
fc32f1336974
(byte-compile-current-group): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81295
diff
changeset
|
902 (let ((xs (pop hist-new))) |
57518
25bf13fe1c10
(byte-compile-eval): Don't process
Richard M. Stallman <rms@gnu.org>
parents:
57004
diff
changeset
|
903 ;; Make sure the file was not already loaded before. |
25bf13fe1c10
(byte-compile-eval): Don't process
Richard M. Stallman <rms@gnu.org>
parents:
57004
diff
changeset
|
904 (when (and (equal (car xs) "cl") (not (assoc (car xs) hist-orig))) |
25bf13fe1c10
(byte-compile-eval): Don't process
Richard M. Stallman <rms@gnu.org>
parents:
57004
diff
changeset
|
905 (byte-compile-find-cl-functions))))))))) |
28295
8082575fec24
(byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
27824
diff
changeset
|
906 |
46136
79f132657570
(byte-compile-warning-types):
Richard M. Stallman <rms@gnu.org>
parents:
46050
diff
changeset
|
907 (defun byte-compile-eval-before-compile (form) |
79f132657570
(byte-compile-warning-types):
Richard M. Stallman <rms@gnu.org>
parents:
46050
diff
changeset
|
908 "Evaluate FORM for `eval-and-compile'." |
79f132657570
(byte-compile-warning-types):
Richard M. Stallman <rms@gnu.org>
parents:
46050
diff
changeset
|
909 (let ((hist-nil-orig current-load-list)) |
79f132657570
(byte-compile-warning-types):
Richard M. Stallman <rms@gnu.org>
parents:
46050
diff
changeset
|
910 (prog1 (eval form) |
79f132657570
(byte-compile-warning-types):
Richard M. Stallman <rms@gnu.org>
parents:
46050
diff
changeset
|
911 ;; (eval-and-compile (require 'cl) turns off warnings for cl functions. |
79f132657570
(byte-compile-warning-types):
Richard M. Stallman <rms@gnu.org>
parents:
46050
diff
changeset
|
912 (let ((tem current-load-list)) |
79f132657570
(byte-compile-warning-types):
Richard M. Stallman <rms@gnu.org>
parents:
46050
diff
changeset
|
913 (while (not (eq tem hist-nil-orig)) |
79f132657570
(byte-compile-warning-types):
Richard M. Stallman <rms@gnu.org>
parents:
46050
diff
changeset
|
914 (when (equal (car tem) '(require . cl)) |
85730
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
915 (byte-compile-disable-warning 'cl-functions)) |
46136
79f132657570
(byte-compile-warning-types):
Richard M. Stallman <rms@gnu.org>
parents:
46050
diff
changeset
|
916 (setq tem (cdr tem))))))) |
28295
8082575fec24
(byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
27824
diff
changeset
|
917 |
757 | 918 ;;; byte compiler messages |
919 | |
10235
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
920 (defvar byte-compile-current-form nil) |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
921 (defvar byte-compile-dest-file nil) |
33352
bd48e8729dbb
(byte-compiling-files-p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33348
diff
changeset
|
922 (defvar byte-compile-current-file nil) |
95642
1b0cbcea87b2
(byte-compile-current-group): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
923 (defvar byte-compile-current-group nil) |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
924 (defvar byte-compile-current-buffer nil) |
33348
af3d766a1234
(byte-compile-current-file): Don't bind
Gerd Moellmann <gerd@gnu.org>
parents:
32765
diff
changeset
|
925 |
46576 | 926 ;; Log something that isn't a warning. |
757 | 927 (defmacro byte-compile-log (format-string &rest args) |
55694
62803bbfc576
(byte-compile-log): Use backquotes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
55077
diff
changeset
|
928 `(and |
62803bbfc576
(byte-compile-log): Use backquotes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
55077
diff
changeset
|
929 byte-optimize |
62803bbfc576
(byte-compile-log): Use backquotes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
55077
diff
changeset
|
930 (memq byte-optimize-log '(t source)) |
62803bbfc576
(byte-compile-log): Use backquotes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
55077
diff
changeset
|
931 (let ((print-escape-newlines t) |
62803bbfc576
(byte-compile-log): Use backquotes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
55077
diff
changeset
|
932 (print-level 4) |
62803bbfc576
(byte-compile-log): Use backquotes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
55077
diff
changeset
|
933 (print-length 4)) |
62803bbfc576
(byte-compile-log): Use backquotes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
55077
diff
changeset
|
934 (byte-compile-log-1 |
62803bbfc576
(byte-compile-log): Use backquotes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
55077
diff
changeset
|
935 (format |
62803bbfc576
(byte-compile-log): Use backquotes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
55077
diff
changeset
|
936 ,format-string |
62803bbfc576
(byte-compile-log): Use backquotes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
55077
diff
changeset
|
937 ,@(mapcar |
62803bbfc576
(byte-compile-log): Use backquotes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
55077
diff
changeset
|
938 (lambda (x) (if (symbolp x) (list 'prin1-to-string x) x)) |
62803bbfc576
(byte-compile-log): Use backquotes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
55077
diff
changeset
|
939 args)))))) |
757 | 940 |
46576 | 941 ;; Log something that isn't a warning. |
942 (defun byte-compile-log-1 (string) | |
55694
62803bbfc576
(byte-compile-log): Use backquotes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
55077
diff
changeset
|
943 (with-current-buffer "*Compile-Log*" |
57518
25bf13fe1c10
(byte-compile-eval): Don't process
Richard M. Stallman <rms@gnu.org>
parents:
57004
diff
changeset
|
944 (let ((inhibit-read-only t)) |
25bf13fe1c10
(byte-compile-eval): Don't process
Richard M. Stallman <rms@gnu.org>
parents:
57004
diff
changeset
|
945 (goto-char (point-max)) |
25bf13fe1c10
(byte-compile-eval): Don't process
Richard M. Stallman <rms@gnu.org>
parents:
57004
diff
changeset
|
946 (byte-compile-warning-prefix nil nil) |
25bf13fe1c10
(byte-compile-eval): Don't process
Richard M. Stallman <rms@gnu.org>
parents:
57004
diff
changeset
|
947 (cond (noninteractive |
25bf13fe1c10
(byte-compile-eval): Don't process
Richard M. Stallman <rms@gnu.org>
parents:
57004
diff
changeset
|
948 (message " %s" string)) |
25bf13fe1c10
(byte-compile-eval): Don't process
Richard M. Stallman <rms@gnu.org>
parents:
57004
diff
changeset
|
949 (t |
25bf13fe1c10
(byte-compile-eval): Don't process
Richard M. Stallman <rms@gnu.org>
parents:
57004
diff
changeset
|
950 (insert (format "%s\n" string))))))) |
757 | 951 |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
952 (defvar byte-compile-read-position nil |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
953 "Character position we began the last `read' from.") |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
954 (defvar byte-compile-last-position nil |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
955 "Last known character position in the input.") |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
956 |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
957 ;; copied from gnus-util.el |
46690
68c134e00c87
(byte-compile-set-symbol-position): Don't recompute `entry' on each iteration.
Richard M. Stallman <rms@gnu.org>
parents:
46657
diff
changeset
|
958 (defsubst byte-compile-delete-first (elt list) |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
959 (if (eq (car list) elt) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
960 (cdr list) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
961 (let ((total list)) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
962 (while (and (cdr list) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
963 (not (eq (cadr list) elt))) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
964 (setq list (cdr list))) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
965 (when (cdr list) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
966 (setcdr list (cddr list))) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
967 total))) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
968 |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
969 ;; The purpose of this function is to iterate through the |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
970 ;; `read-symbol-positions-list'. Each time we process, say, a |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
971 ;; function definition (`defun') we remove `defun' from |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
972 ;; `read-symbol-positions-list', and set `byte-compile-last-position' |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
973 ;; to that symbol's character position. Similarly, if we encounter a |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
974 ;; variable reference, like in (1+ foo), we remove `foo' from the |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
975 ;; list. If our current position is after the symbol's position, we |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
976 ;; assume we've already passed that point, and look for the next |
47912 | 977 ;; occurrence of the symbol. |
66317
3f882faaa9ae
(byte-compile-lambda): Add parameter add-lambda.
Lars Hansen <larsh@soem.dk>
parents:
64751
diff
changeset
|
978 ;; |
3f882faaa9ae
(byte-compile-lambda): Add parameter add-lambda.
Lars Hansen <larsh@soem.dk>
parents:
64751
diff
changeset
|
979 ;; This function should not be called twice for the same occurrence of |
3f882faaa9ae
(byte-compile-lambda): Add parameter add-lambda.
Lars Hansen <larsh@soem.dk>
parents:
64751
diff
changeset
|
980 ;; a symbol, and it should not be called for symbols generated by the |
3f882faaa9ae
(byte-compile-lambda): Add parameter add-lambda.
Lars Hansen <larsh@soem.dk>
parents:
64751
diff
changeset
|
981 ;; byte compiler itself; because rather than just fail looking up the |
3f882faaa9ae
(byte-compile-lambda): Add parameter add-lambda.
Lars Hansen <larsh@soem.dk>
parents:
64751
diff
changeset
|
982 ;; symbol, we may find an occurrence of the symbol further ahead, and |
3f882faaa9ae
(byte-compile-lambda): Add parameter add-lambda.
Lars Hansen <larsh@soem.dk>
parents:
64751
diff
changeset
|
983 ;; then `byte-compile-last-position' as advanced too far. |
3f882faaa9ae
(byte-compile-lambda): Add parameter add-lambda.
Lars Hansen <larsh@soem.dk>
parents:
64751
diff
changeset
|
984 ;; |
47912 | 985 ;; So your're probably asking yourself: Isn't this function a |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
986 ;; gross hack? And the answer, of course, would be yes. |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
987 (defun byte-compile-set-symbol-position (sym &optional allow-previous) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
988 (when byte-compile-read-position |
46690
68c134e00c87
(byte-compile-set-symbol-position): Don't recompute `entry' on each iteration.
Richard M. Stallman <rms@gnu.org>
parents:
46657
diff
changeset
|
989 (let (last entry) |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
990 (while (progn |
58377
01886d0fea34
(byte-compile-form): Move the calls to byte-compile-set-symbol-position,
Richard M. Stallman <rms@gnu.org>
parents:
58154
diff
changeset
|
991 (setq last byte-compile-last-position |
01886d0fea34
(byte-compile-form): Move the calls to byte-compile-set-symbol-position,
Richard M. Stallman <rms@gnu.org>
parents:
58154
diff
changeset
|
992 entry (assq sym read-symbol-positions-list)) |
01886d0fea34
(byte-compile-form): Move the calls to byte-compile-set-symbol-position,
Richard M. Stallman <rms@gnu.org>
parents:
58154
diff
changeset
|
993 (when entry |
01886d0fea34
(byte-compile-form): Move the calls to byte-compile-set-symbol-position,
Richard M. Stallman <rms@gnu.org>
parents:
58154
diff
changeset
|
994 (setq byte-compile-last-position |
01886d0fea34
(byte-compile-form): Move the calls to byte-compile-set-symbol-position,
Richard M. Stallman <rms@gnu.org>
parents:
58154
diff
changeset
|
995 (+ byte-compile-read-position (cdr entry)) |
01886d0fea34
(byte-compile-form): Move the calls to byte-compile-set-symbol-position,
Richard M. Stallman <rms@gnu.org>
parents:
58154
diff
changeset
|
996 read-symbol-positions-list |
01886d0fea34
(byte-compile-form): Move the calls to byte-compile-set-symbol-position,
Richard M. Stallman <rms@gnu.org>
parents:
58154
diff
changeset
|
997 (byte-compile-delete-first |
01886d0fea34
(byte-compile-form): Move the calls to byte-compile-set-symbol-position,
Richard M. Stallman <rms@gnu.org>
parents:
58154
diff
changeset
|
998 entry read-symbol-positions-list))) |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
999 (or (and allow-previous (not (= last byte-compile-last-position))) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1000 (> last byte-compile-last-position))))))) |
39769
3bea53c3ecea
(byte-compile-display-log-head-p): New
Gerd Moellmann <gerd@gnu.org>
parents:
39657
diff
changeset
|
1001 |
46576 | 1002 (defvar byte-compile-last-warned-form nil) |
1003 (defvar byte-compile-last-logged-file nil) | |
1004 | |
1005 ;; This is used as warning-prefix for the compiler. | |
47110
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1006 ;; It is always called with the warnings buffer current. |
46576 | 1007 (defun byte-compile-warning-prefix (level entry) |
57518
25bf13fe1c10
(byte-compile-eval): Don't process
Richard M. Stallman <rms@gnu.org>
parents:
57004
diff
changeset
|
1008 (let* ((inhibit-read-only t) |
25bf13fe1c10
(byte-compile-eval): Don't process
Richard M. Stallman <rms@gnu.org>
parents:
57004
diff
changeset
|
1009 (dir default-directory) |
47110
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1010 (file (cond ((stringp byte-compile-current-file) |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1011 (format "%s:" (file-relative-name byte-compile-current-file dir))) |
39769
3bea53c3ecea
(byte-compile-display-log-head-p): New
Gerd Moellmann <gerd@gnu.org>
parents:
39657
diff
changeset
|
1012 ((bufferp byte-compile-current-file) |
40035
2b16a80692ef
Put the *Compile-Log* buffer in `compilation-mode'.
Sam Steingold <sds@gnu.org>
parents:
39852
diff
changeset
|
1013 (format "Buffer %s:" |
39769
3bea53c3ecea
(byte-compile-display-log-head-p): New
Gerd Moellmann <gerd@gnu.org>
parents:
39657
diff
changeset
|
1014 (buffer-name byte-compile-current-file))) |
3bea53c3ecea
(byte-compile-display-log-head-p): New
Gerd Moellmann <gerd@gnu.org>
parents:
39657
diff
changeset
|
1015 (t ""))) |
40035
2b16a80692ef
Put the *Compile-Log* buffer in `compilation-mode'.
Sam Steingold <sds@gnu.org>
parents:
39852
diff
changeset
|
1016 (pos (if (and byte-compile-current-file |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1017 (integerp byte-compile-read-position)) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1018 (with-current-buffer byte-compile-current-buffer |
79488
b8e6a2408b6d
(batch-byte-recompile-directory): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
79231
diff
changeset
|
1019 (format "%d:%d:" |
76463
63e4cb93803a
(byte-compile-warning-prefix): Correctly compute line number.
Richard M. Stallman <rms@gnu.org>
parents:
75836
diff
changeset
|
1020 (save-excursion |
63e4cb93803a
(byte-compile-warning-prefix): Correctly compute line number.
Richard M. Stallman <rms@gnu.org>
parents:
75836
diff
changeset
|
1021 (goto-char byte-compile-last-position) |
63e4cb93803a
(byte-compile-warning-prefix): Correctly compute line number.
Richard M. Stallman <rms@gnu.org>
parents:
75836
diff
changeset
|
1022 (1+ (count-lines (point-min) (point-at-bol)))) |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1023 (save-excursion |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1024 (goto-char byte-compile-last-position) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1025 (1+ (current-column))))) |
39769
3bea53c3ecea
(byte-compile-display-log-head-p): New
Gerd Moellmann <gerd@gnu.org>
parents:
39657
diff
changeset
|
1026 "")) |
47110
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1027 (form (if (eq byte-compile-current-form :end) "end of data" |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1028 (or byte-compile-current-form "toplevel form")))) |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1029 (when (or (and byte-compile-current-file |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1030 (not (equal byte-compile-current-file |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1031 byte-compile-last-logged-file))) |
52534
c8dcd0a4adb3
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
1032 (and byte-compile-current-form |
47110
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1033 (not (eq byte-compile-current-form |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1034 byte-compile-last-warned-form)))) |
46576 | 1035 (insert (format "\nIn %s:\n" form))) |
47110
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1036 (when level |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1037 (insert (format "%s%s" file pos)))) |
32763
5436a18ec371
[the following changes fix a bug where `define-minor-mode' didn't
Miles Bader <miles@gnu.org>
parents:
31882
diff
changeset
|
1038 (setq byte-compile-last-logged-file byte-compile-current-file |
46576 | 1039 byte-compile-last-warned-form byte-compile-current-form) |
1040 entry) | |
757 | 1041 |
47110
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1042 ;; This no-op function is used as the value of warning-series |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1043 ;; to tell inner calls to displaying-byte-compile-warnings |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1044 ;; not to bind warning-series. |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1045 (defun byte-compile-warning-series (&rest ignore) |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1046 nil) |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1047 |
86222
4aed8a9fb626
(compilation-forget-errors): Declare as function.
Glenn Morris <rgm@gnu.org>
parents:
86177
diff
changeset
|
1048 ;; (compile-mode) will cause this to be loaded. |
87112
fd5b69abce98
Remove directory part from filenames in function declarations.
Glenn Morris <rgm@gnu.org>
parents:
87060
diff
changeset
|
1049 (declare-function compilation-forget-errors "compile" ()) |
86222
4aed8a9fb626
(compilation-forget-errors): Declare as function.
Glenn Morris <rgm@gnu.org>
parents:
86177
diff
changeset
|
1050 |
11323
5f75d3e225c1
(byte-compile-log-file): New function.
Richard M. Stallman <rms@gnu.org>
parents:
11253
diff
changeset
|
1051 ;; Log the start of a file in *Compile-Log*, and mark it as done. |
46576 | 1052 ;; Return the position of the start of the page in the log buffer. |
11323
5f75d3e225c1
(byte-compile-log-file): New function.
Richard M. Stallman <rms@gnu.org>
parents:
11253
diff
changeset
|
1053 ;; But do nothing in batch mode. |
5f75d3e225c1
(byte-compile-log-file): New function.
Richard M. Stallman <rms@gnu.org>
parents:
11253
diff
changeset
|
1054 (defun byte-compile-log-file () |
47110
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1055 (and (not (equal byte-compile-current-file byte-compile-last-logged-file)) |
32763
5436a18ec371
[the following changes fix a bug where `define-minor-mode' didn't
Miles Bader <miles@gnu.org>
parents:
31882
diff
changeset
|
1056 (not noninteractive) |
78613
340dd924a553
(byte-compile-log-file, byte-recompile-directory, byte-compile-file)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78217
diff
changeset
|
1057 (with-current-buffer (get-buffer-create "*Compile-Log*") |
11432
f499628d7e5b
(byte-compile-log-file): Always insert at eob.
Richard M. Stallman <rms@gnu.org>
parents:
11323
diff
changeset
|
1058 (goto-char (point-max)) |
57518
25bf13fe1c10
(byte-compile-eval): Don't process
Richard M. Stallman <rms@gnu.org>
parents:
57004
diff
changeset
|
1059 (let* ((inhibit-read-only t) |
25bf13fe1c10
(byte-compile-eval): Don't process
Richard M. Stallman <rms@gnu.org>
parents:
57004
diff
changeset
|
1060 (dir (and byte-compile-current-file |
47110
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1061 (file-name-directory byte-compile-current-file))) |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1062 (was-same (equal default-directory dir)) |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1063 pt) |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1064 (when dir |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1065 (unless was-same |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1066 (insert (format "Leaving directory `%s'\n" default-directory)))) |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1067 (unless (bolp) |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1068 (insert "\n")) |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1069 (setq pt (point-marker)) |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1070 (if byte-compile-current-file |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1071 (insert "\f\nCompiling " |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1072 (if (stringp byte-compile-current-file) |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1073 (concat "file " byte-compile-current-file) |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1074 (concat "buffer " (buffer-name byte-compile-current-file))) |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1075 " at " (current-time-string) "\n") |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1076 (insert "\f\nCompiling no file at " (current-time-string) "\n")) |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1077 (when dir |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1078 (setq default-directory dir) |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1079 (unless was-same |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1080 (insert (format "Entering directory `%s'\n" default-directory)))) |
52568
993d4afcd6d0
(byte-compile-log-file): Clear out byte-compile-last-warned-form.
Richard M. Stallman <rms@gnu.org>
parents:
52534
diff
changeset
|
1081 (setq byte-compile-last-logged-file byte-compile-current-file |
993d4afcd6d0
(byte-compile-log-file): Clear out byte-compile-last-warned-form.
Richard M. Stallman <rms@gnu.org>
parents:
52534
diff
changeset
|
1082 byte-compile-last-warned-form nil) |
50639
c3ba923eb0e9
(byte-compile-log-file, (byte-recompile-directory): Don't use
Richard M. Stallman <rms@gnu.org>
parents:
50618
diff
changeset
|
1083 ;; Do this after setting default-directory. |
84371
5ee0e4e08f91
(byte-compile-log-file): Check major-mode via derived-mode-p.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
83836
diff
changeset
|
1084 (unless (derived-mode-p 'compilation-mode) (compilation-mode)) |
55694
62803bbfc576
(byte-compile-log): Use backquotes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
55077
diff
changeset
|
1085 (compilation-forget-errors) |
46576 | 1086 pt)))) |
1087 | |
1088 ;; Log a message STRING in *Compile-Log*. | |
1089 ;; Also log the current function and file if not already done. | |
1090 (defun byte-compile-log-warning (string &optional fill level) | |
1091 (let ((warning-prefix-function 'byte-compile-warning-prefix) | |
52133
4c112142c56f
(byte-compile-not-obsolete-var): New var.
Richard M. Stallman <rms@gnu.org>
parents:
51737
diff
changeset
|
1092 (warning-type-format "") |
57518
25bf13fe1c10
(byte-compile-eval): Don't process
Richard M. Stallman <rms@gnu.org>
parents:
57004
diff
changeset
|
1093 (warning-fill-prefix (if fill " ")) |
25bf13fe1c10
(byte-compile-eval): Don't process
Richard M. Stallman <rms@gnu.org>
parents:
57004
diff
changeset
|
1094 (inhibit-read-only t)) |
46576 | 1095 (display-warning 'bytecomp string level "*Compile-Log*"))) |
11323
5f75d3e225c1
(byte-compile-log-file): New function.
Richard M. Stallman <rms@gnu.org>
parents:
11253
diff
changeset
|
1096 |
757 | 1097 (defun byte-compile-warn (format &rest args) |
46576 | 1098 "Issue a byte compiler warning; use (format FORMAT ARGS...) for message." |
757 | 1099 (setq format (apply 'format format args)) |
1100 (if byte-compile-error-on-warn | |
1101 (error "%s" format) ; byte-compile-file catches and logs it | |
46576 | 1102 (byte-compile-log-warning format t :warning))) |
1103 | |
94355
b5f8ef4e3358
(byte-compile-warn-obsolete): New function.
Glenn Morris <rgm@gnu.org>
parents:
93457
diff
changeset
|
1104 (defun byte-compile-warn-obsolete (symbol) |
b5f8ef4e3358
(byte-compile-warn-obsolete): New function.
Glenn Morris <rgm@gnu.org>
parents:
93457
diff
changeset
|
1105 "Warn that SYMBOL (a variable or function) is obsolete." |
b5f8ef4e3358
(byte-compile-warn-obsolete): New function.
Glenn Morris <rgm@gnu.org>
parents:
93457
diff
changeset
|
1106 (when (byte-compile-warning-enabled-p 'obsolete) |
b5f8ef4e3358
(byte-compile-warn-obsolete): New function.
Glenn Morris <rgm@gnu.org>
parents:
93457
diff
changeset
|
1107 (let* ((funcp (get symbol 'byte-obsolete-info)) |
b5f8ef4e3358
(byte-compile-warn-obsolete): New function.
Glenn Morris <rgm@gnu.org>
parents:
93457
diff
changeset
|
1108 (obsolete (or funcp (get symbol 'byte-obsolete-variable))) |
b5f8ef4e3358
(byte-compile-warn-obsolete): New function.
Glenn Morris <rgm@gnu.org>
parents:
93457
diff
changeset
|
1109 (instead (car obsolete)) |
b5f8ef4e3358
(byte-compile-warn-obsolete): New function.
Glenn Morris <rgm@gnu.org>
parents:
93457
diff
changeset
|
1110 (asof (if funcp (nth 2 obsolete) (cdr obsolete)))) |
b5f8ef4e3358
(byte-compile-warn-obsolete): New function.
Glenn Morris <rgm@gnu.org>
parents:
93457
diff
changeset
|
1111 (byte-compile-warn "`%s' is an obsolete %s%s%s" symbol |
b5f8ef4e3358
(byte-compile-warn-obsolete): New function.
Glenn Morris <rgm@gnu.org>
parents:
93457
diff
changeset
|
1112 (if funcp "function" "variable") |
b5f8ef4e3358
(byte-compile-warn-obsolete): New function.
Glenn Morris <rgm@gnu.org>
parents:
93457
diff
changeset
|
1113 (if asof (concat " (as of Emacs " asof ")") "") |
b5f8ef4e3358
(byte-compile-warn-obsolete): New function.
Glenn Morris <rgm@gnu.org>
parents:
93457
diff
changeset
|
1114 (cond ((stringp instead) |
b5f8ef4e3358
(byte-compile-warn-obsolete): New function.
Glenn Morris <rgm@gnu.org>
parents:
93457
diff
changeset
|
1115 (concat "; " instead)) |
b5f8ef4e3358
(byte-compile-warn-obsolete): New function.
Glenn Morris <rgm@gnu.org>
parents:
93457
diff
changeset
|
1116 (instead |
b5f8ef4e3358
(byte-compile-warn-obsolete): New function.
Glenn Morris <rgm@gnu.org>
parents:
93457
diff
changeset
|
1117 (format "; use `%s' instead." instead)) |
b5f8ef4e3358
(byte-compile-warn-obsolete): New function.
Glenn Morris <rgm@gnu.org>
parents:
93457
diff
changeset
|
1118 (t ".")))))) |
b5f8ef4e3358
(byte-compile-warn-obsolete): New function.
Glenn Morris <rgm@gnu.org>
parents:
93457
diff
changeset
|
1119 |
922 | 1120 (defun byte-compile-report-error (error-info) |
46576 | 1121 "Report Lisp error in compilation. ERROR-INFO is the error data." |
1129 | 1122 (setq byte-compiler-error-flag t) |
46576 | 1123 (byte-compile-log-warning |
1124 (error-message-string error-info) | |
1125 nil :error)) | |
922 | 1126 |
757 | 1127 ;;; Used by make-obsolete. |
1128 (defun byte-compile-obsolete (form) | |
94355
b5f8ef4e3358
(byte-compile-warn-obsolete): New function.
Glenn Morris <rgm@gnu.org>
parents:
93457
diff
changeset
|
1129 (byte-compile-set-symbol-position (car form)) |
b5f8ef4e3358
(byte-compile-warn-obsolete): New function.
Glenn Morris <rgm@gnu.org>
parents:
93457
diff
changeset
|
1130 (byte-compile-warn-obsolete (car form)) |
b5f8ef4e3358
(byte-compile-warn-obsolete): New function.
Glenn Morris <rgm@gnu.org>
parents:
93457
diff
changeset
|
1131 (funcall (or (cadr (get (car form) 'byte-obsolete-info)) ; handler |
b5f8ef4e3358
(byte-compile-warn-obsolete): New function.
Glenn Morris <rgm@gnu.org>
parents:
93457
diff
changeset
|
1132 'byte-compile-normal-call) form)) |
757 | 1133 |
1134 ;; Compiler options | |
1135 | |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1136 ;; (defvar byte-compiler-valid-options |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1137 ;; '((optimize byte-optimize (t nil source byte) val) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1138 ;; (file-format byte-compile-compatibility (emacs18 emacs19) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1139 ;; (eq val 'emacs18)) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1140 ;; ;; (new-bytecodes byte-compile-generate-emacs19-bytecodes (t nil) val) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1141 ;; (delete-errors byte-compile-delete-errors (t nil) val) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1142 ;; (verbose byte-compile-verbose (t nil) val) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1143 ;; (warnings byte-compile-warnings ((callargs redefine free-vars unresolved)) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1144 ;; val))) |
757 | 1145 |
1146 ;; Inhibit v18/v19 selectors if the version is hardcoded. | |
28402 | 1147 ;; #### This should print a warning if the user tries to change something |
757 | 1148 ;; than can't be changed because the running compiler doesn't support it. |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1149 ;; (cond |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1150 ;; ((byte-compile-single-version) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1151 ;; (setcar (cdr (cdr (assq 'new-bytecodes byte-compiler-valid-options))) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1152 ;; (list (byte-compile-version-cond |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1153 ;; byte-compile-generate-emacs19-bytecodes))) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1154 ;; (setcar (cdr (cdr (assq 'file-format byte-compiler-valid-options))) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1155 ;; (if (byte-compile-version-cond byte-compile-compatibility) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1156 ;; '(emacs18) '(emacs19))))) |
757 | 1157 |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1158 ;; (defun byte-compiler-options-handler (&rest args) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1159 ;; (let (key val desc choices) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1160 ;; (while args |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1161 ;; (if (or (atom (car args)) (nthcdr 2 (car args)) (null (cdr (car args)))) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1162 ;; (error "Malformed byte-compiler option `%s'" (car args))) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1163 ;; (setq key (car (car args)) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1164 ;; val (car (cdr (car args))) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1165 ;; desc (assq key byte-compiler-valid-options)) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1166 ;; (or desc |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1167 ;; (error "Unknown byte-compiler option `%s'" key)) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1168 ;; (setq choices (nth 2 desc)) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1169 ;; (if (consp (car choices)) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1170 ;; (let (this |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1171 ;; (handler 'cons) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1172 ;; (ret (and (memq (car val) '(+ -)) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1173 ;; (copy-sequence (if (eq t (symbol-value (nth 1 desc))) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1174 ;; choices |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1175 ;; (symbol-value (nth 1 desc))))))) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1176 ;; (setq choices (car choices)) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1177 ;; (while val |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1178 ;; (setq this (car val)) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1179 ;; (cond ((memq this choices) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1180 ;; (setq ret (funcall handler this ret))) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1181 ;; ((eq this '+) (setq handler 'cons)) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1182 ;; ((eq this '-) (setq handler 'delq)) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1183 ;; ((error "`%s' only accepts %s" key choices))) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1184 ;; (setq val (cdr val))) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1185 ;; (set (nth 1 desc) ret)) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1186 ;; (or (memq val choices) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1187 ;; (error "`%s' must be one of `%s'" key choices)) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1188 ;; (set (nth 1 desc) (eval (nth 3 desc)))) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1189 ;; (setq args (cdr args))) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1190 ;; nil)) |
757 | 1191 |
1192 ;;; sanity-checking arglists | |
1193 | |
58073
9412413950a3
(byte-compile-defalias):
Richard M. Stallman <rms@gnu.org>
parents:
57881
diff
changeset
|
1194 ;; If a function has an entry saying (FUNCTION . t). |
9412413950a3
(byte-compile-defalias):
Richard M. Stallman <rms@gnu.org>
parents:
57881
diff
changeset
|
1195 ;; that means we know it is defined but we don't know how. |
9412413950a3
(byte-compile-defalias):
Richard M. Stallman <rms@gnu.org>
parents:
57881
diff
changeset
|
1196 ;; If a function has an entry saying (FUNCTION . nil), |
9412413950a3
(byte-compile-defalias):
Richard M. Stallman <rms@gnu.org>
parents:
57881
diff
changeset
|
1197 ;; that means treat it as not defined. |
757 | 1198 (defun byte-compile-fdefinition (name macro-p) |
1199 (let* ((list (if macro-p | |
1200 byte-compile-macro-environment | |
8086
9f6348616e4d
(byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents:
7298
diff
changeset
|
1201 byte-compile-function-environment)) |
757 | 1202 (env (cdr (assq name list)))) |
1203 (or env | |
1204 (let ((fn name)) | |
1205 (while (and (symbolp fn) | |
1206 (fboundp fn) | |
1207 (or (symbolp (symbol-function fn)) | |
1208 (consp (symbol-function fn)) | |
1209 (and (not macro-p) | |
1819
df06a60f3362
* disass.el (disassemble): Add autoload cookie for this.
Jim Blandy <jimb@redhat.com>
parents:
1604
diff
changeset
|
1210 (byte-code-function-p (symbol-function fn))))) |
757 | 1211 (setq fn (symbol-function fn))) |
1819
df06a60f3362
* disass.el (disassemble): Add autoload cookie for this.
Jim Blandy <jimb@redhat.com>
parents:
1604
diff
changeset
|
1212 (if (and (not macro-p) (byte-code-function-p fn)) |
757 | 1213 fn |
1214 (and (consp fn) | |
1215 (if (eq 'macro (car fn)) | |
1216 (cdr fn) | |
1217 (if macro-p | |
1218 nil | |
1219 (if (eq 'autoload (car fn)) | |
1220 nil | |
1221 fn))))))))) | |
1222 | |
1223 (defun byte-compile-arglist-signature (arglist) | |
1224 (let ((args 0) | |
1225 opts | |
1226 restp) | |
1227 (while arglist | |
1228 (cond ((eq (car arglist) '&optional) | |
1229 (or opts (setq opts 0))) | |
1230 ((eq (car arglist) '&rest) | |
1231 (if (cdr arglist) | |
1232 (setq restp t | |
1233 arglist nil))) | |
1234 (t | |
1235 (if opts | |
1236 (setq opts (1+ opts)) | |
1237 (setq args (1+ args))))) | |
1238 (setq arglist (cdr arglist))) | |
1239 (cons args (if restp nil (if opts (+ args opts) args))))) | |
1240 | |
1241 | |
1242 (defun byte-compile-arglist-signatures-congruent-p (old new) | |
1243 (not (or | |
1244 (> (car new) (car old)) ; requires more args now | |
14040 | 1245 (and (null (cdr old)) ; took rest-args, doesn't any more |
757 | 1246 (cdr new)) |
1247 (and (cdr new) (cdr old) ; can't take as many args now | |
1248 (< (cdr new) (cdr old))) | |
1249 ))) | |
1250 | |
1251 (defun byte-compile-arglist-signature-string (signature) | |
1252 (cond ((null (cdr signature)) | |
1253 (format "%d+" (car signature))) | |
1254 ((= (car signature) (cdr signature)) | |
1255 (format "%d" (car signature))) | |
1256 (t (format "%d-%d" (car signature) (cdr signature))))) | |
1257 | |
1258 | |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1259 ;; Warn if the form is calling a function with the wrong number of arguments. |
757 | 1260 (defun byte-compile-callargs-warn (form) |
1261 (let* ((def (or (byte-compile-fdefinition (car form) nil) | |
1262 (byte-compile-fdefinition (car form) t))) | |
58073
9412413950a3
(byte-compile-defalias):
Richard M. Stallman <rms@gnu.org>
parents:
57881
diff
changeset
|
1263 (sig (if (and def (not (eq def t))) |
29239
86949998e6fd
(byte-compile-callargs-warn): Use subr-arity to check primitives.
Dave Love <fx@gnu.org>
parents:
28441
diff
changeset
|
1264 (byte-compile-arglist-signature |
86177
fadd23918501
(byte-compile-declare-function): New function, byte-hunk-handler for
Glenn Morris <rgm@gnu.org>
parents:
86003
diff
changeset
|
1265 (if (memq (car-safe def) '(declared lambda)) |
29239
86949998e6fd
(byte-compile-callargs-warn): Use subr-arity to check primitives.
Dave Love <fx@gnu.org>
parents:
28441
diff
changeset
|
1266 (nth 1 def) |
86949998e6fd
(byte-compile-callargs-warn): Use subr-arity to check primitives.
Dave Love <fx@gnu.org>
parents:
28441
diff
changeset
|
1267 (if (byte-code-function-p def) |
86949998e6fd
(byte-compile-callargs-warn): Use subr-arity to check primitives.
Dave Love <fx@gnu.org>
parents:
28441
diff
changeset
|
1268 (aref def 0) |
86949998e6fd
(byte-compile-callargs-warn): Use subr-arity to check primitives.
Dave Love <fx@gnu.org>
parents:
28441
diff
changeset
|
1269 '(&rest def)))) |
86949998e6fd
(byte-compile-callargs-warn): Use subr-arity to check primitives.
Dave Love <fx@gnu.org>
parents:
28441
diff
changeset
|
1270 (if (and (fboundp (car form)) |
86949998e6fd
(byte-compile-callargs-warn): Use subr-arity to check primitives.
Dave Love <fx@gnu.org>
parents:
28441
diff
changeset
|
1271 (subrp (symbol-function (car form)))) |
86949998e6fd
(byte-compile-callargs-warn): Use subr-arity to check primitives.
Dave Love <fx@gnu.org>
parents:
28441
diff
changeset
|
1272 (subr-arity (symbol-function (car form)))))) |
757 | 1273 (ncall (length (cdr form)))) |
29239
86949998e6fd
(byte-compile-callargs-warn): Use subr-arity to check primitives.
Dave Love <fx@gnu.org>
parents:
28441
diff
changeset
|
1274 ;; Check many or unevalled from subr-arity. |
86949998e6fd
(byte-compile-callargs-warn): Use subr-arity to check primitives.
Dave Love <fx@gnu.org>
parents:
28441
diff
changeset
|
1275 (if (and (cdr-safe sig) |
86949998e6fd
(byte-compile-callargs-warn): Use subr-arity to check primitives.
Dave Love <fx@gnu.org>
parents:
28441
diff
changeset
|
1276 (not (numberp (cdr sig)))) |
86949998e6fd
(byte-compile-callargs-warn): Use subr-arity to check primitives.
Dave Love <fx@gnu.org>
parents:
28441
diff
changeset
|
1277 (setcdr sig nil)) |
757 | 1278 (if sig |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1279 (when (or (< ncall (car sig)) |
757 | 1280 (and (cdr sig) (> ncall (cdr sig)))) |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1281 (byte-compile-set-symbol-position (car form)) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1282 (byte-compile-warn |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1283 "%s called with %d argument%s, but %s %s" |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1284 (car form) ncall |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1285 (if (= 1 ncall) "" "s") |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1286 (if (< ncall (car sig)) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1287 "requires" |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1288 "accepts only") |
46003
503e1f14ba3d
(byte-compile-callargs-warn):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45842
diff
changeset
|
1289 (byte-compile-arglist-signature-string sig)))) |
53753
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
1290 (byte-compile-format-warn form) |
46003
503e1f14ba3d
(byte-compile-callargs-warn):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45842
diff
changeset
|
1291 ;; Check to see if the function will be available at runtime |
503e1f14ba3d
(byte-compile-callargs-warn):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45842
diff
changeset
|
1292 ;; and/or remember its arity if it's unknown. |
58073
9412413950a3
(byte-compile-defalias):
Richard M. Stallman <rms@gnu.org>
parents:
57881
diff
changeset
|
1293 (or (and (or def (fboundp (car form))) ; might be a subr or autoload. |
53753
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
1294 (not (memq (car form) byte-compile-noruntime-functions))) |
46003
503e1f14ba3d
(byte-compile-callargs-warn):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45842
diff
changeset
|
1295 (eq (car form) byte-compile-current-form) ; ## this doesn't work |
503e1f14ba3d
(byte-compile-callargs-warn):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45842
diff
changeset
|
1296 ; with recursion. |
503e1f14ba3d
(byte-compile-callargs-warn):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45842
diff
changeset
|
1297 ;; It's a currently-undefined function. |
503e1f14ba3d
(byte-compile-callargs-warn):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45842
diff
changeset
|
1298 ;; Remember number of args in call. |
503e1f14ba3d
(byte-compile-callargs-warn):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45842
diff
changeset
|
1299 (let ((cons (assq (car form) byte-compile-unresolved-functions)) |
503e1f14ba3d
(byte-compile-callargs-warn):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45842
diff
changeset
|
1300 (n (length (cdr form)))) |
503e1f14ba3d
(byte-compile-callargs-warn):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45842
diff
changeset
|
1301 (if cons |
503e1f14ba3d
(byte-compile-callargs-warn):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45842
diff
changeset
|
1302 (or (memq n (cdr cons)) |
503e1f14ba3d
(byte-compile-callargs-warn):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45842
diff
changeset
|
1303 (setcdr cons (cons n (cdr cons)))) |
58154 | 1304 (push (list (car form) n) |
1305 byte-compile-unresolved-functions)))))) | |
757 | 1306 |
53753
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
1307 (defun byte-compile-format-warn (form) |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
1308 "Warn if FORM is `format'-like with inconsistent args. |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
1309 Applies if head of FORM is a symbol with non-nil property |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
1310 `byte-compile-format-like' and first arg is a constant string. |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
1311 Then check the number of format fields matches the number of |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
1312 extra args." |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
1313 (when (and (symbolp (car form)) |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
1314 (stringp (nth 1 form)) |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
1315 (get (car form) 'byte-compile-format-like)) |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
1316 (let ((nfields (with-temp-buffer |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
1317 (insert (nth 1 form)) |
81333
fc32f1336974
(byte-compile-current-group): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81295
diff
changeset
|
1318 (goto-char (point-min)) |
53753
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
1319 (let ((n 0)) |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
1320 (while (re-search-forward "%." nil t) |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
1321 (unless (eq ?% (char-after (1+ (match-beginning 0)))) |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
1322 (setq n (1+ n)))) |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
1323 n))) |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
1324 (nargs (- (length form) 2))) |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
1325 (unless (= nargs nfields) |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
1326 (byte-compile-warn |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
1327 "`%s' called with %d args to fill %d format field(s)" (car form) |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
1328 nargs nfields))))) |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
1329 |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
1330 (dolist (elt '(format message error)) |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
1331 (put elt 'byte-compile-format-like t)) |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
1332 |
62319
150380a7c3d6
(byte-compile-nogroup-warn): New function.
Richard M. Stallman <rms@gnu.org>
parents:
61966
diff
changeset
|
1333 ;; Warn if a custom definition fails to specify :group. |
150380a7c3d6
(byte-compile-nogroup-warn): New function.
Richard M. Stallman <rms@gnu.org>
parents:
61966
diff
changeset
|
1334 (defun byte-compile-nogroup-warn (form) |
95642
1b0cbcea87b2
(byte-compile-current-group): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
1335 (if (and (memq (car form) '(custom-declare-face custom-declare-variable)) |
1b0cbcea87b2
(byte-compile-current-group): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
1336 byte-compile-current-group) |
1b0cbcea87b2
(byte-compile-current-group): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
1337 ;; The group will be provided implicitly. |
1b0cbcea87b2
(byte-compile-current-group): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
1338 nil |
1b0cbcea87b2
(byte-compile-current-group): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
1339 (let ((keyword-args (cdr (cdr (cdr (cdr form))))) |
1b0cbcea87b2
(byte-compile-current-group): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
1340 (name (cadr form))) |
1b0cbcea87b2
(byte-compile-current-group): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
1341 (or (not (eq (car-safe name) 'quote)) |
81427
9445d2ed7385
(byte-compile-current-group, byte-compile-nogroup-warn, byte-compile-file):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81333
diff
changeset
|
1342 (and (eq (car form) 'custom-declare-group) |
9445d2ed7385
(byte-compile-current-group, byte-compile-nogroup-warn, byte-compile-file):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81333
diff
changeset
|
1343 (equal name ''emacs)) |
9445d2ed7385
(byte-compile-current-group, byte-compile-nogroup-warn, byte-compile-file):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81333
diff
changeset
|
1344 (plist-get keyword-args :group) |
9445d2ed7385
(byte-compile-current-group, byte-compile-nogroup-warn, byte-compile-file):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81333
diff
changeset
|
1345 (not (and (consp name) (eq (car name) 'quote))) |
9445d2ed7385
(byte-compile-current-group, byte-compile-nogroup-warn, byte-compile-file):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81333
diff
changeset
|
1346 (byte-compile-warn |
9445d2ed7385
(byte-compile-current-group, byte-compile-nogroup-warn, byte-compile-file):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81333
diff
changeset
|
1347 "%s for `%s' fails to specify containing group" |
9445d2ed7385
(byte-compile-current-group, byte-compile-nogroup-warn, byte-compile-file):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81333
diff
changeset
|
1348 (cdr (assq (car form) |
95642
1b0cbcea87b2
(byte-compile-current-group): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
1349 '((custom-declare-group . defgroup) |
1b0cbcea87b2
(byte-compile-current-group): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
1350 (custom-declare-face . defface) |
1b0cbcea87b2
(byte-compile-current-group): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
1351 (custom-declare-variable . defcustom)))) |
1b0cbcea87b2
(byte-compile-current-group): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
1352 (cadr name))) |
1b0cbcea87b2
(byte-compile-current-group): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
1353 ;; Update the current group, if needed. |
1b0cbcea87b2
(byte-compile-current-group): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
1354 (if (and byte-compile-current-file ;Only when byte-compiling a whole file. |
1b0cbcea87b2
(byte-compile-current-group): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
1355 (eq (car form) 'custom-declare-group) |
1b0cbcea87b2
(byte-compile-current-group): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
1356 (eq (car-safe name) 'quote)) |
1b0cbcea87b2
(byte-compile-current-group): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
1357 (setq byte-compile-current-group (cadr name)))))) |
62319
150380a7c3d6
(byte-compile-nogroup-warn): New function.
Richard M. Stallman <rms@gnu.org>
parents:
61966
diff
changeset
|
1358 |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1359 ;; Warn if the function or macro is being redefined with a different |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1360 ;; number of arguments. |
757 | 1361 (defun byte-compile-arglist-warn (form macrop) |
1362 (let ((old (byte-compile-fdefinition (nth 1 form) macrop))) | |
58073
9412413950a3
(byte-compile-defalias):
Richard M. Stallman <rms@gnu.org>
parents:
57881
diff
changeset
|
1363 (if (and old (not (eq old t))) |
757 | 1364 (let ((sig1 (byte-compile-arglist-signature |
1365 (if (eq 'lambda (car-safe old)) | |
1366 (nth 1 old) | |
10235
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1367 (if (byte-code-function-p old) |
8086
9f6348616e4d
(byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents:
7298
diff
changeset
|
1368 (aref old 0) |
9f6348616e4d
(byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents:
7298
diff
changeset
|
1369 '(&rest def))))) |
757 | 1370 (sig2 (byte-compile-arglist-signature (nth 2 form)))) |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1371 (unless (byte-compile-arglist-signatures-congruent-p sig1 sig2) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1372 (byte-compile-set-symbol-position (nth 1 form)) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1373 (byte-compile-warn |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1374 "%s %s used to take %s %s, now takes %s" |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1375 (if (eq (car form) 'defun) "function" "macro") |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1376 (nth 1 form) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1377 (byte-compile-arglist-signature-string sig1) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1378 (if (equal sig1 '(1 . 1)) "argument" "arguments") |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1379 (byte-compile-arglist-signature-string sig2)))) |
757 | 1380 ;; This is the first definition. See if previous calls are compatible. |
1381 (let ((calls (assq (nth 1 form) byte-compile-unresolved-functions)) | |
1382 nums sig min max) | |
1383 (if calls | |
1384 (progn | |
1385 (setq sig (byte-compile-arglist-signature (nth 2 form)) | |
1386 nums (sort (copy-sequence (cdr calls)) (function <)) | |
1387 min (car nums) | |
1388 max (car (nreverse nums))) | |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1389 (when (or (< min (car sig)) |
757 | 1390 (and (cdr sig) (> max (cdr sig)))) |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1391 (byte-compile-set-symbol-position (nth 1 form)) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1392 (byte-compile-warn |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1393 "%s being defined to take %s%s, but was previously called with %s" |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1394 (nth 1 form) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1395 (byte-compile-arglist-signature-string sig) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1396 (if (equal sig '(1 . 1)) " arg" " args") |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1397 (byte-compile-arglist-signature-string (cons min max)))) |
40035
2b16a80692ef
Put the *Compile-Log* buffer in `compilation-mode'.
Sam Steingold <sds@gnu.org>
parents:
39852
diff
changeset
|
1398 |
757 | 1399 (setq byte-compile-unresolved-functions |
1400 (delq calls byte-compile-unresolved-functions))))) | |
1401 ))) | |
1402 | |
46657
04d87f195cd1
(byte-compile-cl-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
46576
diff
changeset
|
1403 (defvar byte-compile-cl-functions nil |
04d87f195cd1
(byte-compile-cl-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
46576
diff
changeset
|
1404 "List of functions defined in CL.") |
04d87f195cd1
(byte-compile-cl-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
46576
diff
changeset
|
1405 |
04d87f195cd1
(byte-compile-cl-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
46576
diff
changeset
|
1406 (defun byte-compile-find-cl-functions () |
04d87f195cd1
(byte-compile-cl-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
46576
diff
changeset
|
1407 (unless byte-compile-cl-functions |
04d87f195cd1
(byte-compile-cl-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
46576
diff
changeset
|
1408 (dolist (elt load-history) |
46763
4dff8f2c0a4e
(byte-compile-find-cl-functions):
Richard M. Stallman <rms@gnu.org>
parents:
46690
diff
changeset
|
1409 (when (and (stringp (car elt)) |
81295
26b46295877f
(byte-compile-find-cl-functions): Match
Martin Rudalics <rudalics@gmx.at>
parents:
81217
diff
changeset
|
1410 (string-match |
26b46295877f
(byte-compile-find-cl-functions): Match
Martin Rudalics <rudalics@gmx.at>
parents:
81217
diff
changeset
|
1411 "^cl\\>" (file-name-nondirectory (car elt)))) |
94386
a674a09b0ac8
Johan Bockg? <bojohan at gnu.org>
Glenn Morris <rgm@gnu.org>
parents:
94355
diff
changeset
|
1412 (dolist (e (cdr elt)) |
a674a09b0ac8
Johan Bockg? <bojohan at gnu.org>
Glenn Morris <rgm@gnu.org>
parents:
94355
diff
changeset
|
1413 (when (memq (car-safe e) '(autoload defun)) |
a674a09b0ac8
Johan Bockg? <bojohan at gnu.org>
Glenn Morris <rgm@gnu.org>
parents:
94355
diff
changeset
|
1414 (push (cdr e) byte-compile-cl-functions))))))) |
46657
04d87f195cd1
(byte-compile-cl-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
46576
diff
changeset
|
1415 |
46136
79f132657570
(byte-compile-warning-types):
Richard M. Stallman <rms@gnu.org>
parents:
46050
diff
changeset
|
1416 (defun byte-compile-cl-warn (form) |
79f132657570
(byte-compile-warning-types):
Richard M. Stallman <rms@gnu.org>
parents:
46050
diff
changeset
|
1417 "Warn if FORM is a call of a function from the CL package." |
46657
04d87f195cd1
(byte-compile-cl-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
46576
diff
changeset
|
1418 (let ((func (car-safe form))) |
04d87f195cd1
(byte-compile-cl-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
46576
diff
changeset
|
1419 (if (and byte-compile-cl-functions |
04d87f195cd1
(byte-compile-cl-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
46576
diff
changeset
|
1420 (memq func byte-compile-cl-functions) |
53753
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
1421 ;; Aliases which won't have been expanded at this point. |
46136
79f132657570
(byte-compile-warning-types):
Richard M. Stallman <rms@gnu.org>
parents:
46050
diff
changeset
|
1422 ;; These aren't all aliases of subrs, so not trivial to |
79f132657570
(byte-compile-warning-types):
Richard M. Stallman <rms@gnu.org>
parents:
46050
diff
changeset
|
1423 ;; avoid hardwiring the list. |
79f132657570
(byte-compile-warning-types):
Richard M. Stallman <rms@gnu.org>
parents:
46050
diff
changeset
|
1424 (not (memq func |
46568
a9a03aa7ba8a
(byte-compile-cl-warn): Delete `values'
Richard M. Stallman <rms@gnu.org>
parents:
46536
diff
changeset
|
1425 '(cl-block-wrapper cl-block-throw |
a9a03aa7ba8a
(byte-compile-cl-warn): Delete `values'
Richard M. Stallman <rms@gnu.org>
parents:
46536
diff
changeset
|
1426 multiple-value-call nth-value |
46657
04d87f195cd1
(byte-compile-cl-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
46576
diff
changeset
|
1427 copy-seq first second rest endp cl-member |
48719
0cc3c6bc6da0
(byte-compile-eval): Handle (t . SYMBOL) elements in load-history.
Richard M. Stallman <rms@gnu.org>
parents:
48468
diff
changeset
|
1428 ;; These are included in generated code |
0cc3c6bc6da0
(byte-compile-eval): Handle (t . SYMBOL) elements in load-history.
Richard M. Stallman <rms@gnu.org>
parents:
48468
diff
changeset
|
1429 ;; that can't be called except at compile time |
0cc3c6bc6da0
(byte-compile-eval): Handle (t . SYMBOL) elements in load-history.
Richard M. Stallman <rms@gnu.org>
parents:
48468
diff
changeset
|
1430 ;; or unless cl is loaded anyway. |
0cc3c6bc6da0
(byte-compile-eval): Handle (t . SYMBOL) elements in load-history.
Richard M. Stallman <rms@gnu.org>
parents:
48468
diff
changeset
|
1431 cl-defsubst-expand cl-struct-setf-expander |
47107
747c4a00be3e
(byte-compile-log-file): Use \f.
Richard M. Stallman <rms@gnu.org>
parents:
46763
diff
changeset
|
1432 ;; These would sometimes be warned about |
747c4a00be3e
(byte-compile-log-file): Use \f.
Richard M. Stallman <rms@gnu.org>
parents:
46763
diff
changeset
|
1433 ;; but such warnings are never useful, |
747c4a00be3e
(byte-compile-log-file): Use \f.
Richard M. Stallman <rms@gnu.org>
parents:
46763
diff
changeset
|
1434 ;; so don't warn about them. |
50727
bd043e09b74c
(byte-compile-cl-warn): Avoid cl warnings
Dave Love <fx@gnu.org>
parents:
50682
diff
changeset
|
1435 macroexpand cl-macroexpand-all |
bd043e09b74c
(byte-compile-cl-warn): Avoid cl warnings
Dave Love <fx@gnu.org>
parents:
50682
diff
changeset
|
1436 cl-compiling-file))) |
bd043e09b74c
(byte-compile-cl-warn): Avoid cl warnings
Dave Love <fx@gnu.org>
parents:
50682
diff
changeset
|
1437 ;; Avoid warnings for things which are safe because they |
bd043e09b74c
(byte-compile-cl-warn): Avoid cl warnings
Dave Love <fx@gnu.org>
parents:
50682
diff
changeset
|
1438 ;; have suitable compiler macros, but those aren't |
bd043e09b74c
(byte-compile-cl-warn): Avoid cl warnings
Dave Love <fx@gnu.org>
parents:
50682
diff
changeset
|
1439 ;; expanded at this stage. There should probably be more |
bd043e09b74c
(byte-compile-cl-warn): Avoid cl warnings
Dave Love <fx@gnu.org>
parents:
50682
diff
changeset
|
1440 ;; here than caaar and friends. |
bd043e09b74c
(byte-compile-cl-warn): Avoid cl warnings
Dave Love <fx@gnu.org>
parents:
50682
diff
changeset
|
1441 (not (and (eq (get func 'byte-compile) |
bd043e09b74c
(byte-compile-cl-warn): Avoid cl warnings
Dave Love <fx@gnu.org>
parents:
50682
diff
changeset
|
1442 'cl-byte-compile-compiler-macro) |
50729
680d6365cfea
(byte-compile-cl-warn): Use `string-match'.
John Paul Wallington <jpw@pobox.com>
parents:
50727
diff
changeset
|
1443 (string-match "\\`c[ad]+r\\'" (symbol-name func))))) |
46136
79f132657570
(byte-compile-warning-types):
Richard M. Stallman <rms@gnu.org>
parents:
46050
diff
changeset
|
1444 (byte-compile-warn "Function `%s' from cl package called at runtime" |
79f132657570
(byte-compile-warning-types):
Richard M. Stallman <rms@gnu.org>
parents:
46050
diff
changeset
|
1445 func))) |
79f132657570
(byte-compile-warning-types):
Richard M. Stallman <rms@gnu.org>
parents:
46050
diff
changeset
|
1446 form) |
79f132657570
(byte-compile-warning-types):
Richard M. Stallman <rms@gnu.org>
parents:
46050
diff
changeset
|
1447 |
28295
8082575fec24
(byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
27824
diff
changeset
|
1448 (defun byte-compile-print-syms (str1 strn syms) |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1449 (when syms |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1450 (byte-compile-set-symbol-position (car syms) t)) |
39769
3bea53c3ecea
(byte-compile-display-log-head-p): New
Gerd Moellmann <gerd@gnu.org>
parents:
39657
diff
changeset
|
1451 (cond ((and (cdr syms) (not noninteractive)) |
3bea53c3ecea
(byte-compile-display-log-head-p): New
Gerd Moellmann <gerd@gnu.org>
parents:
39657
diff
changeset
|
1452 (let* ((str strn) |
3bea53c3ecea
(byte-compile-display-log-head-p): New
Gerd Moellmann <gerd@gnu.org>
parents:
39657
diff
changeset
|
1453 (L (length str)) |
3bea53c3ecea
(byte-compile-display-log-head-p): New
Gerd Moellmann <gerd@gnu.org>
parents:
39657
diff
changeset
|
1454 s) |
3bea53c3ecea
(byte-compile-display-log-head-p): New
Gerd Moellmann <gerd@gnu.org>
parents:
39657
diff
changeset
|
1455 (while syms |
3bea53c3ecea
(byte-compile-display-log-head-p): New
Gerd Moellmann <gerd@gnu.org>
parents:
39657
diff
changeset
|
1456 (setq s (symbol-name (pop syms)) |
3bea53c3ecea
(byte-compile-display-log-head-p): New
Gerd Moellmann <gerd@gnu.org>
parents:
39657
diff
changeset
|
1457 L (+ L (length s) 2)) |
3bea53c3ecea
(byte-compile-display-log-head-p): New
Gerd Moellmann <gerd@gnu.org>
parents:
39657
diff
changeset
|
1458 (if (< L (1- fill-column)) |
3bea53c3ecea
(byte-compile-display-log-head-p): New
Gerd Moellmann <gerd@gnu.org>
parents:
39657
diff
changeset
|
1459 (setq str (concat str " " s (and syms ","))) |
3bea53c3ecea
(byte-compile-display-log-head-p): New
Gerd Moellmann <gerd@gnu.org>
parents:
39657
diff
changeset
|
1460 (setq str (concat str "\n " s (and syms ",")) |
3bea53c3ecea
(byte-compile-display-log-head-p): New
Gerd Moellmann <gerd@gnu.org>
parents:
39657
diff
changeset
|
1461 L (+ (length s) 4)))) |
3bea53c3ecea
(byte-compile-display-log-head-p): New
Gerd Moellmann <gerd@gnu.org>
parents:
39657
diff
changeset
|
1462 (byte-compile-warn "%s" str))) |
3bea53c3ecea
(byte-compile-display-log-head-p): New
Gerd Moellmann <gerd@gnu.org>
parents:
39657
diff
changeset
|
1463 ((cdr syms) |
40035
2b16a80692ef
Put the *Compile-Log* buffer in `compilation-mode'.
Sam Steingold <sds@gnu.org>
parents:
39852
diff
changeset
|
1464 (byte-compile-warn "%s %s" |
39769
3bea53c3ecea
(byte-compile-display-log-head-p): New
Gerd Moellmann <gerd@gnu.org>
parents:
39657
diff
changeset
|
1465 strn |
3bea53c3ecea
(byte-compile-display-log-head-p): New
Gerd Moellmann <gerd@gnu.org>
parents:
39657
diff
changeset
|
1466 (mapconcat #'symbol-name syms ", "))) |
3bea53c3ecea
(byte-compile-display-log-head-p): New
Gerd Moellmann <gerd@gnu.org>
parents:
39657
diff
changeset
|
1467 |
3bea53c3ecea
(byte-compile-display-log-head-p): New
Gerd Moellmann <gerd@gnu.org>
parents:
39657
diff
changeset
|
1468 (syms |
3bea53c3ecea
(byte-compile-display-log-head-p): New
Gerd Moellmann <gerd@gnu.org>
parents:
39657
diff
changeset
|
1469 (byte-compile-warn str1 (car syms))))) |
28295
8082575fec24
(byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
27824
diff
changeset
|
1470 |
40035
2b16a80692ef
Put the *Compile-Log* buffer in `compilation-mode'.
Sam Steingold <sds@gnu.org>
parents:
39852
diff
changeset
|
1471 ;; If we have compiled any calls to functions which are not known to be |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1472 ;; defined, issue a warning enumerating them. |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1473 ;; `unresolved' in the list `byte-compile-warnings' disables this. |
757 | 1474 (defun byte-compile-warn-about-unresolved-functions () |
85730
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
1475 (when (byte-compile-warning-enabled-p 'unresolved) |
39769
3bea53c3ecea
(byte-compile-display-log-head-p): New
Gerd Moellmann <gerd@gnu.org>
parents:
39657
diff
changeset
|
1476 (let ((byte-compile-current-form :end) |
28295
8082575fec24
(byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
27824
diff
changeset
|
1477 (noruntime nil) |
8082575fec24
(byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
27824
diff
changeset
|
1478 (unresolved nil)) |
8082575fec24
(byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
27824
diff
changeset
|
1479 ;; Separate the functions that will not be available at runtime |
8082575fec24
(byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
27824
diff
changeset
|
1480 ;; from the truly unresolved ones. |
8082575fec24
(byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
27824
diff
changeset
|
1481 (dolist (f byte-compile-unresolved-functions) |
8082575fec24
(byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
27824
diff
changeset
|
1482 (setq f (car f)) |
8082575fec24
(byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
27824
diff
changeset
|
1483 (if (fboundp f) (push f noruntime) (push f unresolved))) |
8082575fec24
(byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
27824
diff
changeset
|
1484 ;; Complain about the no-run-time functions |
8082575fec24
(byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
27824
diff
changeset
|
1485 (byte-compile-print-syms |
39769
3bea53c3ecea
(byte-compile-display-log-head-p): New
Gerd Moellmann <gerd@gnu.org>
parents:
39657
diff
changeset
|
1486 "the function `%s' might not be defined at runtime." |
3bea53c3ecea
(byte-compile-display-log-head-p): New
Gerd Moellmann <gerd@gnu.org>
parents:
39657
diff
changeset
|
1487 "the following functions might not be defined at runtime:" |
28295
8082575fec24
(byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
27824
diff
changeset
|
1488 noruntime) |
8082575fec24
(byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
27824
diff
changeset
|
1489 ;; Complain about the unresolved functions |
8082575fec24
(byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
27824
diff
changeset
|
1490 (byte-compile-print-syms |
39769
3bea53c3ecea
(byte-compile-display-log-head-p): New
Gerd Moellmann <gerd@gnu.org>
parents:
39657
diff
changeset
|
1491 "the function `%s' is not known to be defined." |
3bea53c3ecea
(byte-compile-display-log-head-p): New
Gerd Moellmann <gerd@gnu.org>
parents:
39657
diff
changeset
|
1492 "the following functions are not known to be defined:" |
28295
8082575fec24
(byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
27824
diff
changeset
|
1493 unresolved))) |
757 | 1494 nil) |
1495 | |
1496 | |
50618
ebecc2b80af6
(byte-compile-const-symbol-p): Rename arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50573
diff
changeset
|
1497 (defsubst byte-compile-const-symbol-p (symbol &optional any-value) |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
1498 "Non-nil if SYMBOL is constant. |
50618
ebecc2b80af6
(byte-compile-const-symbol-p): Rename arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50573
diff
changeset
|
1499 If ANY-VALUE is nil, only return non-nil if the value of the symbol is the |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
1500 symbol itself." |
27824 | 1501 (or (memq symbol '(nil t)) |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
1502 (keywordp symbol) |
50618
ebecc2b80af6
(byte-compile-const-symbol-p): Rename arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50573
diff
changeset
|
1503 (if any-value (memq symbol byte-compile-const-variables)))) |
27824 | 1504 |
757 | 1505 (defmacro byte-compile-constp (form) |
28402 | 1506 "Return non-nil if FORM is a constant." |
27824 | 1507 `(cond ((consp ,form) (eq (car ,form) 'quote)) |
1508 ((not (symbolp ,form))) | |
1509 ((byte-compile-const-symbol-p ,form)))) | |
757 | 1510 |
1511 (defmacro byte-compile-close-variables (&rest body) | |
1512 (cons 'let | |
1513 (cons '(;; | |
1514 ;; Close over these variables to encapsulate the | |
1515 ;; compilation state | |
1516 ;; | |
1517 (byte-compile-macro-environment | |
1518 ;; Copy it because the compiler may patch into the | |
1519 ;; macroenvironment. | |
1520 (copy-alist byte-compile-initial-macro-environment)) | |
1521 (byte-compile-function-environment nil) | |
1522 (byte-compile-bound-variables nil) | |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
1523 (byte-compile-const-variables nil) |
757 | 1524 (byte-compile-free-references nil) |
1525 (byte-compile-free-assignments nil) | |
1526 ;; | |
1527 ;; Close over these variables so that `byte-compiler-options' | |
1528 ;; can change them on a per-file basis. | |
1529 ;; | |
1530 (byte-compile-verbose byte-compile-verbose) | |
1531 (byte-optimize byte-optimize) | |
10235
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1532 (byte-compile-compatibility byte-compile-compatibility) |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1533 (byte-compile-dynamic byte-compile-dynamic) |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1534 (byte-compile-dynamic-docstrings |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1535 byte-compile-dynamic-docstrings) |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1536 ;; (byte-compile-generate-emacs19-bytecodes |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1537 ;; byte-compile-generate-emacs19-bytecodes) |
85730
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
1538 (byte-compile-warnings byte-compile-warnings) |
757 | 1539 ) |
1540 body))) | |
1541 | |
1542 (defmacro displaying-byte-compile-warnings (&rest body) | |
47110
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1543 `(let* ((--displaying-byte-compile-warnings-fn (lambda () ,@body)) |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1544 (warning-series-started |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1545 (and (markerp warning-series) |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1546 (eq (marker-buffer warning-series) |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1547 (get-buffer "*Compile-Log*"))))) |
46657
04d87f195cd1
(byte-compile-cl-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
46576
diff
changeset
|
1548 (byte-compile-find-cl-functions) |
47110
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1549 (if (or (eq warning-series 'byte-compile-warning-series) |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1550 warning-series-started) |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1551 ;; warning-series does come from compilation, |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1552 ;; so don't bind it, but maybe do set it. |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1553 (let (tem) |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1554 ;; Log the file name. Record position of that text. |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1555 (setq tem (byte-compile-log-file)) |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1556 (unless warning-series-started |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1557 (setq warning-series (or tem 'byte-compile-warning-series))) |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1558 (if byte-compile-debug |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1559 (funcall --displaying-byte-compile-warnings-fn) |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1560 (condition-case error-info |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1561 (funcall --displaying-byte-compile-warnings-fn) |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1562 (error (byte-compile-report-error error-info))))) |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1563 ;; warning-series does not come from compilation, so bind it. |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1564 (let ((warning-series |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1565 ;; Log the file name. Record position of that text. |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1566 (or (byte-compile-log-file) 'byte-compile-warning-series))) |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1567 (if byte-compile-debug |
46576 | 1568 (funcall --displaying-byte-compile-warnings-fn) |
47110
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1569 (condition-case error-info |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1570 (funcall --displaying-byte-compile-warnings-fn) |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1571 (error (byte-compile-report-error error-info)))))))) |
757 | 1572 |
819
5bbabfcef929
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
784
diff
changeset
|
1573 ;;;###autoload |
13338
0f082123d484
(byte-recompile-directory): New arg FORCE.
Richard M. Stallman <rms@gnu.org>
parents:
13138
diff
changeset
|
1574 (defun byte-force-recompile (directory) |
0f082123d484
(byte-recompile-directory): New arg FORCE.
Richard M. Stallman <rms@gnu.org>
parents:
13138
diff
changeset
|
1575 "Recompile every `.el' file in DIRECTORY that already has a `.elc' file. |
0f082123d484
(byte-recompile-directory): New arg FORCE.
Richard M. Stallman <rms@gnu.org>
parents:
13138
diff
changeset
|
1576 Files in subdirectories of DIRECTORY are processed also." |
13474
3e7f6fdc234d
(byte-compile-associative): Do operations left to right.
Richard M. Stallman <rms@gnu.org>
parents:
13403
diff
changeset
|
1577 (interactive "DByte force recompile (directory): ") |
13338
0f082123d484
(byte-recompile-directory): New arg FORCE.
Richard M. Stallman <rms@gnu.org>
parents:
13138
diff
changeset
|
1578 (byte-recompile-directory directory nil t)) |
0f082123d484
(byte-recompile-directory): New arg FORCE.
Richard M. Stallman <rms@gnu.org>
parents:
13138
diff
changeset
|
1579 |
92388 | 1580 ;; The `bytecomp-' prefix is applied to all local variables with |
1581 ;; otherwise common names in this and similar functions for the sake | |
1582 ;; of the boundp test in byte-compile-variable-ref. | |
1583 ;; http://lists.gnu.org/archive/html/emacs-devel/2008-01/msg00237.html | |
1584 ;; http://lists.gnu.org/archive/html/bug-gnu-emacs/2008-02/msg00134.html | |
13338
0f082123d484
(byte-recompile-directory): New arg FORCE.
Richard M. Stallman <rms@gnu.org>
parents:
13138
diff
changeset
|
1585 ;;;###autoload |
92388 | 1586 (defun byte-recompile-directory (bytecomp-directory &optional bytecomp-arg |
1587 bytecomp-force) | |
1588 "Recompile every `.el' file in BYTECOMP-DIRECTORY that needs recompilation. | |
757 | 1589 This is if a `.elc' file exists but is older than the `.el' file. |
92388 | 1590 Files in subdirectories of BYTECOMP-DIRECTORY are processed also. |
757 | 1591 |
45842
288c321d3282
(byte-recompile-directory): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
45572
diff
changeset
|
1592 If the `.elc' file does not exist, normally this function *does not* |
92388 | 1593 compile the corresponding `.el' file. However, if the prefix argument |
1594 BYTECOMP-ARG is 0, that means do compile all those files. A nonzero | |
1595 BYTECOMP-ARG means ask the user, for each such `.el' file, whether to | |
1596 compile it. A nonzero BYTECOMP-ARG also means ask about each subdirectory | |
1597 before scanning it. | |
1598 | |
1599 If the third argument BYTECOMP-FORCE is non-nil, recompile every `.el' file | |
1600 that already has a `.elc' file." | |
757 | 1601 (interactive "DByte recompile directory: \nP") |
92388 | 1602 (if bytecomp-arg |
1603 (setq bytecomp-arg (prefix-numeric-value bytecomp-arg))) | |
3653
974055b516d9
* bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents:
3591
diff
changeset
|
1604 (if noninteractive |
974055b516d9
* bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents:
3591
diff
changeset
|
1605 nil |
974055b516d9
* bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents:
3591
diff
changeset
|
1606 (save-some-buffers) |
11590
97a90e900ce7
(byte-recompile-directory): Use force-mode-line-update.
Karl Heuer <kwzh@gnu.org>
parents:
11432
diff
changeset
|
1607 (force-mode-line-update)) |
78613
340dd924a553
(byte-compile-log-file, byte-recompile-directory, byte-compile-file)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78217
diff
changeset
|
1608 (with-current-buffer (get-buffer-create "*Compile-Log*") |
92388 | 1609 (setq default-directory (expand-file-name bytecomp-directory)) |
50639
c3ba923eb0e9
(byte-compile-log-file, (byte-recompile-directory): Don't use
Richard M. Stallman <rms@gnu.org>
parents:
50618
diff
changeset
|
1610 ;; compilation-mode copies value of default-directory. |
c3ba923eb0e9
(byte-compile-log-file, (byte-recompile-directory): Don't use
Richard M. Stallman <rms@gnu.org>
parents:
50618
diff
changeset
|
1611 (unless (eq major-mode 'compilation-mode) |
c3ba923eb0e9
(byte-compile-log-file, (byte-recompile-directory): Don't use
Richard M. Stallman <rms@gnu.org>
parents:
50618
diff
changeset
|
1612 (compilation-mode)) |
92388 | 1613 (let ((bytecomp-directories (list default-directory)) |
47332
96475604480c
(byte-recompile-directory): Set and then bind default-directory.
Richard M. Stallman <rms@gnu.org>
parents:
47318
diff
changeset
|
1614 (default-directory default-directory) |
96475604480c
(byte-recompile-directory): Set and then bind default-directory.
Richard M. Stallman <rms@gnu.org>
parents:
47318
diff
changeset
|
1615 (skip-count 0) |
96475604480c
(byte-recompile-directory): Set and then bind default-directory.
Richard M. Stallman <rms@gnu.org>
parents:
47318
diff
changeset
|
1616 (fail-count 0) |
96475604480c
(byte-recompile-directory): Set and then bind default-directory.
Richard M. Stallman <rms@gnu.org>
parents:
47318
diff
changeset
|
1617 (file-count 0) |
96475604480c
(byte-recompile-directory): Set and then bind default-directory.
Richard M. Stallman <rms@gnu.org>
parents:
47318
diff
changeset
|
1618 (dir-count 0) |
96475604480c
(byte-recompile-directory): Set and then bind default-directory.
Richard M. Stallman <rms@gnu.org>
parents:
47318
diff
changeset
|
1619 last-dir) |
96475604480c
(byte-recompile-directory): Set and then bind default-directory.
Richard M. Stallman <rms@gnu.org>
parents:
47318
diff
changeset
|
1620 (displaying-byte-compile-warnings |
92388 | 1621 (while bytecomp-directories |
1622 (setq bytecomp-directory (car bytecomp-directories)) | |
1623 (message "Checking %s..." bytecomp-directory) | |
1624 (let ((bytecomp-files (directory-files bytecomp-directory)) | |
1625 bytecomp-source bytecomp-dest) | |
1626 (dolist (bytecomp-file bytecomp-files) | |
1627 (setq bytecomp-source | |
1628 (expand-file-name bytecomp-file bytecomp-directory)) | |
1629 (if (and (not (member bytecomp-file '("RCS" "CVS"))) | |
1630 (not (eq ?\. (aref bytecomp-file 0))) | |
1631 (file-directory-p bytecomp-source) | |
1632 (not (file-symlink-p bytecomp-source))) | |
47332
96475604480c
(byte-recompile-directory): Set and then bind default-directory.
Richard M. Stallman <rms@gnu.org>
parents:
47318
diff
changeset
|
1633 ;; This file is a subdirectory. Handle them differently. |
92388 | 1634 (when (or (null bytecomp-arg) |
1635 (eq 0 bytecomp-arg) | |
1636 (y-or-n-p (concat "Check " bytecomp-source "? "))) | |
1637 (setq bytecomp-directories | |
1638 (nconc bytecomp-directories (list bytecomp-source)))) | |
47332
96475604480c
(byte-recompile-directory): Set and then bind default-directory.
Richard M. Stallman <rms@gnu.org>
parents:
47318
diff
changeset
|
1639 ;; It is an ordinary file. Decide whether to compile it. |
92388 | 1640 (if (and (string-match emacs-lisp-file-regexp bytecomp-source) |
1641 (file-readable-p bytecomp-source) | |
1642 (not (auto-save-file-name-p bytecomp-source)) | |
1643 (setq bytecomp-dest | |
1644 (byte-compile-dest-file bytecomp-source)) | |
1645 (if (file-exists-p bytecomp-dest) | |
47332
96475604480c
(byte-recompile-directory): Set and then bind default-directory.
Richard M. Stallman <rms@gnu.org>
parents:
47318
diff
changeset
|
1646 ;; File was already compiled. |
92388 | 1647 (or bytecomp-force |
1648 (file-newer-than-file-p bytecomp-source | |
1649 bytecomp-dest)) | |
47332
96475604480c
(byte-recompile-directory): Set and then bind default-directory.
Richard M. Stallman <rms@gnu.org>
parents:
47318
diff
changeset
|
1650 ;; No compiled file exists yet. |
92388 | 1651 (and bytecomp-arg |
1652 (or (eq 0 bytecomp-arg) | |
1653 (y-or-n-p (concat "Compile " | |
1654 bytecomp-source "? ")))))) | |
47332
96475604480c
(byte-recompile-directory): Set and then bind default-directory.
Richard M. Stallman <rms@gnu.org>
parents:
47318
diff
changeset
|
1655 (progn (if (and noninteractive (not byte-compile-verbose)) |
92388 | 1656 (message "Compiling %s..." bytecomp-source)) |
1657 (let ((bytecomp-res (byte-compile-file | |
1658 bytecomp-source))) | |
1659 (cond ((eq bytecomp-res 'no-byte-compile) | |
47332
96475604480c
(byte-recompile-directory): Set and then bind default-directory.
Richard M. Stallman <rms@gnu.org>
parents:
47318
diff
changeset
|
1660 (setq skip-count (1+ skip-count))) |
92388 | 1661 ((eq bytecomp-res t) |
47332
96475604480c
(byte-recompile-directory): Set and then bind default-directory.
Richard M. Stallman <rms@gnu.org>
parents:
47318
diff
changeset
|
1662 (setq file-count (1+ file-count))) |
92388 | 1663 ((eq bytecomp-res nil) |
47332
96475604480c
(byte-recompile-directory): Set and then bind default-directory.
Richard M. Stallman <rms@gnu.org>
parents:
47318
diff
changeset
|
1664 (setq fail-count (1+ fail-count))))) |
96475604480c
(byte-recompile-directory): Set and then bind default-directory.
Richard M. Stallman <rms@gnu.org>
parents:
47318
diff
changeset
|
1665 (or noninteractive |
92388 | 1666 (message "Checking %s..." bytecomp-directory)) |
1667 (if (not (eq last-dir bytecomp-directory)) | |
1668 (setq last-dir bytecomp-directory | |
47332
96475604480c
(byte-recompile-directory): Set and then bind default-directory.
Richard M. Stallman <rms@gnu.org>
parents:
47318
diff
changeset
|
1669 dir-count (1+ dir-count))) |
96475604480c
(byte-recompile-directory): Set and then bind default-directory.
Richard M. Stallman <rms@gnu.org>
parents:
47318
diff
changeset
|
1670 ))))) |
92388 | 1671 (setq bytecomp-directories (cdr bytecomp-directories)))) |
47332
96475604480c
(byte-recompile-directory): Set and then bind default-directory.
Richard M. Stallman <rms@gnu.org>
parents:
47318
diff
changeset
|
1672 (message "Done (Total of %d file%s compiled%s%s%s)" |
96475604480c
(byte-recompile-directory): Set and then bind default-directory.
Richard M. Stallman <rms@gnu.org>
parents:
47318
diff
changeset
|
1673 file-count (if (= file-count 1) "" "s") |
96475604480c
(byte-recompile-directory): Set and then bind default-directory.
Richard M. Stallman <rms@gnu.org>
parents:
47318
diff
changeset
|
1674 (if (> fail-count 0) (format ", %d failed" fail-count) "") |
96475604480c
(byte-recompile-directory): Set and then bind default-directory.
Richard M. Stallman <rms@gnu.org>
parents:
47318
diff
changeset
|
1675 (if (> skip-count 0) (format ", %d skipped" skip-count) "") |
92388 | 1676 (if (> dir-count 1) |
1677 (format " in %d directories" dir-count) ""))))) | |
757 | 1678 |
41176
2d63191afacd
(byte-compile-call-tree, byte-code-vector)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40451
diff
changeset
|
1679 (defvar no-byte-compile nil |
2d63191afacd
(byte-compile-call-tree, byte-code-vector)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40451
diff
changeset
|
1680 "Non-nil to prevent byte-compiling of emacs-lisp code. |
2d63191afacd
(byte-compile-call-tree, byte-code-vector)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40451
diff
changeset
|
1681 This is normally set in local file variables at the end of the elisp file: |
2d63191afacd
(byte-compile-call-tree, byte-code-vector)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40451
diff
changeset
|
1682 |
2d63191afacd
(byte-compile-call-tree, byte-code-vector)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40451
diff
changeset
|
1683 ;; Local Variables:\n;; no-byte-compile: t\n;; End: ") |
70590
63b772bfba93
Move `safe-local-variable' declarations to the respective files.
Reiner Steib <Reiner.Steib@gmx.de>
parents:
69937
diff
changeset
|
1684 ;;;###autoload(put 'no-byte-compile 'safe-local-variable 'booleanp) |
41176
2d63191afacd
(byte-compile-call-tree, byte-code-vector)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40451
diff
changeset
|
1685 |
819
5bbabfcef929
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
784
diff
changeset
|
1686 ;;;###autoload |
92388 | 1687 (defun byte-compile-file (bytecomp-filename &optional load) |
1688 "Compile a file of Lisp code named BYTECOMP-FILENAME into a file of byte code. | |
1689 The output file's name is generated by passing BYTECOMP-FILENAME to the | |
94392 | 1690 function `byte-compile-dest-file' (which see). |
39561
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
1691 With prefix arg (noninteractively: 2nd arg), LOAD the file after compiling. |
40451
9c7e47dd60be
(byte-recompile-directory): Report numbers of files skipped and failed too.
Sam Steingold <sds@gnu.org>
parents:
40035
diff
changeset
|
1692 The value is non-nil if there were no errors, nil if errors." |
757 | 1693 ;; (interactive "fByte compile file: \nP") |
1694 (interactive | |
92388 | 1695 (let ((bytecomp-file buffer-file-name) |
1696 (bytecomp-file-name nil) | |
1697 (bytecomp-file-dir nil)) | |
1698 (and bytecomp-file | |
757 | 1699 (eq (cdr (assq 'major-mode (buffer-local-variables))) |
1700 'emacs-lisp-mode) | |
92388 | 1701 (setq bytecomp-file-name (file-name-nondirectory bytecomp-file) |
1702 bytecomp-file-dir (file-name-directory bytecomp-file))) | |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1703 (list (read-file-name (if current-prefix-arg |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1704 "Byte compile and load file: " |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1705 "Byte compile file: ") |
92388 | 1706 bytecomp-file-dir bytecomp-file-name nil) |
819
5bbabfcef929
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
784
diff
changeset
|
1707 current-prefix-arg))) |
757 | 1708 ;; Expand now so we get the current buffer's defaults |
92388 | 1709 (setq bytecomp-filename (expand-file-name bytecomp-filename)) |
757 | 1710 |
1711 ;; If we're compiling a file that's in a buffer and is modified, offer | |
1712 ;; to save it first. | |
1713 (or noninteractive | |
92388 | 1714 (let ((b (get-file-buffer (expand-file-name bytecomp-filename)))) |
757 | 1715 (if (and b (buffer-modified-p b) |
28295
8082575fec24
(byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
27824
diff
changeset
|
1716 (y-or-n-p (format "Save buffer %s first? " (buffer-name b)))) |
78613
340dd924a553
(byte-compile-log-file, byte-recompile-directory, byte-compile-file)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78217
diff
changeset
|
1717 (with-current-buffer b (save-buffer))))) |
757 | 1718 |
47110
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1719 ;; Force logging of the file name for each file compiled. |
ce17d4a1d32e
(byte-compile-warning-prefix):
Richard M. Stallman <rms@gnu.org>
parents:
47107
diff
changeset
|
1720 (setq byte-compile-last-logged-file nil) |
92388 | 1721 (let ((byte-compile-current-file bytecomp-filename) |
95642
1b0cbcea87b2
(byte-compile-current-group): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
1722 (byte-compile-current-group nil) |
22689
2d69ba7d76f4
(byte-compile-file): Bind set-auto-coding-for-load to t.
Richard M. Stallman <rms@gnu.org>
parents:
22578
diff
changeset
|
1723 (set-auto-coding-for-load t) |
10235
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1724 target-file input-buffer output-buffer |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1725 byte-compile-dest-file) |
92388 | 1726 (setq target-file (byte-compile-dest-file bytecomp-filename)) |
10235
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1727 (setq byte-compile-dest-file target-file) |
79488
b8e6a2408b6d
(batch-byte-recompile-directory): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
79231
diff
changeset
|
1728 (with-current-buffer |
78613
340dd924a553
(byte-compile-log-file, byte-recompile-directory, byte-compile-file)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78217
diff
changeset
|
1729 (setq input-buffer (get-buffer-create " *Compiler Input*")) |
757 | 1730 (erase-buffer) |
24576
d11ae896247c
(byte-compile-file): Clear buffer-file-coding-system. If the coding
Richard M. Stallman <rms@gnu.org>
parents:
24025
diff
changeset
|
1731 (setq buffer-file-coding-system nil) |
21725
375190ad5062
(byte-compile-file): Always read the file in multibyte mode
Richard M. Stallman <rms@gnu.org>
parents:
21542
diff
changeset
|
1732 ;; Always compile an Emacs Lisp file as multibyte |
26922
6fdf1f6c23a0
(byte-compile-bound-variables): Doc fix.
Dave Love <fx@gnu.org>
parents:
25636
diff
changeset
|
1733 ;; unless the file itself forces unibyte with -*-coding: raw-text;-*- |
21725
375190ad5062
(byte-compile-file): Always read the file in multibyte mode
Richard M. Stallman <rms@gnu.org>
parents:
21542
diff
changeset
|
1734 (set-buffer-multibyte t) |
92388 | 1735 (insert-file-contents bytecomp-filename) |
50837
1bd0d75dbaa9
(byte-compile-file): Fix comment
Kenichi Handa <handa@m17n.org>
parents:
50729
diff
changeset
|
1736 ;; Mimic the way after-insert-file-set-coding can make the |
1bd0d75dbaa9
(byte-compile-file): Fix comment
Kenichi Handa <handa@m17n.org>
parents:
50729
diff
changeset
|
1737 ;; buffer unibyte when visiting this file. |
24576
d11ae896247c
(byte-compile-file): Clear buffer-file-coding-system. If the coding
Richard M. Stallman <rms@gnu.org>
parents:
24025
diff
changeset
|
1738 (when (or (eq last-coding-system-used 'no-conversion) |
d11ae896247c
(byte-compile-file): Clear buffer-file-coding-system. If the coding
Richard M. Stallman <rms@gnu.org>
parents:
24025
diff
changeset
|
1739 (eq (coding-system-type last-coding-system-used) 5)) |
d11ae896247c
(byte-compile-file): Clear buffer-file-coding-system. If the coding
Richard M. Stallman <rms@gnu.org>
parents:
24025
diff
changeset
|
1740 ;; For coding systems no-conversion and raw-text..., |
d11ae896247c
(byte-compile-file): Clear buffer-file-coding-system. If the coding
Richard M. Stallman <rms@gnu.org>
parents:
24025
diff
changeset
|
1741 ;; edit the buffer as unibyte. |
d11ae896247c
(byte-compile-file): Clear buffer-file-coding-system. If the coding
Richard M. Stallman <rms@gnu.org>
parents:
24025
diff
changeset
|
1742 (set-buffer-multibyte nil)) |
757 | 1743 ;; Run hooks including the uncompression hook. |
1744 ;; If they change the file name, then change it for the output also. | |
92388 | 1745 (let ((buffer-file-name bytecomp-filename) |
10836
3c9b3505feef
(byte-compile-file): Bind default-major-mode to avoid randomness.
Richard M. Stallman <rms@gnu.org>
parents:
10696
diff
changeset
|
1746 (default-major-mode 'emacs-lisp-mode) |
69937
b47563345c03
(byte-compile-file): Bind enable-local-variables to :safe,
Richard M. Stallman <rms@gnu.org>
parents:
69872
diff
changeset
|
1747 ;; Ignore unsafe local variables. |
b47563345c03
(byte-compile-file): Bind enable-local-variables to :safe,
Richard M. Stallman <rms@gnu.org>
parents:
69872
diff
changeset
|
1748 ;; We only care about a few of them for our purposes. |
b47563345c03
(byte-compile-file): Bind enable-local-variables to :safe,
Richard M. Stallman <rms@gnu.org>
parents:
69872
diff
changeset
|
1749 (enable-local-variables :safe) |
10235
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1750 (enable-local-eval nil)) |
69937
b47563345c03
(byte-compile-file): Bind enable-local-variables to :safe,
Richard M. Stallman <rms@gnu.org>
parents:
69872
diff
changeset
|
1751 ;; Arg of t means don't alter enable-local-variables. |
b47563345c03
(byte-compile-file): Bind enable-local-variables to :safe,
Richard M. Stallman <rms@gnu.org>
parents:
69872
diff
changeset
|
1752 (normal-mode t) |
92388 | 1753 (setq bytecomp-filename buffer-file-name)) |
16788
ffb387a3d054
(byte-compile-file): Set default-directory in compiler input buffer.
Richard M. Stallman <rms@gnu.org>
parents:
16666
diff
changeset
|
1754 ;; Set the default directory, in case an eval-when-compile uses it. |
92388 | 1755 (setq default-directory (file-name-directory bytecomp-filename))) |
39561
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
1756 ;; Check if the file's local variables explicitly specify not to |
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
1757 ;; compile this file. |
41176
2d63191afacd
(byte-compile-call-tree, byte-code-vector)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40451
diff
changeset
|
1758 (if (with-current-buffer input-buffer no-byte-compile) |
39561
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
1759 (progn |
54497
acd845de0416
(byte-recompile-directory): Ignore hidden dir.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54374
diff
changeset
|
1760 ;; (message "%s not compiled because of `no-byte-compile: %s'" |
92388 | 1761 ;; (file-relative-name bytecomp-filename) |
54497
acd845de0416
(byte-recompile-directory): Ignore hidden dir.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54374
diff
changeset
|
1762 ;; (with-current-buffer input-buffer no-byte-compile)) |
acd845de0416
(byte-recompile-directory): Ignore hidden dir.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54374
diff
changeset
|
1763 (when (file-exists-p target-file) |
acd845de0416
(byte-recompile-directory): Ignore hidden dir.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54374
diff
changeset
|
1764 (message "%s deleted because of `no-byte-compile: %s'" |
acd845de0416
(byte-recompile-directory): Ignore hidden dir.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54374
diff
changeset
|
1765 (file-relative-name target-file) |
acd845de0416
(byte-recompile-directory): Ignore hidden dir.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54374
diff
changeset
|
1766 (buffer-local-value 'no-byte-compile input-buffer)) |
acd845de0416
(byte-recompile-directory): Ignore hidden dir.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54374
diff
changeset
|
1767 (condition-case nil (delete-file target-file) (error nil))) |
39657
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1768 ;; We successfully didn't compile this file. |
40451
9c7e47dd60be
(byte-recompile-directory): Report numbers of files skipped and failed too.
Sam Steingold <sds@gnu.org>
parents:
40035
diff
changeset
|
1769 'no-byte-compile) |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1770 (when byte-compile-verbose |
92388 | 1771 (message "Compiling %s..." bytecomp-filename)) |
39657
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1772 (setq byte-compiler-error-flag nil) |
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1773 ;; It is important that input-buffer not be current at this call, |
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1774 ;; so that the value of point set in input-buffer |
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1775 ;; within byte-compile-from-buffer lingers in that buffer. |
47344
0b6b707c1e14
(byte-compile-file): Don't switch buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47332
diff
changeset
|
1776 (setq output-buffer |
0b6b707c1e14
(byte-compile-file): Don't switch buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47332
diff
changeset
|
1777 (save-current-buffer |
92388 | 1778 (byte-compile-from-buffer input-buffer bytecomp-filename))) |
39657
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1779 (if byte-compiler-error-flag |
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1780 nil |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1781 (when byte-compile-verbose |
92388 | 1782 (message "Compiling %s...done" bytecomp-filename)) |
39657
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1783 (kill-buffer input-buffer) |
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1784 (with-current-buffer output-buffer |
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1785 (goto-char (point-max)) |
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1786 (insert "\n") ; aaah, unix. |
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1787 (if (file-writable-p target-file) |
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1788 ;; We must disable any code conversion here. |
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1789 (let ((coding-system-for-write 'no-conversion)) |
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1790 (if (memq system-type '(ms-dos 'windows-nt)) |
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1791 (setq buffer-file-type t)) |
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1792 (when (file-exists-p target-file) |
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1793 ;; Remove the target before writing it, so that any |
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1794 ;; hard-links continue to point to the old file (this makes |
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1795 ;; it possible for installed files to share disk space with |
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1796 ;; the build tree, without causing problems when emacs-lisp |
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1797 ;; files in the build tree are recompiled). |
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1798 (delete-file target-file)) |
46003
503e1f14ba3d
(byte-compile-callargs-warn):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45842
diff
changeset
|
1799 (write-region (point-min) (point-max) target-file)) |
39657
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1800 ;; This is just to give a better error message than write-region |
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1801 (signal 'file-error |
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1802 (list "Opening output file" |
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1803 (if (file-exists-p target-file) |
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1804 "cannot overwrite file" |
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1805 "directory not writable or nonexistent") |
97142 | 1806 target-file))) |
39657
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1807 (kill-buffer (current-buffer))) |
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1808 (if (and byte-compile-generate-call-tree |
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1809 (or (eq t byte-compile-generate-call-tree) |
92388 | 1810 (y-or-n-p (format "Report call tree for %s? " |
1811 bytecomp-filename)))) | |
39657
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1812 (save-excursion |
92388 | 1813 (display-call-tree bytecomp-filename))) |
39657
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1814 (if load |
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1815 (load target-file)) |
ea9e28db82d5
(byte-compile-file): Return success when the file says no-byte-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39561
diff
changeset
|
1816 t)))) |
757 | 1817 |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1818 ;;(defun byte-compile-and-load-file (&optional filename) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1819 ;; "Compile a file of Lisp code named FILENAME into a file of byte code, |
28402 | 1820 ;;and then load it. The output file's name is made by appending \"c\" to |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1821 ;;the end of FILENAME." |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1822 ;; (interactive) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1823 ;; (if filename ; I don't get it, (interactive-p) doesn't always work |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1824 ;; (byte-compile-file filename t) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1825 ;; (let ((current-prefix-arg '(4))) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1826 ;; (call-interactively 'byte-compile-file)))) |
757 | 1827 |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1828 ;;(defun byte-compile-buffer (&optional buffer) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1829 ;; "Byte-compile and evaluate contents of BUFFER (default: the current buffer)." |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1830 ;; (interactive "bByte compile buffer: ") |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1831 ;; (setq buffer (if buffer (get-buffer buffer) (current-buffer))) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1832 ;; (message "Compiling %s..." (buffer-name buffer)) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1833 ;; (let* ((filename (or (buffer-file-name buffer) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1834 ;; (concat "#<buffer " (buffer-name buffer) ">"))) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1835 ;; (byte-compile-current-file buffer)) |
6193
74fcc9007c39
(byte-compile-insert-header): Take a filename argument.
Richard M. Stallman <rms@gnu.org>
parents:
6081
diff
changeset
|
1836 ;; (byte-compile-from-buffer buffer nil)) |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1837 ;; (message "Compiling %s...done" (buffer-name buffer)) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1838 ;; t) |
757 | 1839 |
1840 ;;; compiling a single function | |
819
5bbabfcef929
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
784
diff
changeset
|
1841 ;;;###autoload |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
1842 (defun compile-defun (&optional arg) |
757 | 1843 "Compile and evaluate the current top-level form. |
53573
3a95b6e83d47
(compile-defun): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents:
52568
diff
changeset
|
1844 Print the result in the echo area. |
757 | 1845 With argument, insert value in current buffer after the form." |
1846 (interactive "P") | |
1847 (save-excursion | |
1848 (end-of-defun) | |
1849 (beginning-of-defun) | |
1850 (let* ((byte-compile-current-file nil) | |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1851 (byte-compile-current-buffer (current-buffer)) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1852 (byte-compile-read-position (point)) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1853 (byte-compile-last-position byte-compile-read-position) |
757 | 1854 (byte-compile-last-warned-form 'nothing) |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1855 (value (eval |
46568
a9a03aa7ba8a
(byte-compile-cl-warn): Delete `values'
Richard M. Stallman <rms@gnu.org>
parents:
46536
diff
changeset
|
1856 (let ((read-with-symbol-positions (current-buffer)) |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1857 (read-symbol-positions-list nil)) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1858 (displaying-byte-compile-warnings |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1859 (byte-compile-sexp (read (current-buffer)))))))) |
757 | 1860 (cond (arg |
1861 (message "Compiling from buffer... done.") | |
1862 (prin1 value (current-buffer)) | |
1863 (insert "\n")) | |
1864 ((message "%s" (prin1-to-string value))))))) | |
1865 | |
1866 | |
6193
74fcc9007c39
(byte-compile-insert-header): Take a filename argument.
Richard M. Stallman <rms@gnu.org>
parents:
6081
diff
changeset
|
1867 (defun byte-compile-from-buffer (inbuffer &optional filename) |
74fcc9007c39
(byte-compile-insert-header): Take a filename argument.
Richard M. Stallman <rms@gnu.org>
parents:
6081
diff
changeset
|
1868 ;; Filename is used for the loading-into-Emacs-18 error message. |
10235
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1869 (let (outbuffer |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1870 (byte-compile-current-buffer inbuffer) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1871 (byte-compile-read-position nil) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1872 (byte-compile-last-position nil) |
10235
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1873 ;; Prevent truncation of flonums and lists as we read and print them |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1874 (float-output-format nil) |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1875 (case-fold-search nil) |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1876 (print-length nil) |
13138
2a0ef3a2ccc3
(byte-compile-from-buffer): Bind print-level.
Richard M. Stallman <rms@gnu.org>
parents:
12928
diff
changeset
|
1877 (print-level nil) |
20818
732ffd28a863
(byte-compile-from-buffer): Bind edebug-all-defs and edebug-all-forms to nil.
Richard M. Stallman <rms@gnu.org>
parents:
20779
diff
changeset
|
1878 ;; Prevent edebug from interfering when we compile |
732ffd28a863
(byte-compile-from-buffer): Bind edebug-all-defs and edebug-all-forms to nil.
Richard M. Stallman <rms@gnu.org>
parents:
20779
diff
changeset
|
1879 ;; and put the output into a file. |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1880 ;; (edebug-all-defs nil) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1881 ;; (edebug-all-forms nil) |
10235
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1882 ;; Simulate entry to byte-compile-top-level |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1883 (byte-compile-constants nil) |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1884 (byte-compile-variables nil) |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1885 (byte-compile-tag-number 0) |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1886 (byte-compile-depth 0) |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1887 (byte-compile-maxdepth 0) |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1888 (byte-compile-output nil) |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1889 ;; This allows us to get the positions of symbols read; it's |
59996
aac0a33f5772
Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents:
59061
diff
changeset
|
1890 ;; new in Emacs 22.1. |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1891 (read-with-symbol-positions inbuffer) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1892 (read-symbol-positions-list nil) |
10235
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1893 ;; #### This is bound in b-c-close-variables. |
85730
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
1894 ;; (byte-compile-warnings byte-compile-warnings) |
10235
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1895 ) |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1896 (byte-compile-close-variables |
78613
340dd924a553
(byte-compile-log-file, byte-recompile-directory, byte-compile-file)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78217
diff
changeset
|
1897 (with-current-buffer |
340dd924a553
(byte-compile-log-file, byte-recompile-directory, byte-compile-file)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78217
diff
changeset
|
1898 (setq outbuffer (get-buffer-create " *Compiler Output*")) |
22910
5571f38cc118
(byte-compile-from-buffer): Make the output buffer multibyte.
Richard M. Stallman <rms@gnu.org>
parents:
22689
diff
changeset
|
1899 (set-buffer-multibyte t) |
10235
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1900 (erase-buffer) |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1901 ;; (emacs-lisp-mode) |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1902 (setq case-fold-search nil) |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1903 ;; This is a kludge. Some operating systems (OS/2, DOS) need to |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1904 ;; write files containing binary information specially. |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1905 ;; Under most circumstances, such files will be in binary |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1906 ;; overwrite mode, so those OS's use that flag to guess how |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1907 ;; they should write their data. Advise them that .elc files |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1908 ;; need to be written carefully. |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1909 (setq overwrite-mode 'overwrite-mode-binary)) |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1910 (displaying-byte-compile-warnings |
22136
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
1911 (and filename (byte-compile-insert-header filename inbuffer outbuffer)) |
78613
340dd924a553
(byte-compile-log-file, byte-recompile-directory, byte-compile-file)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78217
diff
changeset
|
1912 (with-current-buffer inbuffer |
81333
fc32f1336974
(byte-compile-current-group): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81295
diff
changeset
|
1913 (goto-char (point-min)) |
78210
964d6961bdb6
(byte-compile-from-buffer): initialise byte-compile-unresolved-functions before
Alan Mackenzie <acm@muc.de>
parents:
77119
diff
changeset
|
1914 ;; Should we always do this? When calling multiple files, it |
964d6961bdb6
(byte-compile-from-buffer): initialise byte-compile-unresolved-functions before
Alan Mackenzie <acm@muc.de>
parents:
77119
diff
changeset
|
1915 ;; would be useful to delay this warning until all have been |
964d6961bdb6
(byte-compile-from-buffer): initialise byte-compile-unresolved-functions before
Alan Mackenzie <acm@muc.de>
parents:
77119
diff
changeset
|
1916 ;; compiled. A: Yes! b-c-u-f might contain dross from a |
964d6961bdb6
(byte-compile-from-buffer): initialise byte-compile-unresolved-functions before
Alan Mackenzie <acm@muc.de>
parents:
77119
diff
changeset
|
1917 ;; previous byte-compile. |
964d6961bdb6
(byte-compile-from-buffer): initialise byte-compile-unresolved-functions before
Alan Mackenzie <acm@muc.de>
parents:
77119
diff
changeset
|
1918 (setq byte-compile-unresolved-functions nil) |
10235
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1919 |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1920 ;; Compile the forms from the input buffer. |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1921 (while (progn |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1922 (while (progn (skip-chars-forward " \t\n\^l") |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1923 (looking-at ";")) |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1924 (forward-line 1)) |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1925 (not (eobp))) |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1926 (setq byte-compile-read-position (point) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1927 byte-compile-last-position byte-compile-read-position) |
78631
1150fe1ceae5
(byte-compile-from-buffer): Check old-style backquotes after each `read'
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78615
diff
changeset
|
1928 (let* ((old-style-backquotes nil) |
1150fe1ceae5
(byte-compile-from-buffer): Check old-style backquotes after each `read'
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78615
diff
changeset
|
1929 (form (read inbuffer))) |
1150fe1ceae5
(byte-compile-from-buffer): Check old-style backquotes after each `read'
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78615
diff
changeset
|
1930 ;; Warn about the use of old-style backquotes. |
1150fe1ceae5
(byte-compile-from-buffer): Check old-style backquotes after each `read'
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78615
diff
changeset
|
1931 (when old-style-backquotes |
1150fe1ceae5
(byte-compile-from-buffer): Check old-style backquotes after each `read'
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78615
diff
changeset
|
1932 (byte-compile-warn "!! The file uses old-style backquotes !! |
1150fe1ceae5
(byte-compile-from-buffer): Check old-style backquotes after each `read'
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78615
diff
changeset
|
1933 This functionality has been obsolete for more than 10 years already |
1150fe1ceae5
(byte-compile-from-buffer): Check old-style backquotes after each `read'
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78615
diff
changeset
|
1934 and will be removed soon. See (elisp)Backquote in the manual.")) |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
1935 (byte-compile-file-form form))) |
10235
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1936 ;; Compile pending forms at end of file. |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
1937 (byte-compile-flush-pending) |
50639
c3ba923eb0e9
(byte-compile-log-file, (byte-recompile-directory): Don't use
Richard M. Stallman <rms@gnu.org>
parents:
50618
diff
changeset
|
1938 ;; Make warnings about unresolved functions |
c3ba923eb0e9
(byte-compile-log-file, (byte-recompile-directory): Don't use
Richard M. Stallman <rms@gnu.org>
parents:
50618
diff
changeset
|
1939 ;; give the end of the file as their position. |
c3ba923eb0e9
(byte-compile-log-file, (byte-recompile-directory): Don't use
Richard M. Stallman <rms@gnu.org>
parents:
50618
diff
changeset
|
1940 (setq byte-compile-last-position (point-max)) |
78631
1150fe1ceae5
(byte-compile-from-buffer): Check old-style backquotes after each `read'
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78615
diff
changeset
|
1941 (byte-compile-warn-about-unresolved-functions)) |
22136
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
1942 ;; Fix up the header at the front of the output |
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
1943 ;; if the buffer contains multibyte characters. |
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
1944 (and filename (byte-compile-fix-header filename inbuffer outbuffer)))) |
8446
0199ece40d91
(byte-compile-protect-from-advice): Macro deleted.
Richard M. Stallman <rms@gnu.org>
parents:
8115
diff
changeset
|
1945 outbuffer)) |
757 | 1946 |
22136
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
1947 (defun byte-compile-fix-header (filename inbuffer outbuffer) |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
1948 (with-current-buffer outbuffer |
22136
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
1949 ;; See if the buffer has any multibyte characters. |
30624
277e6060b376
(byte-compile-fix-header): Fix the way of checking the existence of
Kenichi Handa <handa@m17n.org>
parents:
29352
diff
changeset
|
1950 (when (< (point-max) (position-bytes (point-max))) |
22136
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
1951 (when (byte-compile-version-cond byte-compile-compatibility) |
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
1952 (error "Version-18 compatibility not valid with multibyte characters")) |
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
1953 (goto-char (point-min)) |
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
1954 ;; Find the comment that describes the version test. |
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
1955 (search-forward "\n;;; This file") |
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
1956 (beginning-of-line) |
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
1957 (narrow-to-region (point) (point-max)) |
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
1958 ;; Find the line of ballast semicolons. |
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
1959 (search-forward ";;;;;;;;;;") |
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
1960 (beginning-of-line) |
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
1961 |
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
1962 (narrow-to-region (point-min) (point)) |
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
1963 (let ((old-header-end (point)) |
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
1964 delta) |
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
1965 (goto-char (point-min)) |
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
1966 (delete-region (point) (progn (re-search-forward "^(") |
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
1967 (beginning-of-line) |
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
1968 (point))) |
88777 | 1969 (insert ";;; This file contains utf-8 non-ASCII characters\n" |
1970 ";;; and therefore cannot be loaded into Emacs 21 or earlier.\n") | |
1971 ;; Replace "19" or "19.29" with "22", twice. | |
22136
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
1972 (re-search-forward "19\\(\\.[0-9]+\\)") |
90104
a01e7a9f1659
Revision: miles@gnu.org--gnu-2005/emacs--unicode--0--patch-14
Miles Bader <miles@gnu.org>
parents:
90103
diff
changeset
|
1973 (replace-match "23") |
22136
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
1974 (re-search-forward "19\\(\\.[0-9]+\\)") |
90104
a01e7a9f1659
Revision: miles@gnu.org--gnu-2005/emacs--unicode--0--patch-14
Miles Bader <miles@gnu.org>
parents:
90103
diff
changeset
|
1975 (replace-match "23") |
22136
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
1976 ;; Now compensate for the change in size, |
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
1977 ;; to make sure all positions in the file remain valid. |
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
1978 (setq delta (- (point-max) old-header-end)) |
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
1979 (goto-char (point-max)) |
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
1980 (widen) |
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
1981 (delete-char delta))))) |
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
1982 |
12823
c1fcd8660aba
(byte-compile-insert-header): Use 19.29, not 19.28.90
Richard M. Stallman <rms@gnu.org>
parents:
12794
diff
changeset
|
1983 (defun byte-compile-insert-header (filename inbuffer outbuffer) |
87564
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
1984 (with-current-buffer inbuffer |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
1985 (let ((dynamic-docstrings byte-compile-dynamic-docstrings) |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
1986 (dynamic byte-compile-dynamic)) |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
1987 (set-buffer outbuffer) |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
1988 (goto-char (point-min)) |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
1989 ;; The magic number of .elc files is ";ELC", or 0x3B454C43. After |
91327 | 1990 ;; that is the file-format version number (18, 19, 20, or 23) as a |
87564
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
1991 ;; byte, followed by some nulls. The primary motivation for doing |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
1992 ;; this is to get some binary characters up in the first line of |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
1993 ;; the file so that `diff' will simply say "Binary files differ" |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
1994 ;; instead of actually doing a diff of two .elc files. An extra |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
1995 ;; benefit is that you can add this to /etc/magic: |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
1996 |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
1997 ;; 0 string ;ELC GNU Emacs Lisp compiled file, |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
1998 ;; >4 byte x version %d |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
1999 |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
2000 (insert |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
2001 ";ELC" |
91327 | 2002 (if (byte-compile-version-cond byte-compile-compatibility) 18 23) |
87564
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
2003 "\000\000\000\n" |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
2004 ) |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
2005 (insert ";;; Compiled by " |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
2006 (or (and (boundp 'user-mail-address) user-mail-address) |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
2007 (concat (user-login-name) "@" (system-name))) |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
2008 " on " |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
2009 (current-time-string) "\n;;; from file " filename "\n") |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
2010 (insert ";;; in Emacs version " emacs-version "\n") |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
2011 (insert ";;; " |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
2012 (cond |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
2013 ((eq byte-optimize 'source) "with source-level optimization only") |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
2014 ((eq byte-optimize 'byte) "with byte-level optimization only") |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
2015 (byte-optimize "with all optimizations") |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
2016 (t "without optimization")) |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
2017 (if (byte-compile-version-cond byte-compile-compatibility) |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
2018 "; compiled with Emacs 18 compatibility.\n" |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
2019 ".\n")) |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
2020 (if dynamic |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
2021 (insert ";;; Function definitions are lazy-loaded.\n")) |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
2022 (if (not (byte-compile-version-cond byte-compile-compatibility)) |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
2023 (let (intro-string minimum-version) |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
2024 ;; Figure out which Emacs version to require, |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
2025 ;; and what comment to use to explain why. |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
2026 ;; Note that this fails to take account of whether |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
2027 ;; the buffer contains multibyte characters. We may have to |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
2028 ;; compensate at the end in byte-compile-fix-header. |
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
2029 (if dynamic-docstrings |
22047
678a1ed22116
(byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents:
22015
diff
changeset
|
2030 (setq intro-string |
22136
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
2031 ";;; This file uses dynamic docstrings, first added in Emacs 19.29.\n" |
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
2032 minimum-version "19.29") |
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
2033 (setq intro-string |
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
2034 ";;; This file uses opcodes which do not exist in Emacs 18.\n" |
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
2035 minimum-version "19")) |
22047
678a1ed22116
(byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents:
22015
diff
changeset
|
2036 ;; Now insert the comment and the error check. |
678a1ed22116
(byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents:
22015
diff
changeset
|
2037 (insert |
22136
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
2038 "\n" |
22047
678a1ed22116
(byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents:
22015
diff
changeset
|
2039 intro-string |
678a1ed22116
(byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents:
22015
diff
changeset
|
2040 ;; Have to check if emacs-version is bound so that this works |
678a1ed22116
(byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents:
22015
diff
changeset
|
2041 ;; in files loaded early in loadup.el. |
22136
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
2042 "(if (and (boundp 'emacs-version)\n" |
22047
678a1ed22116
(byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents:
22015
diff
changeset
|
2043 ;; If there is a name at the end of emacs-version, |
678a1ed22116
(byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents:
22015
diff
changeset
|
2044 ;; don't try to check the version number. |
678a1ed22116
(byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents:
22015
diff
changeset
|
2045 "\t (< (aref emacs-version (1- (length emacs-version))) ?A)\n" |
678a1ed22116
(byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents:
22015
diff
changeset
|
2046 "\t (or (and (boundp 'epoch::version) epoch::version)\n" |
678a1ed22116
(byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents:
22015
diff
changeset
|
2047 (format "\t (string-lessp emacs-version \"%s\")))\n" |
678a1ed22116
(byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents:
22015
diff
changeset
|
2048 minimum-version) |
678a1ed22116
(byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents:
22015
diff
changeset
|
2049 " (error \"`" |
678a1ed22116
(byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents:
22015
diff
changeset
|
2050 ;; prin1-to-string is used to quote backslashes. |
678a1ed22116
(byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents:
22015
diff
changeset
|
2051 (substring (prin1-to-string (file-name-nondirectory filename)) |
678a1ed22116
(byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents:
22015
diff
changeset
|
2052 1 -1) |
678a1ed22116
(byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents:
22015
diff
changeset
|
2053 (format "' was compiled for Emacs %s or later\"))\n\n" |
22136
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
2054 minimum-version) |
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
2055 ;; Insert semicolons as ballast, so that byte-compile-fix-header |
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
2056 ;; can delete them so as to keep the buffer positions |
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
2057 ;; constant for the actual compiled code. |
88777 | 2058 ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n\n")) |
22047
678a1ed22116
(byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents:
22015
diff
changeset
|
2059 ;; Here if we want Emacs 18 compatibility. |
22136
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
2060 (when dynamic-docstrings |
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
2061 (error "Version-18 compatibility doesn't support dynamic doc strings")) |
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
2062 (when byte-compile-dynamic |
bc8c7f59c064
(byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents:
22050
diff
changeset
|
2063 (error "Version-18 compatibility doesn't support dynamic byte code")) |
12823
c1fcd8660aba
(byte-compile-insert-header): Use 19.29, not 19.28.90
Richard M. Stallman <rms@gnu.org>
parents:
12794
diff
changeset
|
2064 (insert "(or (boundp 'current-load-list) (setq current-load-list nil))\n" |
87564
d0544447616a
(byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions
Richard M. Stallman <rms@gnu.org>
parents:
87112
diff
changeset
|
2065 "\n"))))) |
757 | 2066 |
2067 (defun byte-compile-output-file-form (form) | |
2068 ;; writes the given form to the output buffer, being careful of docstrings | |
19637
baaf02a51ba2
(byte-compile-output-file-form): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
18960
diff
changeset
|
2069 ;; in defun, defmacro, defvar, defconst, autoload and |
baaf02a51ba2
(byte-compile-output-file-form): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
18960
diff
changeset
|
2070 ;; custom-declare-variable because make-docfile is so amazingly stupid. |
2566
4f201a4ab030
(define-function): Changed name back to defalisaases to get things in
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2544
diff
changeset
|
2071 ;; defalias calls are output directly by byte-compile-file-form-defmumble; |
4f201a4ab030
(define-function): Changed name back to defalisaases to get things in
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2544
diff
changeset
|
2072 ;; it does not pay to first build the defalias in defmumble and then parse |
4f201a4ab030
(define-function): Changed name back to defalisaases to get things in
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2544
diff
changeset
|
2073 ;; it here. |
19637
baaf02a51ba2
(byte-compile-output-file-form): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
18960
diff
changeset
|
2074 (if (and (memq (car-safe form) '(defun defmacro defvar defconst autoload |
baaf02a51ba2
(byte-compile-output-file-form): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
18960
diff
changeset
|
2075 custom-declare-variable)) |
757 | 2076 (stringp (nth 3 form))) |
10235
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
2077 (byte-compile-output-docform nil nil '("\n(" 3 ")") form nil |
19637
baaf02a51ba2
(byte-compile-output-file-form): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
18960
diff
changeset
|
2078 (memq (car form) |
baaf02a51ba2
(byte-compile-output-file-form): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
18960
diff
changeset
|
2079 '(autoload custom-declare-variable))) |
757 | 2080 (let ((print-escape-newlines t) |
12552
176c42cc7eeb
(byte-compile-output-file-form): Bind print-length
Karl Heuer <kwzh@gnu.org>
parents:
12511
diff
changeset
|
2081 (print-length nil) |
176c42cc7eeb
(byte-compile-output-file-form): Bind print-length
Karl Heuer <kwzh@gnu.org>
parents:
12511
diff
changeset
|
2082 (print-level nil) |
16159
d4b674c08fe1
(byte-compile-output-file-form): Bind print-quoted and print-gensym to t
Erik Naggum <erik@naggum.no>
parents:
16149
diff
changeset
|
2083 (print-quoted t) |
75402
122ece8ca23d
Make byte compiler correctly write circular constants
Miles Bader <miles@gnu.org>
parents:
75346
diff
changeset
|
2084 (print-gensym t) |
75489
76c18a7841bf
(byte-compile-disable-print-circle): New
Kenichi Handa <handa@m17n.org>
parents:
75402
diff
changeset
|
2085 (print-circle ; handle circular data structures |
76c18a7841bf
(byte-compile-disable-print-circle): New
Kenichi Handa <handa@m17n.org>
parents:
75402
diff
changeset
|
2086 (not byte-compile-disable-print-circle))) |
757 | 2087 (princ "\n" outbuffer) |
2088 (prin1 form outbuffer) | |
2089 nil))) | |
2090 | |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2091 (defvar print-gensym-alist) ;Used before print-circle existed. |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2092 |
10235
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
2093 (defun byte-compile-output-docform (preface name info form specindex quoted) |
12794
913a19cf074a
(byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents:
12726
diff
changeset
|
2094 "Print a form with a doc string. INFO is (prefix doc-index postfix). |
913a19cf074a
(byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents:
12726
diff
changeset
|
2095 If PREFACE and NAME are non-nil, print them too, |
913a19cf074a
(byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents:
12726
diff
changeset
|
2096 before INFO and the FORM but after the doc string itself. |
913a19cf074a
(byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents:
12726
diff
changeset
|
2097 If SPECINDEX is non-nil, it is the index in FORM |
913a19cf074a
(byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents:
12726
diff
changeset
|
2098 of the function bytecode string. In that case, |
913a19cf074a
(byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents:
12726
diff
changeset
|
2099 we output that argument and the following argument (the constants vector) |
913a19cf074a
(byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents:
12726
diff
changeset
|
2100 together, for lazy loading. |
913a19cf074a
(byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents:
12726
diff
changeset
|
2101 QUOTED says that we have to put a quote before the |
913a19cf074a
(byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents:
12726
diff
changeset
|
2102 list that represents a doc string reference. |
19637
baaf02a51ba2
(byte-compile-output-file-form): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
18960
diff
changeset
|
2103 `autoload' and `custom-declare-variable' need that." |
12794
913a19cf074a
(byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents:
12726
diff
changeset
|
2104 ;; We need to examine byte-compile-dynamic-docstrings |
913a19cf074a
(byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents:
12726
diff
changeset
|
2105 ;; in the input buffer (now current), not in the output buffer. |
913a19cf074a
(byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents:
12726
diff
changeset
|
2106 (let ((dynamic-docstrings byte-compile-dynamic-docstrings)) |
82791
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2107 (with-current-buffer outbuffer |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2108 (let (position) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2109 |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2110 ;; Insert the doc string, and make it a comment with #@LENGTH. |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2111 (and (>= (nth 1 info) 0) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2112 dynamic-docstrings |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2113 (not byte-compile-compatibility) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2114 (progn |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2115 ;; Make the doc string start at beginning of line |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2116 ;; for make-docfile's sake. |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2117 (insert "\n") |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2118 (setq position |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2119 (byte-compile-output-as-comment |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2120 (nth (nth 1 info) form) nil)) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2121 (setq position (- (position-bytes position) (point-min) -1)) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2122 ;; If the doc string starts with * (a user variable), |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2123 ;; negate POSITION. |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2124 (if (and (stringp (nth (nth 1 info) form)) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2125 (> (length (nth (nth 1 info) form)) 0) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2126 (eq (aref (nth (nth 1 info) form) 0) ?*)) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2127 (setq position (- position))))) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2128 |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2129 (if preface |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2130 (progn |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2131 (insert preface) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2132 (prin1 name outbuffer))) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2133 (insert (car info)) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2134 (let ((print-escape-newlines t) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2135 (print-quoted t) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2136 ;; For compatibility with code before print-circle, |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2137 ;; use a cons cell to say that we want |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2138 ;; print-gensym-alist not to be cleared |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2139 ;; between calls to print functions. |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2140 (print-gensym '(t)) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2141 (print-circle ; handle circular data structures |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2142 (not byte-compile-disable-print-circle)) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2143 print-gensym-alist ; was used before print-circle existed. |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2144 (print-continuous-numbering t) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2145 print-number-table |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2146 (index 0)) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2147 (prin1 (car form) outbuffer) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2148 (while (setq form (cdr form)) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2149 (setq index (1+ index)) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2150 (insert " ") |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2151 (cond ((and (numberp specindex) (= index specindex) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2152 ;; Don't handle the definition dynamically |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2153 ;; if it refers (or might refer) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2154 ;; to objects already output |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2155 ;; (for instance, gensyms in the arg list). |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2156 (let (non-nil) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2157 (dotimes (i (length print-number-table)) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2158 (if (aref print-number-table i) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2159 (setq non-nil t))) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2160 (not non-nil))) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2161 ;; Output the byte code and constants specially |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2162 ;; for lazy dynamic loading. |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2163 (let ((position |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2164 (byte-compile-output-as-comment |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2165 (cons (car form) (nth 1 form)) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2166 t))) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2167 (setq position (- (position-bytes position) (point-min) -1)) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2168 (princ (format "(#$ . %d) nil" position) outbuffer) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2169 (setq form (cdr form)) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2170 (setq index (1+ index)))) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2171 ((= index (nth 1 info)) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2172 (if position |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2173 (princ (format (if quoted "'(#$ . %d)" "(#$ . %d)") |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2174 position) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2175 outbuffer) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2176 (let ((print-escape-newlines nil)) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2177 (goto-char (prog1 (1+ (point)) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2178 (prin1 (car form) outbuffer))) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2179 (insert "\\\n") |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2180 (goto-char (point-max))))) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2181 (t |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2182 (prin1 (car form) outbuffer))))) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2183 (insert (nth 2 info))))) |
757 | 2184 nil) |
2185 | |
2186 (defun byte-compile-keep-pending (form &optional handler) | |
2187 (if (memq byte-optimize '(t source)) | |
2188 (setq form (byte-optimize-form form t))) | |
2189 (if handler | |
2190 (let ((for-effect t)) | |
2191 ;; To avoid consing up monstrously large forms at load time, we split | |
2192 ;; the output regularly. | |
3954
cac16b165691
(byte-compile-keep-pending): Handle fset like defalias.
Richard M. Stallman <rms@gnu.org>
parents:
3948
diff
changeset
|
2193 (and (memq (car-safe form) '(fset defalias)) |
cac16b165691
(byte-compile-keep-pending): Handle fset like defalias.
Richard M. Stallman <rms@gnu.org>
parents:
3948
diff
changeset
|
2194 (nthcdr 300 byte-compile-output) |
757 | 2195 (byte-compile-flush-pending)) |
2196 (funcall handler form) | |
2197 (if for-effect | |
2198 (byte-compile-discard))) | |
2199 (byte-compile-form form t)) | |
2200 nil) | |
2201 | |
2202 (defun byte-compile-flush-pending () | |
2203 (if byte-compile-output | |
2204 (let ((form (byte-compile-out-toplevel t 'file))) | |
2205 (cond ((eq (car-safe form) 'progn) | |
29239
86949998e6fd
(byte-compile-callargs-warn): Use subr-arity to check primitives.
Dave Love <fx@gnu.org>
parents:
28441
diff
changeset
|
2206 (mapc 'byte-compile-output-file-form (cdr form))) |
757 | 2207 (form |
2208 (byte-compile-output-file-form form))) | |
2209 (setq byte-compile-constants nil | |
2210 byte-compile-variables nil | |
2211 byte-compile-depth 0 | |
2212 byte-compile-maxdepth 0 | |
2213 byte-compile-output nil)))) | |
2214 | |
2215 (defun byte-compile-file-form (form) | |
2216 (let ((byte-compile-current-form nil) ; close over this for warnings. | |
2217 handler) | |
2218 (cond | |
2219 ((not (consp form)) | |
2220 (byte-compile-keep-pending form)) | |
2221 ((and (symbolp (car form)) | |
2222 (setq handler (get (car form) 'byte-hunk-handler))) | |
2223 (cond ((setq form (funcall handler form)) | |
2224 (byte-compile-flush-pending) | |
2225 (byte-compile-output-file-form form)))) | |
2226 ((eq form (setq form (macroexpand form byte-compile-macro-environment))) | |
2227 (byte-compile-keep-pending form)) | |
2228 (t | |
2229 (byte-compile-file-form form))))) | |
2230 | |
2231 ;; Functions and variables with doc strings must be output separately, | |
2232 ;; so make-docfile can recognise them. Most other things can be output | |
2233 ;; as byte-code. | |
2234 | |
2235 (put 'defsubst 'byte-hunk-handler 'byte-compile-file-form-defsubst) | |
2236 (defun byte-compile-file-form-defsubst (form) | |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2237 (when (assq (nth 1 form) byte-compile-unresolved-functions) |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2238 (setq byte-compile-current-form (nth 1 form)) |
56082
36284d653673
Put `...' around symbols in warning messages.
Richard M. Stallman <rms@gnu.org>
parents:
55694
diff
changeset
|
2239 (byte-compile-warn "defsubst `%s' was used before it was defined" |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2240 (nth 1 form))) |
757 | 2241 (byte-compile-file-form |
2242 (macroexpand form byte-compile-macro-environment)) | |
2243 ;; Return nil so the form is not output twice. | |
2244 nil) | |
2245 | |
2246 (put 'autoload 'byte-hunk-handler 'byte-compile-file-form-autoload) | |
2247 (defun byte-compile-file-form-autoload (form) | |
2248 (and (let ((form form)) | |
2249 (while (if (setq form (cdr form)) (byte-compile-constp (car form)))) | |
2250 (null form)) ;Constants only | |
2251 (eval (nth 5 form)) ;Macro | |
2252 (eval form)) ;Define the autoload. | |
28402 | 2253 ;; Avoid undefined function warnings for the autoload. |
28441
a7b3ff772283
(byte-compile-file-form-autoload): Re-enable new code.
Gerd Moellmann <gerd@gnu.org>
parents:
28422
diff
changeset
|
2254 (if (and (consp (nth 1 form)) |
28402 | 2255 (eq (car (nth 1 form)) 'quote) |
2256 (consp (cdr (nth 1 form))) | |
2257 (symbolp (nth 1 (nth 1 form)))) | |
58154 | 2258 (push (cons (nth 1 (nth 1 form)) |
2259 (cons 'autoload (cdr (cdr form)))) | |
2260 byte-compile-function-environment)) | |
757 | 2261 (if (stringp (nth 3 form)) |
2262 form | |
2263 ;; No doc string, so we can compile this as a normal form. | |
2264 (byte-compile-keep-pending form 'byte-compile-normal-call))) | |
2265 | |
2266 (put 'defvar 'byte-hunk-handler 'byte-compile-file-form-defvar) | |
2267 (put 'defconst 'byte-hunk-handler 'byte-compile-file-form-defvar) | |
2268 (defun byte-compile-file-form-defvar (form) | |
2269 (if (null (nth 3 form)) | |
2270 ;; Since there is no doc string, we can compile this as a normal form, | |
2271 ;; and not do a file-boundary. | |
2272 (byte-compile-keep-pending form) | |
85730
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
2273 (when (byte-compile-warning-enabled-p 'free-vars) |
50573
e80e4ccf1bfc
(byte-compile-file-form-defvar, byte-compile-defvar):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50570
diff
changeset
|
2274 (push (nth 1 form) byte-compile-bound-variables) |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2275 (if (eq (car form) 'defconst) |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2276 (push (nth 1 form) byte-compile-const-variables))) |
757 | 2277 (cond ((consp (nth 2 form)) |
2278 (setq form (copy-sequence form)) | |
2279 (setcar (cdr (cdr form)) | |
2280 (byte-compile-top-level (nth 2 form) nil 'file)))) | |
2281 form)) | |
2282 | |
85989
89ba7e228a5b
(byte-compile-file-form-define-abbrev-table): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
85780
diff
changeset
|
2283 (put 'define-abbrev-table 'byte-hunk-handler 'byte-compile-file-form-define-abbrev-table) |
89ba7e228a5b
(byte-compile-file-form-define-abbrev-table): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
85780
diff
changeset
|
2284 (defun byte-compile-file-form-define-abbrev-table (form) |
89ba7e228a5b
(byte-compile-file-form-define-abbrev-table): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
85780
diff
changeset
|
2285 (when (and (byte-compile-warning-enabled-p 'free-vars) |
89ba7e228a5b
(byte-compile-file-form-define-abbrev-table): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
85780
diff
changeset
|
2286 (eq 'quote (car-safe (car-safe (cdr form))))) |
89ba7e228a5b
(byte-compile-file-form-define-abbrev-table): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
85780
diff
changeset
|
2287 (push (car-safe (cdr (cadr form))) byte-compile-bound-variables)) |
89ba7e228a5b
(byte-compile-file-form-define-abbrev-table): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
85780
diff
changeset
|
2288 (byte-compile-keep-pending form)) |
89ba7e228a5b
(byte-compile-file-form-define-abbrev-table): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
85780
diff
changeset
|
2289 |
17704
00ed998f90d3
(byte-compile-file-form-custom-declare-variable): New function.
Richard M. Stallman <rms@gnu.org>
parents:
17077
diff
changeset
|
2290 (put 'custom-declare-variable 'byte-hunk-handler |
00ed998f90d3
(byte-compile-file-form-custom-declare-variable): New function.
Richard M. Stallman <rms@gnu.org>
parents:
17077
diff
changeset
|
2291 'byte-compile-file-form-custom-declare-variable) |
00ed998f90d3
(byte-compile-file-form-custom-declare-variable): New function.
Richard M. Stallman <rms@gnu.org>
parents:
17077
diff
changeset
|
2292 (defun byte-compile-file-form-custom-declare-variable (form) |
85730
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
2293 (when (byte-compile-warning-enabled-p 'callargs) |
62519
ad1a92f77517
(byte-compile-file-form-custom-declare-variable):
Richard M. Stallman <rms@gnu.org>
parents:
62319
diff
changeset
|
2294 (byte-compile-nogroup-warn form)) |
85730
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
2295 (when (byte-compile-warning-enabled-p 'free-vars) |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2296 (push (nth 1 (nth 1 form)) byte-compile-bound-variables)) |
86336
5dde93581c8f
(byte-compile-file-form-custom-declare-variable): Simplify.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
86222
diff
changeset
|
2297 ;; Don't compile the expression because it may be displayed to the user. |
5dde93581c8f
(byte-compile-file-form-custom-declare-variable): Simplify.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
86222
diff
changeset
|
2298 ;; (when (eq (car-safe (nth 2 form)) 'quote) |
5dde93581c8f
(byte-compile-file-form-custom-declare-variable): Simplify.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
86222
diff
changeset
|
2299 ;; ;; (nth 2 form) is meant to evaluate to an expression, so if we have the |
5dde93581c8f
(byte-compile-file-form-custom-declare-variable): Simplify.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
86222
diff
changeset
|
2300 ;; ;; final value already, we can byte-compile it. |
5dde93581c8f
(byte-compile-file-form-custom-declare-variable): Simplify.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
86222
diff
changeset
|
2301 ;; (setcar (cdr (nth 2 form)) |
5dde93581c8f
(byte-compile-file-form-custom-declare-variable): Simplify.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
86222
diff
changeset
|
2302 ;; (byte-compile-top-level (cadr (nth 2 form)) nil 'file))) |
49440
3f0a84732a62
(byte-compile-file-form-custom-declare-variable):
Richard M. Stallman <rms@gnu.org>
parents:
48822
diff
changeset
|
2303 (let ((tail (nthcdr 4 form))) |
3f0a84732a62
(byte-compile-file-form-custom-declare-variable):
Richard M. Stallman <rms@gnu.org>
parents:
48822
diff
changeset
|
2304 (while tail |
86336
5dde93581c8f
(byte-compile-file-form-custom-declare-variable): Simplify.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
86222
diff
changeset
|
2305 (unless (keywordp (car tail)) ;No point optimizing keywords. |
5dde93581c8f
(byte-compile-file-form-custom-declare-variable): Simplify.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
86222
diff
changeset
|
2306 ;; Compile the keyword arguments. |
5dde93581c8f
(byte-compile-file-form-custom-declare-variable): Simplify.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
86222
diff
changeset
|
2307 (setcar tail (byte-compile-top-level (car tail) nil 'file))) |
49440
3f0a84732a62
(byte-compile-file-form-custom-declare-variable):
Richard M. Stallman <rms@gnu.org>
parents:
48822
diff
changeset
|
2308 (setq tail (cdr tail)))) |
17704
00ed998f90d3
(byte-compile-file-form-custom-declare-variable): New function.
Richard M. Stallman <rms@gnu.org>
parents:
17077
diff
changeset
|
2309 form) |
00ed998f90d3
(byte-compile-file-form-custom-declare-variable): New function.
Richard M. Stallman <rms@gnu.org>
parents:
17077
diff
changeset
|
2310 |
57518
25bf13fe1c10
(byte-compile-eval): Don't process
Richard M. Stallman <rms@gnu.org>
parents:
57004
diff
changeset
|
2311 (put 'require 'byte-hunk-handler 'byte-compile-file-form-require) |
25bf13fe1c10
(byte-compile-eval): Don't process
Richard M. Stallman <rms@gnu.org>
parents:
57004
diff
changeset
|
2312 (defun byte-compile-file-form-require (form) |
81333
fc32f1336974
(byte-compile-current-group): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81295
diff
changeset
|
2313 (let ((args (mapcar 'eval (cdr form)))) |
57518
25bf13fe1c10
(byte-compile-eval): Don't process
Richard M. Stallman <rms@gnu.org>
parents:
57004
diff
changeset
|
2314 (apply 'require args) |
59061 | 2315 ;; Detect (require 'cl) in a way that works even if cl is already loaded. |
57518
25bf13fe1c10
(byte-compile-eval): Don't process
Richard M. Stallman <rms@gnu.org>
parents:
57004
diff
changeset
|
2316 (if (member (car args) '("cl" cl)) |
85730
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
2317 (byte-compile-disable-warning 'cl-functions))) |
757 | 2318 (byte-compile-keep-pending form 'byte-compile-normal-call)) |
2319 | |
2320 (put 'progn 'byte-hunk-handler 'byte-compile-file-form-progn) | |
2321 (put 'prog1 'byte-hunk-handler 'byte-compile-file-form-progn) | |
2322 (put 'prog2 'byte-hunk-handler 'byte-compile-file-form-progn) | |
2323 (defun byte-compile-file-form-progn (form) | |
29239
86949998e6fd
(byte-compile-callargs-warn): Use subr-arity to check primitives.
Dave Love <fx@gnu.org>
parents:
28441
diff
changeset
|
2324 (mapc 'byte-compile-file-form (cdr form)) |
757 | 2325 ;; Return nil so the forms are not output twice. |
2326 nil) | |
2327 | |
2328 ;; This handler is not necessary, but it makes the output from dont-compile | |
2329 ;; and similar macros cleaner. | |
2330 (put 'eval 'byte-hunk-handler 'byte-compile-file-form-eval) | |
2331 (defun byte-compile-file-form-eval (form) | |
2332 (if (eq (car-safe (nth 1 form)) 'quote) | |
2333 (nth 1 (nth 1 form)) | |
2334 (byte-compile-keep-pending form))) | |
2335 | |
2336 (put 'defun 'byte-hunk-handler 'byte-compile-file-form-defun) | |
2337 (defun byte-compile-file-form-defun (form) | |
2338 (byte-compile-file-form-defmumble form nil)) | |
2339 | |
2340 (put 'defmacro 'byte-hunk-handler 'byte-compile-file-form-defmacro) | |
2341 (defun byte-compile-file-form-defmacro (form) | |
2342 (byte-compile-file-form-defmumble form t)) | |
2343 | |
2344 (defun byte-compile-file-form-defmumble (form macrop) | |
2345 (let* ((name (car (cdr form))) | |
2346 (this-kind (if macrop 'byte-compile-macro-environment | |
2347 'byte-compile-function-environment)) | |
2348 (that-kind (if macrop 'byte-compile-function-environment | |
2349 'byte-compile-macro-environment)) | |
2350 (this-one (assq name (symbol-value this-kind))) | |
2351 (that-one (assq name (symbol-value that-kind))) | |
2352 (byte-compile-free-references nil) | |
2353 (byte-compile-free-assignments nil)) | |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
2354 (byte-compile-set-symbol-position name) |
757 | 2355 ;; When a function or macro is defined, add it to the call tree so that |
2356 ;; we can tell when functions are not used. | |
2357 (if byte-compile-generate-call-tree | |
2358 (or (assq name byte-compile-call-tree) | |
2359 (setq byte-compile-call-tree | |
2360 (cons (list name nil nil) byte-compile-call-tree)))) | |
2361 | |
2362 (setq byte-compile-current-form name) ; for warnings | |
85730
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
2363 (if (byte-compile-warning-enabled-p 'redefine) |
757 | 2364 (byte-compile-arglist-warn form macrop)) |
2365 (if byte-compile-verbose | |
10687
1bd70186f894
(byte-compile-file-form-defmumble, display-call-tree): Print ellipsis earlier,
Karl Heuer <kwzh@gnu.org>
parents:
10514
diff
changeset
|
2366 (message "Compiling %s... (%s)" (or filename "") (nth 1 form))) |
757 | 2367 (cond (that-one |
85730
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
2368 (if (and (byte-compile-warning-enabled-p 'redefine) |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
2369 ;; don't warn when compiling the stubs in byte-run... |
757 | 2370 (not (assq (nth 1 form) |
2371 byte-compile-initial-macro-environment))) | |
2372 (byte-compile-warn | |
56082
36284d653673
Put `...' around symbols in warning messages.
Richard M. Stallman <rms@gnu.org>
parents:
55694
diff
changeset
|
2373 "`%s' defined multiple times, as both function and macro" |
757 | 2374 (nth 1 form))) |
2375 (setcdr that-one nil)) | |
2376 (this-one | |
85730
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
2377 (when (and (byte-compile-warning-enabled-p 'redefine) |
757 | 2378 ;; hack: don't warn when compiling the magic internal |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
2379 ;; byte-compiler macros in byte-run.el... |
757 | 2380 (not (assq (nth 1 form) |
2381 byte-compile-initial-macro-environment))) | |
56082
36284d653673
Put `...' around symbols in warning messages.
Richard M. Stallman <rms@gnu.org>
parents:
55694
diff
changeset
|
2382 (byte-compile-warn "%s `%s' defined multiple times in this file" |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
2383 (if macrop "macro" "function") |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
2384 (nth 1 form)))) |
757 | 2385 ((and (fboundp name) |
2386 (eq (car-safe (symbol-function name)) | |
2387 (if macrop 'lambda 'macro))) | |
85730
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
2388 (when (byte-compile-warning-enabled-p 'redefine) |
56082
36284d653673
Put `...' around symbols in warning messages.
Richard M. Stallman <rms@gnu.org>
parents:
55694
diff
changeset
|
2389 (byte-compile-warn "%s `%s' being redefined as a %s" |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
2390 (if macrop "function" "macro") |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
2391 (nth 1 form) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
2392 (if macrop "macro" "function"))) |
757 | 2393 ;; shadow existing definition |
2394 (set this-kind | |
2395 (cons (cons name nil) (symbol-value this-kind)))) | |
2396 ) | |
2397 (let ((body (nthcdr 3 form))) | |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
2398 (when (and (stringp (car body)) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
2399 (symbolp (car-safe (cdr-safe body))) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
2400 (car-safe (cdr-safe body)) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
2401 (stringp (car-safe (cdr-safe (cdr-safe body))))) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
2402 (byte-compile-set-symbol-position (nth 1 form)) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
2403 (byte-compile-warn "probable `\"' without `\\' in doc string of %s" |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
2404 (nth 1 form)))) |
47912 | 2405 |
44130
a9c023f8b14b
(byte-compile-file-form-defmumble):
Gerd Moellmann <gerd@gnu.org>
parents:
44103
diff
changeset
|
2406 ;; Generate code for declarations in macro definitions. |
a9c023f8b14b
(byte-compile-file-form-defmumble):
Gerd Moellmann <gerd@gnu.org>
parents:
44103
diff
changeset
|
2407 ;; Remove declarations from the body of the macro definition. |
a9c023f8b14b
(byte-compile-file-form-defmumble):
Gerd Moellmann <gerd@gnu.org>
parents:
44103
diff
changeset
|
2408 (when macrop |
a9c023f8b14b
(byte-compile-file-form-defmumble):
Gerd Moellmann <gerd@gnu.org>
parents:
44103
diff
changeset
|
2409 (let ((tail (nthcdr 2 form))) |
a9c023f8b14b
(byte-compile-file-form-defmumble):
Gerd Moellmann <gerd@gnu.org>
parents:
44103
diff
changeset
|
2410 (when (stringp (car (cdr tail))) |
a9c023f8b14b
(byte-compile-file-form-defmumble):
Gerd Moellmann <gerd@gnu.org>
parents:
44103
diff
changeset
|
2411 (setq tail (cdr tail))) |
a9c023f8b14b
(byte-compile-file-form-defmumble):
Gerd Moellmann <gerd@gnu.org>
parents:
44103
diff
changeset
|
2412 (while (and (consp (car (cdr tail))) |
a9c023f8b14b
(byte-compile-file-form-defmumble):
Gerd Moellmann <gerd@gnu.org>
parents:
44103
diff
changeset
|
2413 (eq (car (car (cdr tail))) 'declare)) |
a9c023f8b14b
(byte-compile-file-form-defmumble):
Gerd Moellmann <gerd@gnu.org>
parents:
44103
diff
changeset
|
2414 (let ((declaration (car (cdr tail)))) |
a9c023f8b14b
(byte-compile-file-form-defmumble):
Gerd Moellmann <gerd@gnu.org>
parents:
44103
diff
changeset
|
2415 (setcdr tail (cdr (cdr tail))) |
76740
212e8c8f31b0
(byte-compile-file-form-defmumble): Use prin1 instead of princ.
Richard M. Stallman <rms@gnu.org>
parents:
76463
diff
changeset
|
2416 (prin1 `(if macro-declaration-function |
44130
a9c023f8b14b
(byte-compile-file-form-defmumble):
Gerd Moellmann <gerd@gnu.org>
parents:
44103
diff
changeset
|
2417 (funcall macro-declaration-function |
a9c023f8b14b
(byte-compile-file-form-defmumble):
Gerd Moellmann <gerd@gnu.org>
parents:
44103
diff
changeset
|
2418 ',name ',declaration)) |
a9c023f8b14b
(byte-compile-file-form-defmumble):
Gerd Moellmann <gerd@gnu.org>
parents:
44103
diff
changeset
|
2419 outbuffer))))) |
47912 | 2420 |
66317
3f882faaa9ae
(byte-compile-lambda): Add parameter add-lambda.
Lars Hansen <larsh@soem.dk>
parents:
64751
diff
changeset
|
2421 (let* ((new-one (byte-compile-lambda (nthcdr 2 form) t)) |
757 | 2422 (code (byte-compile-byte-code-maker new-one))) |
2423 (if this-one | |
2424 (setcdr this-one new-one) | |
2425 (set this-kind | |
2426 (cons (cons name new-one) (symbol-value this-kind)))) | |
2427 (if (and (stringp (nth 3 form)) | |
2428 (eq 'quote (car-safe code)) | |
2429 (eq 'lambda (car-safe (nth 1 code)))) | |
2430 (cons (car form) | |
2431 (cons name (cdr (nth 1 code)))) | |
10235
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
2432 (byte-compile-flush-pending) |
757 | 2433 (if (not (stringp (nth 3 form))) |
10235
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
2434 ;; No doc string. Provide -1 as the "doc string index" |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
2435 ;; so that no element will be treated as a doc string. |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
2436 (byte-compile-output-docform |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
2437 (if (byte-compile-version-cond byte-compile-compatibility) |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
2438 "\n(fset '" "\n(defalias '") |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
2439 name |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
2440 (cond ((atom code) |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
2441 (if macrop '(" '(macro . #[" -1 "])") '(" #[" -1 "]"))) |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
2442 ((eq (car code) 'quote) |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
2443 (setq code new-one) |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
2444 (if macrop '(" '(macro " -1 ")") '(" '(" -1 ")"))) |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
2445 ((if macrop '(" (cons 'macro (" -1 "))") '(" (" -1 ")")))) |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
2446 (append code nil) |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
2447 (and (atom code) byte-compile-dynamic |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
2448 1) |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
2449 nil) |
757 | 2450 ;; Output the form by hand, that's much simpler than having |
2566
4f201a4ab030
(define-function): Changed name back to defalisaases to get things in
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2544
diff
changeset
|
2451 ;; b-c-output-file-form analyze the defalias. |
757 | 2452 (byte-compile-output-docform |
10235
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
2453 (if (byte-compile-version-cond byte-compile-compatibility) |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
2454 "\n(fset '" "\n(defalias '") |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
2455 name |
757 | 2456 (cond ((atom code) |
2457 (if macrop '(" '(macro . #[" 4 "])") '(" #[" 4 "]"))) | |
2458 ((eq (car code) 'quote) | |
2459 (setq code new-one) | |
2460 (if macrop '(" '(macro " 2 ")") '(" '(" 2 ")"))) | |
2461 ((if macrop '(" (cons 'macro (" 5 "))") '(" (" 5 ")")))) | |
10235
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
2462 (append code nil) |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
2463 (and (atom code) byte-compile-dynamic |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
2464 1) |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
2465 nil)) |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
2466 (princ ")" outbuffer) |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
2467 nil)))) |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
2468 |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
2469 ;; Print Lisp object EXP in the output file, inside a comment, |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
2470 ;; and return the file position it will have. |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
2471 ;; If QUOTED is non-nil, print with quoting; otherwise, print without quoting. |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
2472 (defun byte-compile-output-as-comment (exp quoted) |
23135
99ab9c46504a
(byte-compile-output-as-comment):
Kenichi Handa <handa@m17n.org>
parents:
23054
diff
changeset
|
2473 (let ((position (point))) |
82791
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2474 (with-current-buffer outbuffer |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2475 |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2476 ;; Insert EXP, and make it a comment with #@LENGTH. |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2477 (insert " ") |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2478 (if quoted |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2479 (prin1 exp outbuffer) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2480 (princ exp outbuffer)) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2481 (goto-char position) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2482 ;; Quote certain special characters as needed. |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2483 ;; get_doc_string in doc.c does the unquoting. |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2484 (while (search-forward "\^A" nil t) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2485 (replace-match "\^A\^A" t t)) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2486 (goto-char position) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2487 (while (search-forward "\000" nil t) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2488 (replace-match "\^A0" t t)) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2489 (goto-char position) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2490 (while (search-forward "\037" nil t) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2491 (replace-match "\^A_" t t)) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2492 (goto-char (point-max)) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2493 (insert "\037") |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2494 (goto-char position) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2495 (insert "#@" (format "%d" (- (position-bytes (point-max)) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2496 (position-bytes position)))) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2497 |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2498 ;; Save the file position of the object. |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2499 ;; Note we should add 1 to skip the space |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2500 ;; that we inserted before the actual doc string, |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2501 ;; and subtract 1 to convert from an 1-origin Emacs position |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2502 ;; to a file position; they cancel. |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2503 (setq position (point)) |
25892386493b
(byte-compile-output-docform, byte-compile-output-as-comment):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82503
diff
changeset
|
2504 (goto-char (point-max))) |
10235
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
2505 position)) |
ff7189e5e459
(byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9802
diff
changeset
|
2506 |
757 | 2507 |
2508 | |
819
5bbabfcef929
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
784
diff
changeset
|
2509 ;;;###autoload |
757 | 2510 (defun byte-compile (form) |
2511 "If FORM is a symbol, byte-compile its function definition. | |
2512 If FORM is a lambda or a macro, byte-compile it as a function." | |
2513 (displaying-byte-compile-warnings | |
2514 (byte-compile-close-variables | |
2515 (let* ((fun (if (symbolp form) | |
2516 (and (fboundp form) (symbol-function form)) | |
2517 form)) | |
2518 (macro (eq (car-safe fun) 'macro))) | |
2519 (if macro | |
2520 (setq fun (cdr fun))) | |
2521 (cond ((eq (car-safe fun) 'lambda) | |
2522 (setq fun (if macro | |
2523 (cons 'macro (byte-compile-lambda fun)) | |
2524 (byte-compile-lambda fun))) | |
2525 (if (symbolp form) | |
2566
4f201a4ab030
(define-function): Changed name back to defalisaases to get things in
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2544
diff
changeset
|
2526 (defalias form fun) |
757 | 2527 fun))))))) |
2528 | |
2529 (defun byte-compile-sexp (sexp) | |
2530 "Compile and return SEXP." | |
2531 (displaying-byte-compile-warnings | |
2532 (byte-compile-close-variables | |
2533 (byte-compile-top-level sexp)))) | |
2534 | |
2535 ;; Given a function made by byte-compile-lambda, make a form which produces it. | |
2536 (defun byte-compile-byte-code-maker (fun) | |
2537 (cond | |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
2538 ((byte-compile-version-cond byte-compile-compatibility) |
757 | 2539 ;; Return (quote (lambda ...)). |
2540 (list 'quote (byte-compile-byte-code-unmake fun))) | |
2541 ;; ## atom is faster than compiled-func-p. | |
2542 ((atom fun) ; compiled function. | |
2543 ;; generate-emacs19-bytecodes must be on, otherwise byte-compile-lambda | |
2544 ;; would have produced a lambda. | |
16149
eb953f4baf7b
(byte-compile-out-toplevel): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents:
15972
diff
changeset
|
2545 fun) |
757 | 2546 ;; b-c-lambda didn't produce a compiled-function, so it's either a trivial |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
2547 ;; function, or this is Emacs 18, or generate-emacs19-bytecodes is off. |
757 | 2548 ((let (tmp) |
2549 (if (and (setq tmp (assq 'byte-code (cdr-safe (cdr fun)))) | |
2550 (null (cdr (memq tmp fun)))) | |
2551 ;; Generate a make-byte-code call. | |
2552 (let* ((interactive (assq 'interactive (cdr (cdr fun))))) | |
2553 (nconc (list 'make-byte-code | |
2554 (list 'quote (nth 1 fun)) ;arglist | |
2555 (nth 1 tmp) ;bytes | |
2556 (nth 2 tmp) ;consts | |
2557 (nth 3 tmp)) ;depth | |
2558 (cond ((stringp (nth 2 fun)) | |
2559 (list (nth 2 fun))) ;doc | |
2560 (interactive | |
2561 (list nil))) | |
2562 (cond (interactive | |
2563 (list (if (or (null (nth 1 interactive)) | |
2564 (stringp (nth 1 interactive))) | |
2565 (nth 1 interactive) | |
2566 ;; Interactive spec is a list or a variable | |
2567 ;; (if it is correct). | |
2568 (list 'quote (nth 1 interactive)))))))) | |
2569 ;; a non-compiled function (probably trivial) | |
2570 (list 'quote fun)))))) | |
2571 | |
2572 ;; Turn a function into an ordinary lambda. Needed for v18 files. | |
2573 (defun byte-compile-byte-code-unmake (function) | |
2574 (if (consp function) | |
2575 function;;It already is a lambda. | |
2576 (setq function (append function nil)) ; turn it into a list | |
2577 (nconc (list 'lambda (nth 0 function)) | |
2578 (and (nth 4 function) (list (nth 4 function))) | |
2579 (if (nthcdr 5 function) | |
2580 (list (cons 'interactive (if (nth 5 function) | |
2581 (nthcdr 5 function))))) | |
2582 (list (list 'byte-code | |
2583 (nth 1 function) (nth 2 function) | |
2584 (nth 3 function)))))) | |
2585 | |
2586 | |
39827
d9f8c7370b3a
(byte-compile-check-lambda-list): New
Gerd Moellmann <gerd@gnu.org>
parents:
39769
diff
changeset
|
2587 (defun byte-compile-check-lambda-list (list) |
d9f8c7370b3a
(byte-compile-check-lambda-list): New
Gerd Moellmann <gerd@gnu.org>
parents:
39769
diff
changeset
|
2588 "Check lambda-list LIST for errors." |
d9f8c7370b3a
(byte-compile-check-lambda-list): New
Gerd Moellmann <gerd@gnu.org>
parents:
39769
diff
changeset
|
2589 (let (vars) |
d9f8c7370b3a
(byte-compile-check-lambda-list): New
Gerd Moellmann <gerd@gnu.org>
parents:
39769
diff
changeset
|
2590 (while list |
d9f8c7370b3a
(byte-compile-check-lambda-list): New
Gerd Moellmann <gerd@gnu.org>
parents:
39769
diff
changeset
|
2591 (let ((arg (car list))) |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
2592 (when (symbolp arg) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
2593 (byte-compile-set-symbol-position arg)) |
40035
2b16a80692ef
Put the *Compile-Log* buffer in `compilation-mode'.
Sam Steingold <sds@gnu.org>
parents:
39852
diff
changeset
|
2594 (cond ((or (not (symbolp arg)) |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2595 (byte-compile-const-symbol-p arg t)) |
39827
d9f8c7370b3a
(byte-compile-check-lambda-list): New
Gerd Moellmann <gerd@gnu.org>
parents:
39769
diff
changeset
|
2596 (error "Invalid lambda variable %s" arg)) |
d9f8c7370b3a
(byte-compile-check-lambda-list): New
Gerd Moellmann <gerd@gnu.org>
parents:
39769
diff
changeset
|
2597 ((eq arg '&rest) |
d9f8c7370b3a
(byte-compile-check-lambda-list): New
Gerd Moellmann <gerd@gnu.org>
parents:
39769
diff
changeset
|
2598 (unless (cdr list) |
d9f8c7370b3a
(byte-compile-check-lambda-list): New
Gerd Moellmann <gerd@gnu.org>
parents:
39769
diff
changeset
|
2599 (error "&rest without variable name")) |
d9f8c7370b3a
(byte-compile-check-lambda-list): New
Gerd Moellmann <gerd@gnu.org>
parents:
39769
diff
changeset
|
2600 (when (cddr list) |
d9f8c7370b3a
(byte-compile-check-lambda-list): New
Gerd Moellmann <gerd@gnu.org>
parents:
39769
diff
changeset
|
2601 (error "Garbage following &rest VAR in lambda-list"))) |
d9f8c7370b3a
(byte-compile-check-lambda-list): New
Gerd Moellmann <gerd@gnu.org>
parents:
39769
diff
changeset
|
2602 ((eq arg '&optional) |
d9f8c7370b3a
(byte-compile-check-lambda-list): New
Gerd Moellmann <gerd@gnu.org>
parents:
39769
diff
changeset
|
2603 (unless (cdr list) |
d9f8c7370b3a
(byte-compile-check-lambda-list): New
Gerd Moellmann <gerd@gnu.org>
parents:
39769
diff
changeset
|
2604 (error "Variable name missing after &optional"))) |
d9f8c7370b3a
(byte-compile-check-lambda-list): New
Gerd Moellmann <gerd@gnu.org>
parents:
39769
diff
changeset
|
2605 ((memq arg vars) |
39852
00ea1715c90a
(byte-compile-check-lambda-list):
Gerd Moellmann <gerd@gnu.org>
parents:
39827
diff
changeset
|
2606 (byte-compile-warn "repeated variable %s in lambda-list" arg)) |
40035
2b16a80692ef
Put the *Compile-Log* buffer in `compilation-mode'.
Sam Steingold <sds@gnu.org>
parents:
39852
diff
changeset
|
2607 (t |
39827
d9f8c7370b3a
(byte-compile-check-lambda-list): New
Gerd Moellmann <gerd@gnu.org>
parents:
39769
diff
changeset
|
2608 (push arg vars)))) |
d9f8c7370b3a
(byte-compile-check-lambda-list): New
Gerd Moellmann <gerd@gnu.org>
parents:
39769
diff
changeset
|
2609 (setq list (cdr list))))) |
d9f8c7370b3a
(byte-compile-check-lambda-list): New
Gerd Moellmann <gerd@gnu.org>
parents:
39769
diff
changeset
|
2610 |
d9f8c7370b3a
(byte-compile-check-lambda-list): New
Gerd Moellmann <gerd@gnu.org>
parents:
39769
diff
changeset
|
2611 |
757 | 2612 ;; Byte-compile a lambda-expression and return a valid function. |
2613 ;; The value is usually a compiled function but may be the original | |
2614 ;; lambda-expression. | |
66317
3f882faaa9ae
(byte-compile-lambda): Add parameter add-lambda.
Lars Hansen <larsh@soem.dk>
parents:
64751
diff
changeset
|
2615 ;; When ADD-LAMBDA is non-nil, the symbol `lambda' is added as head |
3f882faaa9ae
(byte-compile-lambda): Add parameter add-lambda.
Lars Hansen <larsh@soem.dk>
parents:
64751
diff
changeset
|
2616 ;; of the list FUN and `byte-compile-set-symbol-position' is not called. |
3f882faaa9ae
(byte-compile-lambda): Add parameter add-lambda.
Lars Hansen <larsh@soem.dk>
parents:
64751
diff
changeset
|
2617 ;; Use this feature to avoid calling `byte-compile-set-symbol-position' |
3f882faaa9ae
(byte-compile-lambda): Add parameter add-lambda.
Lars Hansen <larsh@soem.dk>
parents:
64751
diff
changeset
|
2618 ;; for symbols generated by the byte compiler itself. |
3f882faaa9ae
(byte-compile-lambda): Add parameter add-lambda.
Lars Hansen <larsh@soem.dk>
parents:
64751
diff
changeset
|
2619 (defun byte-compile-lambda (fun &optional add-lambda) |
3f882faaa9ae
(byte-compile-lambda): Add parameter add-lambda.
Lars Hansen <larsh@soem.dk>
parents:
64751
diff
changeset
|
2620 (if add-lambda |
3f882faaa9ae
(byte-compile-lambda): Add parameter add-lambda.
Lars Hansen <larsh@soem.dk>
parents:
64751
diff
changeset
|
2621 (setq fun (cons 'lambda fun)) |
3f882faaa9ae
(byte-compile-lambda): Add parameter add-lambda.
Lars Hansen <larsh@soem.dk>
parents:
64751
diff
changeset
|
2622 (unless (eq 'lambda (car-safe fun)) |
3f882faaa9ae
(byte-compile-lambda): Add parameter add-lambda.
Lars Hansen <larsh@soem.dk>
parents:
64751
diff
changeset
|
2623 (error "Not a lambda list: %S" fun)) |
3f882faaa9ae
(byte-compile-lambda): Add parameter add-lambda.
Lars Hansen <larsh@soem.dk>
parents:
64751
diff
changeset
|
2624 (byte-compile-set-symbol-position 'lambda)) |
39827
d9f8c7370b3a
(byte-compile-check-lambda-list): New
Gerd Moellmann <gerd@gnu.org>
parents:
39769
diff
changeset
|
2625 (byte-compile-check-lambda-list (nth 1 fun)) |
757 | 2626 (let* ((arglist (nth 1 fun)) |
2627 (byte-compile-bound-variables | |
85730
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
2628 (nconc (and (byte-compile-warning-enabled-p 'free-vars) |
757 | 2629 (delq '&rest (delq '&optional (copy-sequence arglist)))) |
2630 byte-compile-bound-variables)) | |
2631 (body (cdr (cdr fun))) | |
2632 (doc (if (stringp (car body)) | |
2633 (prog1 (car body) | |
16232
d79492598ec8
(byte-compile-lambda): If the doc string is also the
Richard M. Stallman <rms@gnu.org>
parents:
16159
diff
changeset
|
2634 ;; Discard the doc string |
d79492598ec8
(byte-compile-lambda): If the doc string is also the
Richard M. Stallman <rms@gnu.org>
parents:
16159
diff
changeset
|
2635 ;; unless it is the last element of the body. |
22350
745759e4e099
(byte-compile-lambda): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents:
22136
diff
changeset
|
2636 (if (cdr body) |
16232
d79492598ec8
(byte-compile-lambda): If the doc string is also the
Richard M. Stallman <rms@gnu.org>
parents:
16159
diff
changeset
|
2637 (setq body (cdr body)))))) |
757 | 2638 (int (assq 'interactive body))) |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2639 ;; Process the interactive spec. |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2640 (when int |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2641 (byte-compile-set-symbol-position 'interactive) |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2642 ;; Skip (interactive) if it is in front (the most usual location). |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2643 (if (eq int (car body)) |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2644 (setq body (cdr body))) |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2645 (cond ((consp (cdr int)) |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2646 (if (cdr (cdr int)) |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2647 (byte-compile-warn "malformed interactive spec: %s" |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2648 (prin1-to-string int))) |
53753
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
2649 ;; If the interactive spec is a call to `list', don't |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
2650 ;; compile it, because `call-interactively' looks at the |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
2651 ;; args of `list'. Actually, compile it to get warnings, |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
2652 ;; but don't use the result. |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2653 (let ((form (nth 1 int))) |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2654 (while (memq (car-safe form) '(let let* progn save-excursion)) |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2655 (while (consp (cdr form)) |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2656 (setq form (cdr form))) |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2657 (setq form (car form))) |
53753
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
2658 (if (eq (car-safe form) 'list) |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
2659 (byte-compile-top-level (nth 1 int)) |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
2660 (setq int (list 'interactive |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
2661 (byte-compile-top-level (nth 1 int))))))) |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2662 ((cdr int) |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2663 (byte-compile-warn "malformed interactive spec: %s" |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2664 (prin1-to-string int))))) |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2665 ;; Process the body. |
757 | 2666 (let ((compiled (byte-compile-top-level (cons 'progn body) nil 'lambda))) |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2667 ;; Build the actual byte-coded function. |
757 | 2668 (if (and (eq 'byte-code (car-safe compiled)) |
1882
83fc53d66a31
(byte-compile-lambda): Test of byte-compile-compatibility was backwards.
Richard M. Stallman <rms@gnu.org>
parents:
1819
diff
changeset
|
2669 (not (byte-compile-version-cond |
83fc53d66a31
(byte-compile-lambda): Test of byte-compile-compatibility was backwards.
Richard M. Stallman <rms@gnu.org>
parents:
1819
diff
changeset
|
2670 byte-compile-compatibility))) |
757 | 2671 (apply 'make-byte-code |
2672 (append (list arglist) | |
2673 ;; byte-string, constants-vector, stack depth | |
2674 (cdr compiled) | |
2675 ;; optionally, the doc string. | |
2676 (if (or doc int) | |
2677 (list doc)) | |
2678 ;; optionally, the interactive spec. | |
2679 (if int | |
2680 (list (nth 1 int))))) | |
2681 (setq compiled | |
2682 (nconc (if int (list int)) | |
2683 (cond ((eq (car-safe compiled) 'progn) (cdr compiled)) | |
2684 (compiled (list compiled))))) | |
2685 (nconc (list 'lambda arglist) | |
2686 (if (or doc (stringp (car compiled))) | |
2687 (cons doc (cond (compiled) | |
2688 (body (list nil)))) | |
2689 compiled)))))) | |
2690 | |
2691 (defun byte-compile-constants-vector () | |
2692 ;; Builds the constants-vector from the current variables and constants. | |
2693 ;; This modifies the constants from (const . nil) to (const . offset). | |
2694 ;; To keep the byte-codes to look up the vector as short as possible: | |
2695 ;; First 6 elements are vars, as there are one-byte varref codes for those. | |
2696 ;; Next up to byte-constant-limit are constants, still with one-byte codes. | |
2697 ;; Next variables again, to get 2-byte codes for variable lookup. | |
2698 ;; The rest of the constants and variables need 3-byte byte-codes. | |
2699 (let* ((i -1) | |
2700 (rest (nreverse byte-compile-variables)) ; nreverse because the first | |
2701 (other (nreverse byte-compile-constants)) ; vars often are used most. | |
2702 ret tmp | |
2703 (limits '(5 ; Use the 1-byte varref codes, | |
2704 63 ; 1-constlim ; 1-byte byte-constant codes, | |
2705 255 ; 2-byte varref codes, | |
2706 65535)) ; 3-byte codes for the rest. | |
2707 limit) | |
2708 (while (or rest other) | |
2709 (setq limit (car limits)) | |
2710 (while (and rest (not (eq i limit))) | |
2711 (if (setq tmp (assq (car (car rest)) ret)) | |
2712 (setcdr (car rest) (cdr tmp)) | |
2713 (setcdr (car rest) (setq i (1+ i))) | |
2714 (setq ret (cons (car rest) ret))) | |
2715 (setq rest (cdr rest))) | |
2716 (setq limits (cdr limits) | |
2717 rest (prog1 other | |
2718 (setq other rest)))) | |
2719 (apply 'vector (nreverse (mapcar 'car ret))))) | |
2720 | |
2721 ;; Given an expression FORM, compile it and return an equivalent byte-code | |
2722 ;; expression (a call to the function byte-code). | |
2723 (defun byte-compile-top-level (form &optional for-effect output-type) | |
2724 ;; OUTPUT-TYPE advises about how form is expected to be used: | |
2725 ;; 'eval or nil -> a single form, | |
2726 ;; 'progn or t -> a list of forms, | |
2727 ;; 'lambda -> body of a lambda, | |
2728 ;; 'file -> used at file-level. | |
8446
0199ece40d91
(byte-compile-protect-from-advice): Macro deleted.
Richard M. Stallman <rms@gnu.org>
parents:
8115
diff
changeset
|
2729 (let ((byte-compile-constants nil) |
0199ece40d91
(byte-compile-protect-from-advice): Macro deleted.
Richard M. Stallman <rms@gnu.org>
parents:
8115
diff
changeset
|
2730 (byte-compile-variables nil) |
0199ece40d91
(byte-compile-protect-from-advice): Macro deleted.
Richard M. Stallman <rms@gnu.org>
parents:
8115
diff
changeset
|
2731 (byte-compile-tag-number 0) |
0199ece40d91
(byte-compile-protect-from-advice): Macro deleted.
Richard M. Stallman <rms@gnu.org>
parents:
8115
diff
changeset
|
2732 (byte-compile-depth 0) |
0199ece40d91
(byte-compile-protect-from-advice): Macro deleted.
Richard M. Stallman <rms@gnu.org>
parents:
8115
diff
changeset
|
2733 (byte-compile-maxdepth 0) |
0199ece40d91
(byte-compile-protect-from-advice): Macro deleted.
Richard M. Stallman <rms@gnu.org>
parents:
8115
diff
changeset
|
2734 (byte-compile-output nil)) |
6081
65adb7b035fd
(byte-compile-protect-from-advice): New macro that
Richard M. Stallman <rms@gnu.org>
parents:
6043
diff
changeset
|
2735 (if (memq byte-optimize '(t source)) |
65adb7b035fd
(byte-compile-protect-from-advice): New macro that
Richard M. Stallman <rms@gnu.org>
parents:
6043
diff
changeset
|
2736 (setq form (byte-optimize-form form for-effect))) |
65adb7b035fd
(byte-compile-protect-from-advice): New macro that
Richard M. Stallman <rms@gnu.org>
parents:
6043
diff
changeset
|
2737 (while (and (eq (car-safe form) 'progn) (null (cdr (cdr form)))) |
65adb7b035fd
(byte-compile-protect-from-advice): New macro that
Richard M. Stallman <rms@gnu.org>
parents:
6043
diff
changeset
|
2738 (setq form (nth 1 form))) |
65adb7b035fd
(byte-compile-protect-from-advice): New macro that
Richard M. Stallman <rms@gnu.org>
parents:
6043
diff
changeset
|
2739 (if (and (eq 'byte-code (car-safe form)) |
65adb7b035fd
(byte-compile-protect-from-advice): New macro that
Richard M. Stallman <rms@gnu.org>
parents:
6043
diff
changeset
|
2740 (not (memq byte-optimize '(t byte))) |
65adb7b035fd
(byte-compile-protect-from-advice): New macro that
Richard M. Stallman <rms@gnu.org>
parents:
6043
diff
changeset
|
2741 (stringp (nth 1 form)) (vectorp (nth 2 form)) |
65adb7b035fd
(byte-compile-protect-from-advice): New macro that
Richard M. Stallman <rms@gnu.org>
parents:
6043
diff
changeset
|
2742 (natnump (nth 3 form))) |
65adb7b035fd
(byte-compile-protect-from-advice): New macro that
Richard M. Stallman <rms@gnu.org>
parents:
6043
diff
changeset
|
2743 form |
65adb7b035fd
(byte-compile-protect-from-advice): New macro that
Richard M. Stallman <rms@gnu.org>
parents:
6043
diff
changeset
|
2744 (byte-compile-form form for-effect) |
8446
0199ece40d91
(byte-compile-protect-from-advice): Macro deleted.
Richard M. Stallman <rms@gnu.org>
parents:
8115
diff
changeset
|
2745 (byte-compile-out-toplevel for-effect output-type)))) |
757 | 2746 |
2747 (defun byte-compile-out-toplevel (&optional for-effect output-type) | |
2748 (if for-effect | |
2749 ;; The stack is empty. Push a value to be returned from (byte-code ..). | |
2750 (if (eq (car (car byte-compile-output)) 'byte-discard) | |
2751 (setq byte-compile-output (cdr byte-compile-output)) | |
2752 (byte-compile-push-constant | |
2753 ;; Push any constant - preferably one which already is used, and | |
2754 ;; a number or symbol - ie not some big sequence. The return value | |
2755 ;; isn't returned, but it would be a shame if some textually large | |
2756 ;; constant was not optimized away because we chose to return it. | |
2757 (and (not (assq nil byte-compile-constants)) ; Nil is often there. | |
2758 (let ((tmp (reverse byte-compile-constants))) | |
46003
503e1f14ba3d
(byte-compile-callargs-warn):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45842
diff
changeset
|
2759 (while (and tmp (not (or (symbolp (caar tmp)) |
503e1f14ba3d
(byte-compile-callargs-warn):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45842
diff
changeset
|
2760 (numberp (caar tmp))))) |
757 | 2761 (setq tmp (cdr tmp))) |
46003
503e1f14ba3d
(byte-compile-callargs-warn):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45842
diff
changeset
|
2762 (caar tmp)))))) |
757 | 2763 (byte-compile-out 'byte-return 0) |
2764 (setq byte-compile-output (nreverse byte-compile-output)) | |
2765 (if (memq byte-optimize '(t byte)) | |
2766 (setq byte-compile-output | |
2767 (byte-optimize-lapcode byte-compile-output for-effect))) | |
40035
2b16a80692ef
Put the *Compile-Log* buffer in `compilation-mode'.
Sam Steingold <sds@gnu.org>
parents:
39852
diff
changeset
|
2768 |
757 | 2769 ;; Decompile trivial functions: |
2770 ;; only constants and variables, or a single funcall except in lambdas. | |
2771 ;; Except for Lisp_Compiled objects, forms like (foo "hi") | |
2772 ;; are still quicker than (byte-code "..." [foo "hi"] 2). | |
2773 ;; Note that even (quote foo) must be parsed just as any subr by the | |
2774 ;; interpreter, so quote should be compiled into byte-code in some contexts. | |
2775 ;; What to leave uncompiled: | |
11117
34477ac36e6e
(byte-compile-out-toplevel): Compile lambda forms even if trivial.
Karl Heuer <kwzh@gnu.org>
parents:
10836
diff
changeset
|
2776 ;; lambda -> never. we used to leave it uncompiled if the body was |
34477ac36e6e
(byte-compile-out-toplevel): Compile lambda forms even if trivial.
Karl Heuer <kwzh@gnu.org>
parents:
10836
diff
changeset
|
2777 ;; a single atom, but that causes confusion if the docstring |
34477ac36e6e
(byte-compile-out-toplevel): Compile lambda forms even if trivial.
Karl Heuer <kwzh@gnu.org>
parents:
10836
diff
changeset
|
2778 ;; uses the (file . pos) syntax. Besides, now that we have |
34477ac36e6e
(byte-compile-out-toplevel): Compile lambda forms even if trivial.
Karl Heuer <kwzh@gnu.org>
parents:
10836
diff
changeset
|
2779 ;; the Lisp_Compiled type, the compiled form is faster. |
757 | 2780 ;; eval -> atom, quote or (function atom atom atom) |
2781 ;; progn -> as <<same-as-eval>> or (progn <<same-as-eval>> atom) | |
2782 ;; file -> as progn, but takes both quotes and atoms, and longer forms. | |
2783 (let (rest | |
2784 (maycall (not (eq output-type 'lambda))) ; t if we may make a funcall. | |
2785 tmp body) | |
2786 (cond | |
2787 ;; #### This should be split out into byte-compile-nontrivial-function-p. | |
11117
34477ac36e6e
(byte-compile-out-toplevel): Compile lambda forms even if trivial.
Karl Heuer <kwzh@gnu.org>
parents:
10836
diff
changeset
|
2788 ((or (eq output-type 'lambda) |
34477ac36e6e
(byte-compile-out-toplevel): Compile lambda forms even if trivial.
Karl Heuer <kwzh@gnu.org>
parents:
10836
diff
changeset
|
2789 (nthcdr (if (eq output-type 'file) 50 8) byte-compile-output) |
757 | 2790 (assq 'TAG byte-compile-output) ; Not necessary, but speeds up a bit. |
2791 (not (setq tmp (assq 'byte-return byte-compile-output))) | |
2792 (progn | |
2793 (setq rest (nreverse | |
2794 (cdr (memq tmp (reverse byte-compile-output))))) | |
2795 (while (cond | |
2796 ((memq (car (car rest)) '(byte-varref byte-constant)) | |
2797 (setq tmp (car (cdr (car rest)))) | |
16149
eb953f4baf7b
(byte-compile-out-toplevel): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents:
15972
diff
changeset
|
2798 (if (if (eq (car (car rest)) 'byte-constant) |
eb953f4baf7b
(byte-compile-out-toplevel): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents:
15972
diff
changeset
|
2799 (or (consp tmp) |
eb953f4baf7b
(byte-compile-out-toplevel): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents:
15972
diff
changeset
|
2800 (and (symbolp tmp) |
27824 | 2801 (not (byte-compile-const-symbol-p tmp))))) |
16149
eb953f4baf7b
(byte-compile-out-toplevel): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents:
15972
diff
changeset
|
2802 (if maycall |
eb953f4baf7b
(byte-compile-out-toplevel): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents:
15972
diff
changeset
|
2803 (setq body (cons (list 'quote tmp) body))) |
eb953f4baf7b
(byte-compile-out-toplevel): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents:
15972
diff
changeset
|
2804 (setq body (cons tmp body)))) |
757 | 2805 ((and maycall |
2806 ;; Allow a funcall if at most one atom follows it. | |
2807 (null (nthcdr 3 rest)) | |
2808 (setq tmp (get (car (car rest)) 'byte-opcode-invert)) | |
2809 (or (null (cdr rest)) | |
2810 (and (memq output-type '(file progn t)) | |
2811 (cdr (cdr rest)) | |
2812 (eq (car (nth 1 rest)) 'byte-discard) | |
2813 (progn (setq rest (cdr rest)) t)))) | |
2814 (setq maycall nil) ; Only allow one real function call. | |
2815 (setq body (nreverse body)) | |
2816 (setq body (list | |
2817 (if (and (eq tmp 'funcall) | |
2818 (eq (car-safe (car body)) 'quote)) | |
2819 (cons (nth 1 (car body)) (cdr body)) | |
2820 (cons tmp body)))) | |
2821 (or (eq output-type 'file) | |
2822 (not (delq nil (mapcar 'consp (cdr (car body)))))))) | |
2823 (setq rest (cdr rest))) | |
11117
34477ac36e6e
(byte-compile-out-toplevel): Compile lambda forms even if trivial.
Karl Heuer <kwzh@gnu.org>
parents:
10836
diff
changeset
|
2824 rest)) |
757 | 2825 (let ((byte-compile-vector (byte-compile-constants-vector))) |
2826 (list 'byte-code (byte-compile-lapcode byte-compile-output) | |
2827 byte-compile-vector byte-compile-maxdepth))) | |
2828 ;; it's a trivial function | |
2829 ((cdr body) (cons 'progn (nreverse body))) | |
2830 ((car body))))) | |
2831 | |
2832 ;; Given BODY, compile it and return a new body. | |
2833 (defun byte-compile-top-level-body (body &optional for-effect) | |
2834 (setq body (byte-compile-top-level (cons 'progn body) for-effect t)) | |
2835 (cond ((eq (car-safe body) 'progn) | |
2836 (cdr body)) | |
2837 (body | |
2838 (list body)))) | |
86177
fadd23918501
(byte-compile-declare-function): New function, byte-hunk-handler for
Glenn Morris <rgm@gnu.org>
parents:
86003
diff
changeset
|
2839 |
fadd23918501
(byte-compile-declare-function): New function, byte-hunk-handler for
Glenn Morris <rgm@gnu.org>
parents:
86003
diff
changeset
|
2840 (put 'declare-function 'byte-hunk-handler 'byte-compile-declare-function) |
fadd23918501
(byte-compile-declare-function): New function, byte-hunk-handler for
Glenn Morris <rgm@gnu.org>
parents:
86003
diff
changeset
|
2841 (defun byte-compile-declare-function (form) |
fadd23918501
(byte-compile-declare-function): New function, byte-hunk-handler for
Glenn Morris <rgm@gnu.org>
parents:
86003
diff
changeset
|
2842 (push (cons (nth 1 form) |
86987
7bd1703d4880
(byte-compile-declare-function): Reverse branches of if statement.
Glenn Morris <rgm@gnu.org>
parents:
86840
diff
changeset
|
2843 (if (and (> (length form) 3) |
7bd1703d4880
(byte-compile-declare-function): Reverse branches of if statement.
Glenn Morris <rgm@gnu.org>
parents:
86840
diff
changeset
|
2844 (listp (nth 3 form))) |
7bd1703d4880
(byte-compile-declare-function): Reverse branches of if statement.
Glenn Morris <rgm@gnu.org>
parents:
86840
diff
changeset
|
2845 (list 'declared (nth 3 form)) |
7bd1703d4880
(byte-compile-declare-function): Reverse branches of if statement.
Glenn Morris <rgm@gnu.org>
parents:
86840
diff
changeset
|
2846 t)) ; arglist not specified |
86177
fadd23918501
(byte-compile-declare-function): New function, byte-hunk-handler for
Glenn Morris <rgm@gnu.org>
parents:
86003
diff
changeset
|
2847 byte-compile-function-environment) |
87060
939b10a62bb1
(byte-compile-declare-function): Remove declared function from
Glenn Morris <rgm@gnu.org>
parents:
86987
diff
changeset
|
2848 ;; We are stating that it _will_ be defined at runtime. |
939b10a62bb1
(byte-compile-declare-function): Remove declared function from
Glenn Morris <rgm@gnu.org>
parents:
86987
diff
changeset
|
2849 (setq byte-compile-noruntime-functions |
939b10a62bb1
(byte-compile-declare-function): Remove declared function from
Glenn Morris <rgm@gnu.org>
parents:
86987
diff
changeset
|
2850 (delq (nth 1 form) byte-compile-noruntime-functions)) |
86177
fadd23918501
(byte-compile-declare-function): New function, byte-hunk-handler for
Glenn Morris <rgm@gnu.org>
parents:
86003
diff
changeset
|
2851 nil) |
fadd23918501
(byte-compile-declare-function): New function, byte-hunk-handler for
Glenn Morris <rgm@gnu.org>
parents:
86003
diff
changeset
|
2852 |
757 | 2853 |
28402 | 2854 ;; This is the recursive entry point for compiling each subform of an |
757 | 2855 ;; expression. |
2856 ;; If for-effect is non-nil, byte-compile-form will output a byte-discard | |
2857 ;; before terminating (ie no value will be left on the stack). | |
2858 ;; A byte-compile handler may, when for-effect is non-nil, choose output code | |
2859 ;; which does not leave a value on the stack, and then set for-effect to nil | |
2860 ;; (to prevent byte-compile-form from outputting the byte-discard). | |
2861 ;; If a handler wants to call another handler, it should do so via | |
2862 ;; byte-compile-form, or take extreme care to handle for-effect correctly. | |
2863 ;; (Use byte-compile-form-do-effect to reset the for-effect flag too.) | |
2864 ;; | |
2865 (defun byte-compile-form (form &optional for-effect) | |
2866 (setq form (macroexpand form byte-compile-macro-environment)) | |
2867 (cond ((not (consp form)) | |
27824 | 2868 (cond ((or (not (symbolp form)) (byte-compile-const-symbol-p form)) |
58377
01886d0fea34
(byte-compile-form): Move the calls to byte-compile-set-symbol-position,
Richard M. Stallman <rms@gnu.org>
parents:
58154
diff
changeset
|
2869 (when (symbolp form) |
01886d0fea34
(byte-compile-form): Move the calls to byte-compile-set-symbol-position,
Richard M. Stallman <rms@gnu.org>
parents:
58154
diff
changeset
|
2870 (byte-compile-set-symbol-position form)) |
757 | 2871 (byte-compile-constant form)) |
2872 ((and for-effect byte-compile-delete-errors) | |
58377
01886d0fea34
(byte-compile-form): Move the calls to byte-compile-set-symbol-position,
Richard M. Stallman <rms@gnu.org>
parents:
58154
diff
changeset
|
2873 (when (symbolp form) |
01886d0fea34
(byte-compile-form): Move the calls to byte-compile-set-symbol-position,
Richard M. Stallman <rms@gnu.org>
parents:
58154
diff
changeset
|
2874 (byte-compile-set-symbol-position form)) |
757 | 2875 (setq for-effect nil)) |
2876 (t (byte-compile-variable-ref 'byte-varref form)))) | |
2877 ((symbolp (car form)) | |
2878 (let* ((fn (car form)) | |
2879 (handler (get fn 'byte-compile))) | |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
2880 (when (byte-compile-const-symbol-p fn) |
56082
36284d653673
Put `...' around symbols in warning messages.
Richard M. Stallman <rms@gnu.org>
parents:
55694
diff
changeset
|
2881 (byte-compile-warn "`%s' called as a function" fn)) |
85730
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
2882 (and (byte-compile-warning-enabled-p 'interactive-only) |
62319
150380a7c3d6
(byte-compile-nogroup-warn): New function.
Richard M. Stallman <rms@gnu.org>
parents:
61966
diff
changeset
|
2883 (memq fn byte-compile-interactive-only-functions) |
57881
f57a9010e865
(byte-compile-warning-types): Add interactive-only.
Richard M. Stallman <rms@gnu.org>
parents:
57518
diff
changeset
|
2884 (byte-compile-warn "`%s' used from Lisp code\n\ |
f57a9010e865
(byte-compile-warning-types): Add interactive-only.
Richard M. Stallman <rms@gnu.org>
parents:
57518
diff
changeset
|
2885 That command is designed for interactive use only" fn)) |
757 | 2886 (if (and handler |
69872
f60a24914ee2
(byte-compile-form): Only call cl-byte-compile-compiler-macro if it exists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68167
diff
changeset
|
2887 ;; Make sure that function exists. This is important |
f60a24914ee2
(byte-compile-form): Only call cl-byte-compile-compiler-macro if it exists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68167
diff
changeset
|
2888 ;; for CL compiler macros since the symbol may be |
f60a24914ee2
(byte-compile-form): Only call cl-byte-compile-compiler-macro if it exists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68167
diff
changeset
|
2889 ;; `cl-byte-compile-compiler-macro' but if CL isn't |
f60a24914ee2
(byte-compile-form): Only call cl-byte-compile-compiler-macro if it exists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68167
diff
changeset
|
2890 ;; loaded, this function doesn't exist. |
f60a24914ee2
(byte-compile-form): Only call cl-byte-compile-compiler-macro if it exists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68167
diff
changeset
|
2891 (or (not (memq handler '(cl-byte-compile-compiler-macro))) |
71674
c64592812a59
(byte-compile-form): The `byte-compile'
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
70674
diff
changeset
|
2892 (functionp handler)) |
69872
f60a24914ee2
(byte-compile-form): Only call cl-byte-compile-compiler-macro if it exists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68167
diff
changeset
|
2893 (not (and (byte-compile-version-cond |
f60a24914ee2
(byte-compile-form): Only call cl-byte-compile-compiler-macro if it exists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68167
diff
changeset
|
2894 byte-compile-compatibility) |
f60a24914ee2
(byte-compile-form): Only call cl-byte-compile-compiler-macro if it exists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68167
diff
changeset
|
2895 (get (get fn 'byte-opcode) 'emacs19-opcode)))) |
66317
3f882faaa9ae
(byte-compile-lambda): Add parameter add-lambda.
Lars Hansen <larsh@soem.dk>
parents:
64751
diff
changeset
|
2896 (funcall handler form) |
85730
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
2897 (when (byte-compile-warning-enabled-p 'callargs) |
62319
150380a7c3d6
(byte-compile-nogroup-warn): New function.
Richard M. Stallman <rms@gnu.org>
parents:
61966
diff
changeset
|
2898 (if (memq fn '(custom-declare-group custom-declare-variable custom-declare-face)) |
150380a7c3d6
(byte-compile-nogroup-warn): New function.
Richard M. Stallman <rms@gnu.org>
parents:
61966
diff
changeset
|
2899 (byte-compile-nogroup-warn form)) |
150380a7c3d6
(byte-compile-nogroup-warn): New function.
Richard M. Stallman <rms@gnu.org>
parents:
61966
diff
changeset
|
2900 (byte-compile-callargs-warn form)) |
46136
79f132657570
(byte-compile-warning-types):
Richard M. Stallman <rms@gnu.org>
parents:
46050
diff
changeset
|
2901 (byte-compile-normal-call form)) |
85730
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
2902 (if (byte-compile-warning-enabled-p 'cl-functions) |
46136
79f132657570
(byte-compile-warning-types):
Richard M. Stallman <rms@gnu.org>
parents:
46050
diff
changeset
|
2903 (byte-compile-cl-warn form)))) |
1819
df06a60f3362
* disass.el (disassemble): Add autoload cookie for this.
Jim Blandy <jimb@redhat.com>
parents:
1604
diff
changeset
|
2904 ((and (or (byte-code-function-p (car form)) |
757 | 2905 (eq (car-safe (car form)) 'lambda)) |
2906 ;; if the form comes out the same way it went in, that's | |
2907 ;; because it was malformed, and we couldn't unfold it. | |
2908 (not (eq form (setq form (byte-compile-unfold-lambda form))))) | |
2909 (byte-compile-form form for-effect) | |
2910 (setq for-effect nil)) | |
2911 ((byte-compile-normal-call form))) | |
2912 (if for-effect | |
2913 (byte-compile-discard))) | |
2914 | |
2915 (defun byte-compile-normal-call (form) | |
2916 (if byte-compile-generate-call-tree | |
2917 (byte-compile-annotate-call-tree form)) | |
84746 | 2918 (when (and for-effect (eq (car form) 'mapcar) |
85730
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
2919 (byte-compile-warning-enabled-p 'mapcar)) |
84736
247a13281cd8
Markus Triska <markus.triska at gmx.at>
Glenn Morris <rgm@gnu.org>
parents:
84371
diff
changeset
|
2920 (byte-compile-set-symbol-position 'mapcar) |
247a13281cd8
Markus Triska <markus.triska at gmx.at>
Glenn Morris <rgm@gnu.org>
parents:
84371
diff
changeset
|
2921 (byte-compile-warn |
247a13281cd8
Markus Triska <markus.triska at gmx.at>
Glenn Morris <rgm@gnu.org>
parents:
84371
diff
changeset
|
2922 "`mapcar' called for effect; use `mapc' or `dolist' instead")) |
757 | 2923 (byte-compile-push-constant (car form)) |
29239
86949998e6fd
(byte-compile-callargs-warn): Use subr-arity to check primitives.
Dave Love <fx@gnu.org>
parents:
28441
diff
changeset
|
2924 (mapc 'byte-compile-form (cdr form)) ; wasteful, but faster. |
757 | 2925 (byte-compile-out 'byte-call (length (cdr form)))) |
2926 | |
2927 (defun byte-compile-variable-ref (base-op var) | |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
2928 (when (symbolp var) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
2929 (byte-compile-set-symbol-position var)) |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2930 (if (or (not (symbolp var)) |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2931 (byte-compile-const-symbol-p var (not (eq base-op 'byte-varref)))) |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2932 (byte-compile-warn |
56082
36284d653673
Put `...' around symbols in warning messages.
Richard M. Stallman <rms@gnu.org>
parents:
55694
diff
changeset
|
2933 (cond ((eq base-op 'byte-varbind) "attempt to let-bind %s `%s'") |
36284d653673
Put `...' around symbols in warning messages.
Richard M. Stallman <rms@gnu.org>
parents:
55694
diff
changeset
|
2934 ((eq base-op 'byte-varset) "variable assignment to %s `%s'") |
36284d653673
Put `...' around symbols in warning messages.
Richard M. Stallman <rms@gnu.org>
parents:
55694
diff
changeset
|
2935 (t "variable reference to %s `%s'")) |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2936 (if (symbolp var) "constant" "nonvariable") |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2937 (prin1-to-string var)) |
94355
b5f8ef4e3358
(byte-compile-warn-obsolete): New function.
Glenn Morris <rgm@gnu.org>
parents:
93457
diff
changeset
|
2938 (and (get var 'byte-obsolete-variable) |
b5f8ef4e3358
(byte-compile-warn-obsolete): New function.
Glenn Morris <rgm@gnu.org>
parents:
93457
diff
changeset
|
2939 (not (eq var byte-compile-not-obsolete-var)) |
b5f8ef4e3358
(byte-compile-warn-obsolete): New function.
Glenn Morris <rgm@gnu.org>
parents:
93457
diff
changeset
|
2940 (byte-compile-warn-obsolete var)) |
85730
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
2941 (if (byte-compile-warning-enabled-p 'free-vars) |
757 | 2942 (if (eq base-op 'byte-varbind) |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2943 (push var byte-compile-bound-variables) |
757 | 2944 (or (boundp var) |
2945 (memq var byte-compile-bound-variables) | |
2946 (if (eq base-op 'byte-varset) | |
2947 (or (memq var byte-compile-free-assignments) | |
2948 (progn | |
56082
36284d653673
Put `...' around symbols in warning messages.
Richard M. Stallman <rms@gnu.org>
parents:
55694
diff
changeset
|
2949 (byte-compile-warn "assignment to free variable `%s'" var) |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2950 (push var byte-compile-free-assignments))) |
757 | 2951 (or (memq var byte-compile-free-references) |
2952 (progn | |
56082
36284d653673
Put `...' around symbols in warning messages.
Richard M. Stallman <rms@gnu.org>
parents:
55694
diff
changeset
|
2953 (byte-compile-warn "reference to free variable `%s'" var) |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2954 (push var byte-compile-free-references)))))))) |
757 | 2955 (let ((tmp (assq var byte-compile-variables))) |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2956 (unless tmp |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2957 (setq tmp (list var)) |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
2958 (push tmp byte-compile-variables)) |
757 | 2959 (byte-compile-out base-op tmp))) |
2960 | |
2961 (defmacro byte-compile-get-constant (const) | |
27824 | 2962 `(or (if (stringp ,const) |
74285
bdb0d9c34bd4
(byte-compile-get-constant):
Richard M. Stallman <rms@gnu.org>
parents:
74077
diff
changeset
|
2963 ;; In a string constant, treat properties as significant. |
bdb0d9c34bd4
(byte-compile-get-constant):
Richard M. Stallman <rms@gnu.org>
parents:
74077
diff
changeset
|
2964 (let (result) |
bdb0d9c34bd4
(byte-compile-get-constant):
Richard M. Stallman <rms@gnu.org>
parents:
74077
diff
changeset
|
2965 (dolist (elt byte-compile-constants) |
bdb0d9c34bd4
(byte-compile-get-constant):
Richard M. Stallman <rms@gnu.org>
parents:
74077
diff
changeset
|
2966 (if (equal-including-properties (car elt) ,const) |
bdb0d9c34bd4
(byte-compile-get-constant):
Richard M. Stallman <rms@gnu.org>
parents:
74077
diff
changeset
|
2967 (setq result elt))) |
bdb0d9c34bd4
(byte-compile-get-constant):
Richard M. Stallman <rms@gnu.org>
parents:
74077
diff
changeset
|
2968 result) |
27824 | 2969 (assq ,const byte-compile-constants)) |
2970 (car (setq byte-compile-constants | |
2971 (cons (list ,const) byte-compile-constants))))) | |
757 | 2972 |
2973 ;; Use this when the value of a form is a constant. This obeys for-effect. | |
2974 (defun byte-compile-constant (const) | |
2975 (if for-effect | |
2976 (setq for-effect nil) | |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
2977 (when (symbolp const) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
2978 (byte-compile-set-symbol-position const)) |
757 | 2979 (byte-compile-out 'byte-constant (byte-compile-get-constant const)))) |
2980 | |
2981 ;; Use this for a constant that is not the value of its containing form. | |
2982 ;; This ignores for-effect. | |
2983 (defun byte-compile-push-constant (const) | |
2984 (let ((for-effect nil)) | |
2985 (inline (byte-compile-constant const)))) | |
2986 | |
2987 | |
2988 ;; Compile those primitive ordinary functions | |
2989 ;; which have special byte codes just for speed. | |
2990 | |
2991 (defmacro byte-defop-compiler (function &optional compile-handler) | |
2992 ;; add a compiler-form for FUNCTION. | |
2993 ;; If function is a symbol, then the variable "byte-SYMBOL" must name | |
2994 ;; the opcode to be used. If function is a list, the first element | |
2995 ;; is the function and the second element is the bytecode-symbol. | |
51289
ba101d1e9521
(byte-compile-no-warnings): New function.
Richard M. Stallman <rms@gnu.org>
parents:
50837
diff
changeset
|
2996 ;; The second element may be nil, meaning there is no opcode. |
757 | 2997 ;; COMPILE-HANDLER is the function to use to compile this byte-op, or |
2998 ;; may be the abbreviations 0, 1, 2, 3, 0-1, or 1-2. | |
2999 ;; If it is nil, then the handler is "byte-compile-SYMBOL." | |
3000 (let (opcode) | |
3001 (if (symbolp function) | |
3002 (setq opcode (intern (concat "byte-" (symbol-name function)))) | |
3003 (setq opcode (car (cdr function)) | |
3004 function (car function))) | |
3005 (let ((fnform | |
3006 (list 'put (list 'quote function) ''byte-compile | |
3007 (list 'quote | |
3008 (or (cdr (assq compile-handler | |
3009 '((0 . byte-compile-no-args) | |
3010 (1 . byte-compile-one-arg) | |
3011 (2 . byte-compile-two-args) | |
3012 (3 . byte-compile-three-args) | |
3013 (0-1 . byte-compile-zero-or-one-arg) | |
3014 (1-2 . byte-compile-one-or-two-args) | |
3015 (2-3 . byte-compile-two-or-three-args) | |
3016 ))) | |
3017 compile-handler | |
3018 (intern (concat "byte-compile-" | |
3019 (symbol-name function)))))))) | |
3020 (if opcode | |
3021 (list 'progn fnform | |
3022 (list 'put (list 'quote function) | |
3023 ''byte-opcode (list 'quote opcode)) | |
3024 (list 'put (list 'quote opcode) | |
3025 ''byte-opcode-invert (list 'quote function))) | |
3026 fnform)))) | |
3027 | |
3028 (defmacro byte-defop-compiler19 (function &optional compile-handler) | |
3029 ;; Just like byte-defop-compiler, but defines an opcode that will only | |
3653
974055b516d9
* bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents:
3591
diff
changeset
|
3030 ;; be used when byte-compile-compatibility is false. |
757 | 3031 (if (and (byte-compile-single-version) |
3653
974055b516d9
* bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents:
3591
diff
changeset
|
3032 byte-compile-compatibility) |
958 | 3033 ;; #### instead of doing nothing, this should do some remprops, |
3034 ;; #### to protect against the case where a single-version compiler | |
3035 ;; #### is loaded into a world that has contained a multi-version one. | |
757 | 3036 nil |
3037 (list 'progn | |
3038 (list 'put | |
3039 (list 'quote | |
3040 (or (car (cdr-safe function)) | |
3041 (intern (concat "byte-" | |
3042 (symbol-name (or (car-safe function) function)))))) | |
3043 ''emacs19-opcode t) | |
3044 (list 'byte-defop-compiler function compile-handler)))) | |
3045 | |
3046 (defmacro byte-defop-compiler-1 (function &optional compile-handler) | |
3047 (list 'byte-defop-compiler (list function nil) compile-handler)) | |
3048 | |
3049 | |
3050 (put 'byte-call 'byte-opcode-invert 'funcall) | |
3051 (put 'byte-list1 'byte-opcode-invert 'list) | |
3052 (put 'byte-list2 'byte-opcode-invert 'list) | |
3053 (put 'byte-list3 'byte-opcode-invert 'list) | |
3054 (put 'byte-list4 'byte-opcode-invert 'list) | |
3055 (put 'byte-listN 'byte-opcode-invert 'list) | |
3056 (put 'byte-concat2 'byte-opcode-invert 'concat) | |
3057 (put 'byte-concat3 'byte-opcode-invert 'concat) | |
3058 (put 'byte-concat4 'byte-opcode-invert 'concat) | |
3059 (put 'byte-concatN 'byte-opcode-invert 'concat) | |
3060 (put 'byte-insertN 'byte-opcode-invert 'insert) | |
3061 | |
3062 (byte-defop-compiler point 0) | |
3063 ;;(byte-defop-compiler mark 0) ;; obsolete | |
3064 (byte-defop-compiler point-max 0) | |
3065 (byte-defop-compiler point-min 0) | |
3066 (byte-defop-compiler following-char 0) | |
3067 (byte-defop-compiler preceding-char 0) | |
3068 (byte-defop-compiler current-column 0) | |
3069 (byte-defop-compiler eolp 0) | |
3070 (byte-defop-compiler eobp 0) | |
3071 (byte-defop-compiler bolp 0) | |
3072 (byte-defop-compiler bobp 0) | |
3073 (byte-defop-compiler current-buffer 0) | |
3074 ;;(byte-defop-compiler read-char 0) ;; obsolete | |
3075 (byte-defop-compiler interactive-p 0) | |
3076 (byte-defop-compiler19 widen 0) | |
3077 (byte-defop-compiler19 end-of-line 0-1) | |
3078 (byte-defop-compiler19 forward-char 0-1) | |
3079 (byte-defop-compiler19 forward-line 0-1) | |
3080 (byte-defop-compiler symbolp 1) | |
3081 (byte-defop-compiler consp 1) | |
3082 (byte-defop-compiler stringp 1) | |
3083 (byte-defop-compiler listp 1) | |
3084 (byte-defop-compiler not 1) | |
3085 (byte-defop-compiler (null byte-not) 1) | |
3086 (byte-defop-compiler car 1) | |
3087 (byte-defop-compiler cdr 1) | |
3088 (byte-defop-compiler length 1) | |
3089 (byte-defop-compiler symbol-value 1) | |
3090 (byte-defop-compiler symbol-function 1) | |
3091 (byte-defop-compiler (1+ byte-add1) 1) | |
3092 (byte-defop-compiler (1- byte-sub1) 1) | |
3093 (byte-defop-compiler goto-char 1) | |
18722
3905119ebc75
(char-after): Allow 0 args.
Richard M. Stallman <rms@gnu.org>
parents:
18391
diff
changeset
|
3094 (byte-defop-compiler char-after 0-1) |
757 | 3095 (byte-defop-compiler set-buffer 1) |
3096 ;;(byte-defop-compiler set-mark 1) ;; obsolete | |
56657
7d44c5003aa7
(forward-word): Allow 0 args.
John Paul Wallington <jpw@pobox.com>
parents:
56082
diff
changeset
|
3097 (byte-defop-compiler19 forward-word 0-1) |
757 | 3098 (byte-defop-compiler19 char-syntax 1) |
3099 (byte-defop-compiler19 nreverse 1) | |
3100 (byte-defop-compiler19 car-safe 1) | |
3101 (byte-defop-compiler19 cdr-safe 1) | |
3102 (byte-defop-compiler19 numberp 1) | |
3103 (byte-defop-compiler19 integerp 1) | |
3104 (byte-defop-compiler19 skip-chars-forward 1-2) | |
3105 (byte-defop-compiler19 skip-chars-backward 1-2) | |
3106 (byte-defop-compiler eq 2) | |
3107 (byte-defop-compiler memq 2) | |
3108 (byte-defop-compiler cons 2) | |
3109 (byte-defop-compiler aref 2) | |
3110 (byte-defop-compiler set 2) | |
3111 (byte-defop-compiler (= byte-eqlsign) 2) | |
3112 (byte-defop-compiler (< byte-lss) 2) | |
3113 (byte-defop-compiler (> byte-gtr) 2) | |
3114 (byte-defop-compiler (<= byte-leq) 2) | |
3115 (byte-defop-compiler (>= byte-geq) 2) | |
3116 (byte-defop-compiler get 2) | |
3117 (byte-defop-compiler nth 2) | |
3118 (byte-defop-compiler substring 2-3) | |
958 | 3119 (byte-defop-compiler19 (move-marker byte-set-marker) 2-3) |
757 | 3120 (byte-defop-compiler19 set-marker 2-3) |
3121 (byte-defop-compiler19 match-beginning 1) | |
3122 (byte-defop-compiler19 match-end 1) | |
3123 (byte-defop-compiler19 upcase 1) | |
3124 (byte-defop-compiler19 downcase 1) | |
3125 (byte-defop-compiler19 string= 2) | |
3126 (byte-defop-compiler19 string< 2) | |
958 | 3127 (byte-defop-compiler19 (string-equal byte-string=) 2) |
3128 (byte-defop-compiler19 (string-lessp byte-string<) 2) | |
757 | 3129 (byte-defop-compiler19 equal 2) |
3130 (byte-defop-compiler19 nthcdr 2) | |
3131 (byte-defop-compiler19 elt 2) | |
3132 (byte-defop-compiler19 member 2) | |
3133 (byte-defop-compiler19 assq 2) | |
958 | 3134 (byte-defop-compiler19 (rplaca byte-setcar) 2) |
3135 (byte-defop-compiler19 (rplacd byte-setcdr) 2) | |
757 | 3136 (byte-defop-compiler19 setcar 2) |
3137 (byte-defop-compiler19 setcdr 2) | |
3138 (byte-defop-compiler19 buffer-substring 2) | |
3139 (byte-defop-compiler19 delete-region 2) | |
3140 (byte-defop-compiler19 narrow-to-region 2) | |
3141 (byte-defop-compiler19 (% byte-rem) 2) | |
3142 (byte-defop-compiler aset 3) | |
3143 | |
3144 (byte-defop-compiler max byte-compile-associative) | |
3145 (byte-defop-compiler min byte-compile-associative) | |
3146 (byte-defop-compiler (+ byte-plus) byte-compile-associative) | |
3147 (byte-defop-compiler19 (* byte-mult) byte-compile-associative) | |
3148 | |
3149 ;;####(byte-defop-compiler19 move-to-column 1) | |
3150 (byte-defop-compiler-1 interactive byte-compile-noop) | |
3151 | |
3152 | |
3153 (defun byte-compile-subr-wrong-args (form n) | |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
3154 (byte-compile-set-symbol-position (car form)) |
56082
36284d653673
Put `...' around symbols in warning messages.
Richard M. Stallman <rms@gnu.org>
parents:
55694
diff
changeset
|
3155 (byte-compile-warn "`%s' called with %d arg%s, but requires %s" |
757 | 3156 (car form) (length (cdr form)) |
3157 (if (= 1 (length (cdr form))) "" "s") n) | |
3158 ;; get run-time wrong-number-of-args error. | |
3159 (byte-compile-normal-call form)) | |
3160 | |
3161 (defun byte-compile-no-args (form) | |
3162 (if (not (= (length form) 1)) | |
3163 (byte-compile-subr-wrong-args form "none") | |
3164 (byte-compile-out (get (car form) 'byte-opcode) 0))) | |
3165 | |
3166 (defun byte-compile-one-arg (form) | |
3167 (if (not (= (length form) 2)) | |
3168 (byte-compile-subr-wrong-args form 1) | |
3169 (byte-compile-form (car (cdr form))) ;; Push the argument | |
3170 (byte-compile-out (get (car form) 'byte-opcode) 0))) | |
3171 | |
3172 (defun byte-compile-two-args (form) | |
3173 (if (not (= (length form) 3)) | |
3174 (byte-compile-subr-wrong-args form 2) | |
3175 (byte-compile-form (car (cdr form))) ;; Push the arguments | |
3176 (byte-compile-form (nth 2 form)) | |
3177 (byte-compile-out (get (car form) 'byte-opcode) 0))) | |
3178 | |
3179 (defun byte-compile-three-args (form) | |
3180 (if (not (= (length form) 4)) | |
3181 (byte-compile-subr-wrong-args form 3) | |
3182 (byte-compile-form (car (cdr form))) ;; Push the arguments | |
3183 (byte-compile-form (nth 2 form)) | |
3184 (byte-compile-form (nth 3 form)) | |
3185 (byte-compile-out (get (car form) 'byte-opcode) 0))) | |
3186 | |
3187 (defun byte-compile-zero-or-one-arg (form) | |
3188 (let ((len (length form))) | |
3189 (cond ((= len 1) (byte-compile-one-arg (append form '(nil)))) | |
3190 ((= len 2) (byte-compile-one-arg form)) | |
3191 (t (byte-compile-subr-wrong-args form "0-1"))))) | |
3192 | |
3193 (defun byte-compile-one-or-two-args (form) | |
3194 (let ((len (length form))) | |
3195 (cond ((= len 2) (byte-compile-two-args (append form '(nil)))) | |
3196 ((= len 3) (byte-compile-two-args form)) | |
3197 (t (byte-compile-subr-wrong-args form "1-2"))))) | |
3198 | |
3199 (defun byte-compile-two-or-three-args (form) | |
3200 (let ((len (length form))) | |
3201 (cond ((= len 3) (byte-compile-three-args (append form '(nil)))) | |
3202 ((= len 4) (byte-compile-three-args form)) | |
3203 (t (byte-compile-subr-wrong-args form "2-3"))))) | |
3204 | |
3205 (defun byte-compile-noop (form) | |
3206 (byte-compile-constant nil)) | |
3207 | |
3208 (defun byte-compile-discard () | |
3209 (byte-compile-out 'byte-discard 0)) | |
3210 | |
3211 | |
3212 ;; Compile a function that accepts one or more args and is right-associative. | |
13474
3e7f6fdc234d
(byte-compile-associative): Do operations left to right.
Richard M. Stallman <rms@gnu.org>
parents:
13403
diff
changeset
|
3213 ;; We do it by left-associativity so that the operations |
3e7f6fdc234d
(byte-compile-associative): Do operations left to right.
Richard M. Stallman <rms@gnu.org>
parents:
13403
diff
changeset
|
3214 ;; are done in the same order as in interpreted code. |
15972
b741b3129c1b
(byte-compile-associative): Treat one arg case like (+ x 0).
Richard M. Stallman <rms@gnu.org>
parents:
15954
diff
changeset
|
3215 ;; We treat the one-arg case, as in (+ x), like (+ x 0). |
b741b3129c1b
(byte-compile-associative): Treat one arg case like (+ x 0).
Richard M. Stallman <rms@gnu.org>
parents:
15954
diff
changeset
|
3216 ;; in order to convert markers to numbers, and trigger expected errors. |
757 | 3217 (defun byte-compile-associative (form) |
3218 (if (cdr form) | |
13474
3e7f6fdc234d
(byte-compile-associative): Do operations left to right.
Richard M. Stallman <rms@gnu.org>
parents:
13403
diff
changeset
|
3219 (let ((opcode (get (car form) 'byte-opcode)) |
3e7f6fdc234d
(byte-compile-associative): Do operations left to right.
Richard M. Stallman <rms@gnu.org>
parents:
13403
diff
changeset
|
3220 (args (copy-sequence (cdr form)))) |
3e7f6fdc234d
(byte-compile-associative): Do operations left to right.
Richard M. Stallman <rms@gnu.org>
parents:
13403
diff
changeset
|
3221 (byte-compile-form (car args)) |
3e7f6fdc234d
(byte-compile-associative): Do operations left to right.
Richard M. Stallman <rms@gnu.org>
parents:
13403
diff
changeset
|
3222 (setq args (cdr args)) |
15972
b741b3129c1b
(byte-compile-associative): Treat one arg case like (+ x 0).
Richard M. Stallman <rms@gnu.org>
parents:
15954
diff
changeset
|
3223 (or args (setq args '(0) |
b741b3129c1b
(byte-compile-associative): Treat one arg case like (+ x 0).
Richard M. Stallman <rms@gnu.org>
parents:
15954
diff
changeset
|
3224 opcode (get '+ 'byte-opcode))) |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
3225 (dolist (arg args) |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
3226 (byte-compile-form arg) |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
3227 (byte-compile-out opcode 0))) |
757 | 3228 (byte-compile-constant (eval form)))) |
3229 | |
3230 | |
3231 ;; more complicated compiler macros | |
3232 | |
77096
14feb20665af
Markus Triska <markus.triska at gmx.at>:
Glenn Morris <rgm@gnu.org>
parents:
76740
diff
changeset
|
3233 (byte-defop-compiler char-before) |
77119
8e8844e56964
Markus Triska <markus.triska at gmx.at>:
Glenn Morris <rgm@gnu.org>
parents:
77096
diff
changeset
|
3234 (byte-defop-compiler backward-char) |
8e8844e56964
Markus Triska <markus.triska at gmx.at>:
Glenn Morris <rgm@gnu.org>
parents:
77096
diff
changeset
|
3235 (byte-defop-compiler backward-word) |
757 | 3236 (byte-defop-compiler list) |
3237 (byte-defop-compiler concat) | |
3238 (byte-defop-compiler fset) | |
3239 (byte-defop-compiler (indent-to-column byte-indent-to) byte-compile-indent-to) | |
3240 (byte-defop-compiler indent-to) | |
3241 (byte-defop-compiler insert) | |
3242 (byte-defop-compiler-1 function byte-compile-function-form) | |
3243 (byte-defop-compiler-1 - byte-compile-minus) | |
3244 (byte-defop-compiler19 (/ byte-quo) byte-compile-quo) | |
3245 (byte-defop-compiler19 nconc) | |
3246 | |
77096
14feb20665af
Markus Triska <markus.triska at gmx.at>:
Glenn Morris <rgm@gnu.org>
parents:
76740
diff
changeset
|
3247 (defun byte-compile-char-before (form) |
14feb20665af
Markus Triska <markus.triska at gmx.at>:
Glenn Morris <rgm@gnu.org>
parents:
76740
diff
changeset
|
3248 (cond ((= 2 (length form)) |
77119
8e8844e56964
Markus Triska <markus.triska at gmx.at>:
Glenn Morris <rgm@gnu.org>
parents:
77096
diff
changeset
|
3249 (byte-compile-form (list 'char-after (if (numberp (nth 1 form)) |
8e8844e56964
Markus Triska <markus.triska at gmx.at>:
Glenn Morris <rgm@gnu.org>
parents:
77096
diff
changeset
|
3250 (1- (nth 1 form)) |
8e8844e56964
Markus Triska <markus.triska at gmx.at>:
Glenn Morris <rgm@gnu.org>
parents:
77096
diff
changeset
|
3251 `(1- ,(nth 1 form)))))) |
8e8844e56964
Markus Triska <markus.triska at gmx.at>:
Glenn Morris <rgm@gnu.org>
parents:
77096
diff
changeset
|
3252 ((= 1 (length form)) |
8e8844e56964
Markus Triska <markus.triska at gmx.at>:
Glenn Morris <rgm@gnu.org>
parents:
77096
diff
changeset
|
3253 (byte-compile-form '(char-after (1- (point))))) |
8e8844e56964
Markus Triska <markus.triska at gmx.at>:
Glenn Morris <rgm@gnu.org>
parents:
77096
diff
changeset
|
3254 (t (byte-compile-subr-wrong-args form "0-1")))) |
8e8844e56964
Markus Triska <markus.triska at gmx.at>:
Glenn Morris <rgm@gnu.org>
parents:
77096
diff
changeset
|
3255 |
8e8844e56964
Markus Triska <markus.triska at gmx.at>:
Glenn Morris <rgm@gnu.org>
parents:
77096
diff
changeset
|
3256 ;; backward-... ==> forward-... with negated argument. |
8e8844e56964
Markus Triska <markus.triska at gmx.at>:
Glenn Morris <rgm@gnu.org>
parents:
77096
diff
changeset
|
3257 (defun byte-compile-backward-char (form) |
8e8844e56964
Markus Triska <markus.triska at gmx.at>:
Glenn Morris <rgm@gnu.org>
parents:
77096
diff
changeset
|
3258 (cond ((= 2 (length form)) |
8e8844e56964
Markus Triska <markus.triska at gmx.at>:
Glenn Morris <rgm@gnu.org>
parents:
77096
diff
changeset
|
3259 (byte-compile-form (list 'forward-char (if (numberp (nth 1 form)) |
8e8844e56964
Markus Triska <markus.triska at gmx.at>:
Glenn Morris <rgm@gnu.org>
parents:
77096
diff
changeset
|
3260 (- (nth 1 form)) |
8e8844e56964
Markus Triska <markus.triska at gmx.at>:
Glenn Morris <rgm@gnu.org>
parents:
77096
diff
changeset
|
3261 `(- ,(nth 1 form)))))) |
8e8844e56964
Markus Triska <markus.triska at gmx.at>:
Glenn Morris <rgm@gnu.org>
parents:
77096
diff
changeset
|
3262 ((= 1 (length form)) |
8e8844e56964
Markus Triska <markus.triska at gmx.at>:
Glenn Morris <rgm@gnu.org>
parents:
77096
diff
changeset
|
3263 (byte-compile-form '(forward-char -1))) |
8e8844e56964
Markus Triska <markus.triska at gmx.at>:
Glenn Morris <rgm@gnu.org>
parents:
77096
diff
changeset
|
3264 (t (byte-compile-subr-wrong-args form "0-1")))) |
8e8844e56964
Markus Triska <markus.triska at gmx.at>:
Glenn Morris <rgm@gnu.org>
parents:
77096
diff
changeset
|
3265 |
8e8844e56964
Markus Triska <markus.triska at gmx.at>:
Glenn Morris <rgm@gnu.org>
parents:
77096
diff
changeset
|
3266 (defun byte-compile-backward-word (form) |
8e8844e56964
Markus Triska <markus.triska at gmx.at>:
Glenn Morris <rgm@gnu.org>
parents:
77096
diff
changeset
|
3267 (cond ((= 2 (length form)) |
8e8844e56964
Markus Triska <markus.triska at gmx.at>:
Glenn Morris <rgm@gnu.org>
parents:
77096
diff
changeset
|
3268 (byte-compile-form (list 'forward-word (if (numberp (nth 1 form)) |
8e8844e56964
Markus Triska <markus.triska at gmx.at>:
Glenn Morris <rgm@gnu.org>
parents:
77096
diff
changeset
|
3269 (- (nth 1 form)) |
8e8844e56964
Markus Triska <markus.triska at gmx.at>:
Glenn Morris <rgm@gnu.org>
parents:
77096
diff
changeset
|
3270 `(- ,(nth 1 form)))))) |
8e8844e56964
Markus Triska <markus.triska at gmx.at>:
Glenn Morris <rgm@gnu.org>
parents:
77096
diff
changeset
|
3271 ((= 1 (length form)) |
8e8844e56964
Markus Triska <markus.triska at gmx.at>:
Glenn Morris <rgm@gnu.org>
parents:
77096
diff
changeset
|
3272 (byte-compile-form '(forward-word -1))) |
8e8844e56964
Markus Triska <markus.triska at gmx.at>:
Glenn Morris <rgm@gnu.org>
parents:
77096
diff
changeset
|
3273 (t (byte-compile-subr-wrong-args form "0-1")))) |
77096
14feb20665af
Markus Triska <markus.triska at gmx.at>:
Glenn Morris <rgm@gnu.org>
parents:
76740
diff
changeset
|
3274 |
757 | 3275 (defun byte-compile-list (form) |
3276 (let ((count (length (cdr form)))) | |
3277 (cond ((= count 0) | |
3278 (byte-compile-constant nil)) | |
3279 ((< count 5) | |
29239
86949998e6fd
(byte-compile-callargs-warn): Use subr-arity to check primitives.
Dave Love <fx@gnu.org>
parents:
28441
diff
changeset
|
3280 (mapc 'byte-compile-form (cdr form)) |
757 | 3281 (byte-compile-out |
3282 (aref [byte-list1 byte-list2 byte-list3 byte-list4] (1- count)) 0)) | |
3653
974055b516d9
* bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents:
3591
diff
changeset
|
3283 ((and (< count 256) (not (byte-compile-version-cond |
974055b516d9
* bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents:
3591
diff
changeset
|
3284 byte-compile-compatibility))) |
29239
86949998e6fd
(byte-compile-callargs-warn): Use subr-arity to check primitives.
Dave Love <fx@gnu.org>
parents:
28441
diff
changeset
|
3285 (mapc 'byte-compile-form (cdr form)) |
757 | 3286 (byte-compile-out 'byte-listN count)) |
3287 (t (byte-compile-normal-call form))))) | |
3288 | |
3289 (defun byte-compile-concat (form) | |
3290 (let ((count (length (cdr form)))) | |
3291 (cond ((and (< 1 count) (< count 5)) | |
29239
86949998e6fd
(byte-compile-callargs-warn): Use subr-arity to check primitives.
Dave Love <fx@gnu.org>
parents:
28441
diff
changeset
|
3292 (mapc 'byte-compile-form (cdr form)) |
757 | 3293 (byte-compile-out |
3294 (aref [byte-concat2 byte-concat3 byte-concat4] (- count 2)) | |
3295 0)) | |
3296 ;; Concat of one arg is not a no-op if arg is not a string. | |
3297 ((= count 0) | |
3298 (byte-compile-form "")) | |
3653
974055b516d9
* bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents:
3591
diff
changeset
|
3299 ((and (< count 256) (not (byte-compile-version-cond |
974055b516d9
* bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents:
3591
diff
changeset
|
3300 byte-compile-compatibility))) |
29239
86949998e6fd
(byte-compile-callargs-warn): Use subr-arity to check primitives.
Dave Love <fx@gnu.org>
parents:
28441
diff
changeset
|
3301 (mapc 'byte-compile-form (cdr form)) |
757 | 3302 (byte-compile-out 'byte-concatN count)) |
3303 ((byte-compile-normal-call form))))) | |
3304 | |
3305 (defun byte-compile-minus (form) | |
3306 (if (null (setq form (cdr form))) | |
3307 (byte-compile-constant 0) | |
3308 (byte-compile-form (car form)) | |
3309 (if (cdr form) | |
3310 (while (setq form (cdr form)) | |
3311 (byte-compile-form (car form)) | |
3312 (byte-compile-out 'byte-diff 0)) | |
3313 (byte-compile-out 'byte-negate 0)))) | |
3314 | |
3315 (defun byte-compile-quo (form) | |
3316 (let ((len (length form))) | |
3317 (cond ((<= len 2) | |
3318 (byte-compile-subr-wrong-args form "2 or more")) | |
3319 (t | |
3320 (byte-compile-form (car (setq form (cdr form)))) | |
3321 (while (setq form (cdr form)) | |
3322 (byte-compile-form (car form)) | |
3323 (byte-compile-out 'byte-quo 0)))))) | |
3324 | |
3325 (defun byte-compile-nconc (form) | |
3326 (let ((len (length form))) | |
3327 (cond ((= len 1) | |
3328 (byte-compile-constant nil)) | |
3329 ((= len 2) | |
3330 ;; nconc of one arg is a noop, even if that arg isn't a list. | |
3331 (byte-compile-form (nth 1 form))) | |
3332 (t | |
3333 (byte-compile-form (car (setq form (cdr form)))) | |
3334 (while (setq form (cdr form)) | |
3335 (byte-compile-form (car form)) | |
3336 (byte-compile-out 'byte-nconc 0)))))) | |
3337 | |
3338 (defun byte-compile-fset (form) | |
3339 ;; warn about forms like (fset 'foo '(lambda () ...)) | |
3340 ;; (where the lambda expression is non-trivial...) | |
3341 (let ((fn (nth 2 form)) | |
3342 body) | |
3343 (if (and (eq (car-safe fn) 'quote) | |
3344 (eq (car-safe (setq fn (nth 1 fn))) 'lambda)) | |
3345 (progn | |
3346 (setq body (cdr (cdr fn))) | |
3347 (if (stringp (car body)) (setq body (cdr body))) | |
3348 (if (eq 'interactive (car-safe (car body))) (setq body (cdr body))) | |
3349 (if (and (consp (car body)) | |
3350 (not (eq 'byte-code (car (car body))))) | |
3351 (byte-compile-warn | |
56082
36284d653673
Put `...' around symbols in warning messages.
Richard M. Stallman <rms@gnu.org>
parents:
55694
diff
changeset
|
3352 "A quoted lambda form is the second argument of `fset'. This is probably |
757 | 3353 not what you want, as that lambda cannot be compiled. Consider using |
3354 the syntax (function (lambda (...) ...)) instead."))))) | |
3355 (byte-compile-two-args form)) | |
3356 | |
3357 (defun byte-compile-funarg (form) | |
3358 ;; (mapcar '(lambda (x) ..) ..) ==> (mapcar (function (lambda (x) ..)) ..) | |
3591
507f64624555
Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents:
3455
diff
changeset
|
3359 ;; for cases where it's guaranteed that first arg will be used as a lambda. |
757 | 3360 (byte-compile-normal-call |
3361 (let ((fn (nth 1 form))) | |
3362 (if (and (eq (car-safe fn) 'quote) | |
3363 (eq (car-safe (nth 1 fn)) 'lambda)) | |
3364 (cons (car form) | |
3365 (cons (cons 'function (cdr fn)) | |
3366 (cdr (cdr form)))) | |
3367 form)))) | |
3368 | |
15953
38a50022d610
(byte-compile-funarg-2): New function,
Richard M. Stallman <rms@gnu.org>
parents:
15930
diff
changeset
|
3369 (defun byte-compile-funarg-2 (form) |
38a50022d610
(byte-compile-funarg-2): New function,
Richard M. Stallman <rms@gnu.org>
parents:
15930
diff
changeset
|
3370 ;; (sort ... '(lambda (x) ..)) ==> (sort ... (function (lambda (x) ..))) |
38a50022d610
(byte-compile-funarg-2): New function,
Richard M. Stallman <rms@gnu.org>
parents:
15930
diff
changeset
|
3371 ;; for cases where it's guaranteed that second arg will be used as a lambda. |
38a50022d610
(byte-compile-funarg-2): New function,
Richard M. Stallman <rms@gnu.org>
parents:
15930
diff
changeset
|
3372 (byte-compile-normal-call |
38a50022d610
(byte-compile-funarg-2): New function,
Richard M. Stallman <rms@gnu.org>
parents:
15930
diff
changeset
|
3373 (let ((fn (nth 2 form))) |
38a50022d610
(byte-compile-funarg-2): New function,
Richard M. Stallman <rms@gnu.org>
parents:
15930
diff
changeset
|
3374 (if (and (eq (car-safe fn) 'quote) |
38a50022d610
(byte-compile-funarg-2): New function,
Richard M. Stallman <rms@gnu.org>
parents:
15930
diff
changeset
|
3375 (eq (car-safe (nth 1 fn)) 'lambda)) |
38a50022d610
(byte-compile-funarg-2): New function,
Richard M. Stallman <rms@gnu.org>
parents:
15930
diff
changeset
|
3376 (cons (car form) |
38a50022d610
(byte-compile-funarg-2): New function,
Richard M. Stallman <rms@gnu.org>
parents:
15930
diff
changeset
|
3377 (cons (nth 1 form) |
38a50022d610
(byte-compile-funarg-2): New function,
Richard M. Stallman <rms@gnu.org>
parents:
15930
diff
changeset
|
3378 (cons (cons 'function (cdr fn)) |
38a50022d610
(byte-compile-funarg-2): New function,
Richard M. Stallman <rms@gnu.org>
parents:
15930
diff
changeset
|
3379 (cdr (cdr (cdr form)))))) |
38a50022d610
(byte-compile-funarg-2): New function,
Richard M. Stallman <rms@gnu.org>
parents:
15930
diff
changeset
|
3380 form)))) |
38a50022d610
(byte-compile-funarg-2): New function,
Richard M. Stallman <rms@gnu.org>
parents:
15930
diff
changeset
|
3381 |
757 | 3382 ;; (function foo) must compile like 'foo, not like (symbol-function 'foo). |
3383 ;; Otherwise it will be incompatible with the interpreter, | |
3384 ;; and (funcall (function foo)) will lose with autoloads. | |
3385 | |
3386 (defun byte-compile-function-form (form) | |
3387 (byte-compile-constant | |
3388 (cond ((symbolp (nth 1 form)) | |
3389 (nth 1 form)) | |
3390 ;; If we're not allowed to use #[] syntax, then output a form like | |
3391 ;; '(lambda (..) (byte-code ..)) instead of a call to make-byte-code. | |
3392 ;; In this situation, calling make-byte-code at run-time will usually | |
3393 ;; be less efficient than processing a call to byte-code. | |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
3394 ((byte-compile-version-cond byte-compile-compatibility) |
757 | 3395 (byte-compile-byte-code-unmake (byte-compile-lambda (nth 1 form)))) |
3396 ((byte-compile-lambda (nth 1 form)))))) | |
3397 | |
3398 (defun byte-compile-indent-to (form) | |
3399 (let ((len (length form))) | |
3400 (cond ((= len 2) | |
3401 (byte-compile-form (car (cdr form))) | |
3402 (byte-compile-out 'byte-indent-to 0)) | |
3403 ((= len 3) | |
3404 ;; no opcode for 2-arg case. | |
3405 (byte-compile-normal-call form)) | |
3406 (t | |
3407 (byte-compile-subr-wrong-args form "1-2"))))) | |
3408 | |
3409 (defun byte-compile-insert (form) | |
3410 (cond ((null (cdr form)) | |
3411 (byte-compile-constant nil)) | |
3653
974055b516d9
* bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents:
3591
diff
changeset
|
3412 ((and (not (byte-compile-version-cond |
974055b516d9
* bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents:
3591
diff
changeset
|
3413 byte-compile-compatibility)) |
757 | 3414 (<= (length form) 256)) |
29239
86949998e6fd
(byte-compile-callargs-warn): Use subr-arity to check primitives.
Dave Love <fx@gnu.org>
parents:
28441
diff
changeset
|
3415 (mapc 'byte-compile-form (cdr form)) |
757 | 3416 (if (cdr (cdr form)) |
3417 (byte-compile-out 'byte-insertN (length (cdr form))) | |
3418 (byte-compile-out 'byte-insert 0))) | |
3419 ((memq t (mapcar 'consp (cdr (cdr form)))) | |
3420 (byte-compile-normal-call form)) | |
3421 ;; We can split it; there is no function call after inserting 1st arg. | |
3422 (t | |
3423 (while (setq form (cdr form)) | |
3424 (byte-compile-form (car form)) | |
3425 (byte-compile-out 'byte-insert 0) | |
3426 (if (cdr form) | |
3427 (byte-compile-discard)))))) | |
3428 | |
3429 | |
3430 (byte-defop-compiler-1 setq) | |
3431 (byte-defop-compiler-1 setq-default) | |
3432 (byte-defop-compiler-1 quote) | |
3433 (byte-defop-compiler-1 quote-form) | |
3434 | |
3435 (defun byte-compile-setq (form) | |
3436 (let ((args (cdr form))) | |
3437 (if args | |
3438 (while args | |
3439 (byte-compile-form (car (cdr args))) | |
3440 (or for-effect (cdr (cdr args)) | |
3441 (byte-compile-out 'byte-dup 0)) | |
3442 (byte-compile-variable-ref 'byte-varset (car args)) | |
3443 (setq args (cdr (cdr args)))) | |
3444 ;; (setq), with no arguments. | |
3445 (byte-compile-form nil for-effect)) | |
3446 (setq for-effect nil))) | |
3447 | |
3448 (defun byte-compile-setq-default (form) | |
4049
7908fc6e4fb9
(byte-compile-setq-default):
Richard M. Stallman <rms@gnu.org>
parents:
4013
diff
changeset
|
3449 (let ((args (cdr form)) |
7908fc6e4fb9
(byte-compile-setq-default):
Richard M. Stallman <rms@gnu.org>
parents:
4013
diff
changeset
|
3450 setters) |
7908fc6e4fb9
(byte-compile-setq-default):
Richard M. Stallman <rms@gnu.org>
parents:
4013
diff
changeset
|
3451 (while args |
7908fc6e4fb9
(byte-compile-setq-default):
Richard M. Stallman <rms@gnu.org>
parents:
4013
diff
changeset
|
3452 (setq setters |
7908fc6e4fb9
(byte-compile-setq-default):
Richard M. Stallman <rms@gnu.org>
parents:
4013
diff
changeset
|
3453 (cons (list 'set-default (list 'quote (car args)) (car (cdr args))) |
7908fc6e4fb9
(byte-compile-setq-default):
Richard M. Stallman <rms@gnu.org>
parents:
4013
diff
changeset
|
3454 setters)) |
7908fc6e4fb9
(byte-compile-setq-default):
Richard M. Stallman <rms@gnu.org>
parents:
4013
diff
changeset
|
3455 (setq args (cdr (cdr args)))) |
7908fc6e4fb9
(byte-compile-setq-default):
Richard M. Stallman <rms@gnu.org>
parents:
4013
diff
changeset
|
3456 (byte-compile-form (cons 'progn (nreverse setters))))) |
757 | 3457 |
3458 (defun byte-compile-quote (form) | |
3459 (byte-compile-constant (car (cdr form)))) | |
3460 | |
3461 (defun byte-compile-quote-form (form) | |
3462 (byte-compile-constant (byte-compile-top-level (nth 1 form)))) | |
3463 | |
3464 | |
3465 ;;; control structures | |
3466 | |
3467 (defun byte-compile-body (body &optional for-effect) | |
3468 (while (cdr body) | |
3469 (byte-compile-form (car body) t) | |
3470 (setq body (cdr body))) | |
3471 (byte-compile-form (car body) for-effect)) | |
3472 | |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
3473 (defsubst byte-compile-body-do-effect (body) |
757 | 3474 (byte-compile-body body for-effect) |
3475 (setq for-effect nil)) | |
3476 | |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
3477 (defsubst byte-compile-form-do-effect (form) |
757 | 3478 (byte-compile-form form for-effect) |
3479 (setq for-effect nil)) | |
3480 | |
3481 (byte-defop-compiler-1 inline byte-compile-progn) | |
3482 (byte-defop-compiler-1 progn) | |
3483 (byte-defop-compiler-1 prog1) | |
3484 (byte-defop-compiler-1 prog2) | |
3485 (byte-defop-compiler-1 if) | |
3486 (byte-defop-compiler-1 cond) | |
3487 (byte-defop-compiler-1 and) | |
3488 (byte-defop-compiler-1 or) | |
3489 (byte-defop-compiler-1 while) | |
3490 (byte-defop-compiler-1 funcall) | |
3491 (byte-defop-compiler-1 apply byte-compile-funarg) | |
3492 (byte-defop-compiler-1 mapcar byte-compile-funarg) | |
3493 (byte-defop-compiler-1 mapatoms byte-compile-funarg) | |
3494 (byte-defop-compiler-1 mapconcat byte-compile-funarg) | |
31211 | 3495 (byte-defop-compiler-1 mapc byte-compile-funarg) |
48468 | 3496 (byte-defop-compiler-1 maphash byte-compile-funarg) |
3497 (byte-defop-compiler-1 map-char-table byte-compile-funarg) | |
88777 | 3498 (byte-defop-compiler-1 map-char-table byte-compile-funarg-2) |
3499 ;; map-charset-chars should be funarg but has optional third arg | |
15953
38a50022d610
(byte-compile-funarg-2): New function,
Richard M. Stallman <rms@gnu.org>
parents:
15930
diff
changeset
|
3500 (byte-defop-compiler-1 sort byte-compile-funarg-2) |
757 | 3501 (byte-defop-compiler-1 let) |
3502 (byte-defop-compiler-1 let*) | |
3503 | |
3504 (defun byte-compile-progn (form) | |
3505 (byte-compile-body-do-effect (cdr form))) | |
3506 | |
3507 (defun byte-compile-prog1 (form) | |
3508 (byte-compile-form-do-effect (car (cdr form))) | |
3509 (byte-compile-body (cdr (cdr form)) t)) | |
3510 | |
3511 (defun byte-compile-prog2 (form) | |
3512 (byte-compile-form (nth 1 form) t) | |
3513 (byte-compile-form-do-effect (nth 2 form)) | |
3514 (byte-compile-body (cdr (cdr (cdr form))) t)) | |
3515 | |
3516 (defmacro byte-compile-goto-if (cond discard tag) | |
27824 | 3517 `(byte-compile-goto |
3518 (if ,cond | |
3519 (if ,discard 'byte-goto-if-not-nil 'byte-goto-if-not-nil-else-pop) | |
3520 (if ,discard 'byte-goto-if-nil 'byte-goto-if-nil-else-pop)) | |
3521 ,tag)) | |
757 | 3522 |
86003
e33327200372
* emacs-lisp/byte-opt.el (byte-optimize-featurep): Optimize
Dan Nicolaescu <dann@ics.uci.edu>
parents:
85989
diff
changeset
|
3523 ;; Return the list of items in CONDITION-PARAM that match PRED-LIST. |
e33327200372
* emacs-lisp/byte-opt.el (byte-optimize-featurep): Optimize
Dan Nicolaescu <dann@ics.uci.edu>
parents:
85989
diff
changeset
|
3524 ;; Only return items that are not in ONLY-IF-NOT-PRESENT. |
86452
ff400c9a8768
(batch-byte-recompile-directory): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
86336
diff
changeset
|
3525 (defun byte-compile-find-bound-condition (condition-param |
ff400c9a8768
(batch-byte-recompile-directory): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
86336
diff
changeset
|
3526 pred-list |
86003
e33327200372
* emacs-lisp/byte-opt.el (byte-optimize-featurep): Optimize
Dan Nicolaescu <dann@ics.uci.edu>
parents:
85989
diff
changeset
|
3527 &optional only-if-not-present) |
e33327200372
* emacs-lisp/byte-opt.el (byte-optimize-featurep): Optimize
Dan Nicolaescu <dann@ics.uci.edu>
parents:
85989
diff
changeset
|
3528 (let ((result nil) |
e33327200372
* emacs-lisp/byte-opt.el (byte-optimize-featurep): Optimize
Dan Nicolaescu <dann@ics.uci.edu>
parents:
85989
diff
changeset
|
3529 (nth-one nil) |
86452
ff400c9a8768
(batch-byte-recompile-directory): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
86336
diff
changeset
|
3530 (cond-list |
86003
e33327200372
* emacs-lisp/byte-opt.el (byte-optimize-featurep): Optimize
Dan Nicolaescu <dann@ics.uci.edu>
parents:
85989
diff
changeset
|
3531 (if (memq (car-safe condition-param) pred-list) |
e33327200372
* emacs-lisp/byte-opt.el (byte-optimize-featurep): Optimize
Dan Nicolaescu <dann@ics.uci.edu>
parents:
85989
diff
changeset
|
3532 ;; The condition appears by itself. |
e33327200372
* emacs-lisp/byte-opt.el (byte-optimize-featurep): Optimize
Dan Nicolaescu <dann@ics.uci.edu>
parents:
85989
diff
changeset
|
3533 (list condition-param) |
e33327200372
* emacs-lisp/byte-opt.el (byte-optimize-featurep): Optimize
Dan Nicolaescu <dann@ics.uci.edu>
parents:
85989
diff
changeset
|
3534 ;; If the condition is an `and', look for matches among the |
e33327200372
* emacs-lisp/byte-opt.el (byte-optimize-featurep): Optimize
Dan Nicolaescu <dann@ics.uci.edu>
parents:
85989
diff
changeset
|
3535 ;; `and' arguments. |
e33327200372
* emacs-lisp/byte-opt.el (byte-optimize-featurep): Optimize
Dan Nicolaescu <dann@ics.uci.edu>
parents:
85989
diff
changeset
|
3536 (when (eq 'and (car-safe condition-param)) |
e33327200372
* emacs-lisp/byte-opt.el (byte-optimize-featurep): Optimize
Dan Nicolaescu <dann@ics.uci.edu>
parents:
85989
diff
changeset
|
3537 (cdr condition-param))))) |
86452
ff400c9a8768
(batch-byte-recompile-directory): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
86336
diff
changeset
|
3538 |
86003
e33327200372
* emacs-lisp/byte-opt.el (byte-optimize-featurep): Optimize
Dan Nicolaescu <dann@ics.uci.edu>
parents:
85989
diff
changeset
|
3539 (dolist (crt cond-list) |
e33327200372
* emacs-lisp/byte-opt.el (byte-optimize-featurep): Optimize
Dan Nicolaescu <dann@ics.uci.edu>
parents:
85989
diff
changeset
|
3540 (when (and (memq (car-safe crt) pred-list) |
e33327200372
* emacs-lisp/byte-opt.el (byte-optimize-featurep): Optimize
Dan Nicolaescu <dann@ics.uci.edu>
parents:
85989
diff
changeset
|
3541 (eq 'quote (car-safe (setq nth-one (nth 1 crt)))) |
e33327200372
* emacs-lisp/byte-opt.el (byte-optimize-featurep): Optimize
Dan Nicolaescu <dann@ics.uci.edu>
parents:
85989
diff
changeset
|
3542 ;; Ignore if the symbol is already on the unresolved |
e33327200372
* emacs-lisp/byte-opt.el (byte-optimize-featurep): Optimize
Dan Nicolaescu <dann@ics.uci.edu>
parents:
85989
diff
changeset
|
3543 ;; list. |
e33327200372
* emacs-lisp/byte-opt.el (byte-optimize-featurep): Optimize
Dan Nicolaescu <dann@ics.uci.edu>
parents:
85989
diff
changeset
|
3544 (not (assq (nth 1 nth-one) ; the relevant symbol |
e33327200372
* emacs-lisp/byte-opt.el (byte-optimize-featurep): Optimize
Dan Nicolaescu <dann@ics.uci.edu>
parents:
85989
diff
changeset
|
3545 only-if-not-present))) |
e33327200372
* emacs-lisp/byte-opt.el (byte-optimize-featurep): Optimize
Dan Nicolaescu <dann@ics.uci.edu>
parents:
85989
diff
changeset
|
3546 (push (nth 1 (nth 1 crt)) result))) |
e33327200372
* emacs-lisp/byte-opt.el (byte-optimize-featurep): Optimize
Dan Nicolaescu <dann@ics.uci.edu>
parents:
85989
diff
changeset
|
3547 result)) |
e33327200372
* emacs-lisp/byte-opt.el (byte-optimize-featurep): Optimize
Dan Nicolaescu <dann@ics.uci.edu>
parents:
85989
diff
changeset
|
3548 |
53753
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
3549 (defmacro byte-compile-maybe-guarded (condition &rest body) |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
3550 "Execute forms in BODY, potentially guarded by CONDITION. |
64179
09328bd431d2
(byte-compile-maybe-guarded): Check for (featurep 'xemacs) and turn
Richard M. Stallman <rms@gnu.org>
parents:
64085
diff
changeset
|
3551 CONDITION is a variable whose value is a test in an `if' or `cond'. |
95870
2169bb17fe3d
(byte-compile-maybe-guarded): Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
95642
diff
changeset
|
3552 BODY is the code to compile in the first arm of the if or the body of |
2169bb17fe3d
(byte-compile-maybe-guarded): Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
95642
diff
changeset
|
3553 the cond clause. If CONDITION's value is of the form (fboundp 'foo) |
64397
876aa7f08950
(byte-compile-maybe-guarded): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
64393
diff
changeset
|
3554 or (boundp 'foo), the relevant warnings from BODY about foo's |
64179
09328bd431d2
(byte-compile-maybe-guarded): Check for (featurep 'xemacs) and turn
Richard M. Stallman <rms@gnu.org>
parents:
64085
diff
changeset
|
3555 being undefined will be suppressed. |
09328bd431d2
(byte-compile-maybe-guarded): Check for (featurep 'xemacs) and turn
Richard M. Stallman <rms@gnu.org>
parents:
64085
diff
changeset
|
3556 |
64405
9fcfa0b883d4
(byte-compile-maybe-guarded): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
64397
diff
changeset
|
3557 If CONDITION's value is (not (featurep 'emacs)) or (featurep 'xemacs), |
64397
876aa7f08950
(byte-compile-maybe-guarded): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
64393
diff
changeset
|
3558 that suppresses all warnings during execution of BODY." |
53753
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
3559 (declare (indent 1) (debug t)) |
86452
ff400c9a8768
(batch-byte-recompile-directory): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
86336
diff
changeset
|
3560 `(let* ((fbound-list (byte-compile-find-bound-condition |
ff400c9a8768
(batch-byte-recompile-directory): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
86336
diff
changeset
|
3561 ,condition (list 'fboundp) |
86003
e33327200372
* emacs-lisp/byte-opt.el (byte-optimize-featurep): Optimize
Dan Nicolaescu <dann@ics.uci.edu>
parents:
85989
diff
changeset
|
3562 byte-compile-unresolved-functions)) |
86452
ff400c9a8768
(batch-byte-recompile-directory): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
86336
diff
changeset
|
3563 (bound-list (byte-compile-find-bound-condition |
86003
e33327200372
* emacs-lisp/byte-opt.el (byte-optimize-featurep): Optimize
Dan Nicolaescu <dann@ics.uci.edu>
parents:
85989
diff
changeset
|
3564 ,condition (list 'boundp 'default-boundp))) |
74077
1080f62d73e3
(byte-compile-if): Revert last change.
Chong Yidong <cyd@stupidchicken.com>
parents:
74061
diff
changeset
|
3565 ;; Maybe add to the bound list. |
1080f62d73e3
(byte-compile-if): Revert last change.
Chong Yidong <cyd@stupidchicken.com>
parents:
74061
diff
changeset
|
3566 (byte-compile-bound-variables |
86003
e33327200372
* emacs-lisp/byte-opt.el (byte-optimize-featurep): Optimize
Dan Nicolaescu <dann@ics.uci.edu>
parents:
85989
diff
changeset
|
3567 (if bound-list |
e33327200372
* emacs-lisp/byte-opt.el (byte-optimize-featurep): Optimize
Dan Nicolaescu <dann@ics.uci.edu>
parents:
85989
diff
changeset
|
3568 (append bound-list byte-compile-bound-variables) |
92427
31b671bf1dfc
(byte-compile-maybe-guarded):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
92388
diff
changeset
|
3569 byte-compile-bound-variables))) |
64179
09328bd431d2
(byte-compile-maybe-guarded): Check for (featurep 'xemacs) and turn
Richard M. Stallman <rms@gnu.org>
parents:
64085
diff
changeset
|
3570 (unwind-protect |
09328bd431d2
(byte-compile-maybe-guarded): Check for (featurep 'xemacs) and turn
Richard M. Stallman <rms@gnu.org>
parents:
64085
diff
changeset
|
3571 (progn ,@body) |
09328bd431d2
(byte-compile-maybe-guarded): Check for (featurep 'xemacs) and turn
Richard M. Stallman <rms@gnu.org>
parents:
64085
diff
changeset
|
3572 ;; Maybe remove the function symbol from the unresolved list. |
86003
e33327200372
* emacs-lisp/byte-opt.el (byte-optimize-featurep): Optimize
Dan Nicolaescu <dann@ics.uci.edu>
parents:
85989
diff
changeset
|
3573 (dolist (fbound fbound-list) |
e33327200372
* emacs-lisp/byte-opt.el (byte-optimize-featurep): Optimize
Dan Nicolaescu <dann@ics.uci.edu>
parents:
85989
diff
changeset
|
3574 (when fbound |
74077
1080f62d73e3
(byte-compile-if): Revert last change.
Chong Yidong <cyd@stupidchicken.com>
parents:
74061
diff
changeset
|
3575 (setq byte-compile-unresolved-functions |
1080f62d73e3
(byte-compile-if): Revert last change.
Chong Yidong <cyd@stupidchicken.com>
parents:
74061
diff
changeset
|
3576 (delq (assq fbound byte-compile-unresolved-functions) |
86003
e33327200372
* emacs-lisp/byte-opt.el (byte-optimize-featurep): Optimize
Dan Nicolaescu <dann@ics.uci.edu>
parents:
85989
diff
changeset
|
3577 byte-compile-unresolved-functions))))))) |
53753
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
3578 |
757 | 3579 (defun byte-compile-if (form) |
3580 (byte-compile-form (car (cdr form))) | |
48822
162c286faa11
(byte-compile-if): Suppress warnings from
Dave Love <fx@gnu.org>
parents:
48719
diff
changeset
|
3581 ;; Check whether we have `(if (fboundp ...' or `(if (boundp ...' |
162c286faa11
(byte-compile-if): Suppress warnings from
Dave Love <fx@gnu.org>
parents:
48719
diff
changeset
|
3582 ;; and avoid warnings about the relevent symbols in the consequent. |
53753
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
3583 (let ((clause (nth 1 form)) |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
3584 (donetag (byte-compile-make-tag))) |
48822
162c286faa11
(byte-compile-if): Suppress warnings from
Dave Love <fx@gnu.org>
parents:
48719
diff
changeset
|
3585 (if (null (nthcdr 3 form)) |
162c286faa11
(byte-compile-if): Suppress warnings from
Dave Love <fx@gnu.org>
parents:
48719
diff
changeset
|
3586 ;; No else-forms |
162c286faa11
(byte-compile-if): Suppress warnings from
Dave Love <fx@gnu.org>
parents:
48719
diff
changeset
|
3587 (progn |
162c286faa11
(byte-compile-if): Suppress warnings from
Dave Love <fx@gnu.org>
parents:
48719
diff
changeset
|
3588 (byte-compile-goto-if nil for-effect donetag) |
53753
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
3589 (byte-compile-maybe-guarded clause |
48822
162c286faa11
(byte-compile-if): Suppress warnings from
Dave Love <fx@gnu.org>
parents:
48719
diff
changeset
|
3590 (byte-compile-form (nth 2 form) for-effect)) |
162c286faa11
(byte-compile-if): Suppress warnings from
Dave Love <fx@gnu.org>
parents:
48719
diff
changeset
|
3591 (byte-compile-out-tag donetag)) |
162c286faa11
(byte-compile-if): Suppress warnings from
Dave Love <fx@gnu.org>
parents:
48719
diff
changeset
|
3592 (let ((elsetag (byte-compile-make-tag))) |
162c286faa11
(byte-compile-if): Suppress warnings from
Dave Love <fx@gnu.org>
parents:
48719
diff
changeset
|
3593 (byte-compile-goto 'byte-goto-if-nil elsetag) |
53753
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
3594 (byte-compile-maybe-guarded clause |
93d749070205
(byte-compile-compatibility): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
53575
diff
changeset
|
3595 (byte-compile-form (nth 2 form) for-effect)) |
48822
162c286faa11
(byte-compile-if): Suppress warnings from
Dave Love <fx@gnu.org>
parents:
48719
diff
changeset
|
3596 (byte-compile-goto 'byte-goto donetag) |
162c286faa11
(byte-compile-if): Suppress warnings from
Dave Love <fx@gnu.org>
parents:
48719
diff
changeset
|
3597 (byte-compile-out-tag elsetag) |
64393
47148916c99b
(byte-compile-if): Guard the else-clause too.
Richard M. Stallman <rms@gnu.org>
parents:
64389
diff
changeset
|
3598 (byte-compile-maybe-guarded (list 'not clause) |
47148916c99b
(byte-compile-if): Guard the else-clause too.
Richard M. Stallman <rms@gnu.org>
parents:
64389
diff
changeset
|
3599 (byte-compile-body (cdr (cdr (cdr form))) for-effect)) |
48822
162c286faa11
(byte-compile-if): Suppress warnings from
Dave Love <fx@gnu.org>
parents:
48719
diff
changeset
|
3600 (byte-compile-out-tag donetag)))) |
757 | 3601 (setq for-effect nil)) |
3602 | |
3603 (defun byte-compile-cond (clauses) | |
3604 (let ((donetag (byte-compile-make-tag)) | |
3605 nexttag clause) | |
3606 (while (setq clauses (cdr clauses)) | |
3607 (setq clause (car clauses)) | |
3608 (cond ((or (eq (car clause) t) | |
3609 (and (eq (car-safe (car clause)) 'quote) | |
3610 (car-safe (cdr-safe (car clause))))) | |
3611 ;; Unconditional clause | |
3612 (setq clause (cons t clause) | |
3613 clauses nil)) | |
3614 ((cdr clauses) | |
3615 (byte-compile-form (car clause)) | |
3616 (if (null (cdr clause)) | |
3617 ;; First clause is a singleton. | |
3618 (byte-compile-goto-if t for-effect donetag) | |
64179
09328bd431d2
(byte-compile-maybe-guarded): Check for (featurep 'xemacs) and turn
Richard M. Stallman <rms@gnu.org>
parents:
64085
diff
changeset
|
3619 (setq nexttag (byte-compile-make-tag)) |
09328bd431d2
(byte-compile-maybe-guarded): Check for (featurep 'xemacs) and turn
Richard M. Stallman <rms@gnu.org>
parents:
64085
diff
changeset
|
3620 (byte-compile-goto 'byte-goto-if-nil nexttag) |
09328bd431d2
(byte-compile-maybe-guarded): Check for (featurep 'xemacs) and turn
Richard M. Stallman <rms@gnu.org>
parents:
64085
diff
changeset
|
3621 (byte-compile-maybe-guarded (car clause) |
09328bd431d2
(byte-compile-maybe-guarded): Check for (featurep 'xemacs) and turn
Richard M. Stallman <rms@gnu.org>
parents:
64085
diff
changeset
|
3622 (byte-compile-body (cdr clause) for-effect)) |
09328bd431d2
(byte-compile-maybe-guarded): Check for (featurep 'xemacs) and turn
Richard M. Stallman <rms@gnu.org>
parents:
64085
diff
changeset
|
3623 (byte-compile-goto 'byte-goto donetag) |
09328bd431d2
(byte-compile-maybe-guarded): Check for (featurep 'xemacs) and turn
Richard M. Stallman <rms@gnu.org>
parents:
64085
diff
changeset
|
3624 (byte-compile-out-tag nexttag))))) |
757 | 3625 ;; Last clause |
54790
12b895a7fee2
(byte-compile-cond): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54770
diff
changeset
|
3626 (let ((guard (car clause))) |
12b895a7fee2
(byte-compile-cond): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54770
diff
changeset
|
3627 (and (cdr clause) (not (eq guard t)) |
12b895a7fee2
(byte-compile-cond): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54770
diff
changeset
|
3628 (progn (byte-compile-form guard) |
12b895a7fee2
(byte-compile-cond): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54770
diff
changeset
|
3629 (byte-compile-goto-if nil for-effect donetag) |
12b895a7fee2
(byte-compile-cond): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54770
diff
changeset
|
3630 (setq clause (cdr clause)))) |
12b895a7fee2
(byte-compile-cond): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54770
diff
changeset
|
3631 (byte-compile-maybe-guarded guard |
12b895a7fee2
(byte-compile-cond): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54770
diff
changeset
|
3632 (byte-compile-body-do-effect clause))) |
757 | 3633 (byte-compile-out-tag donetag))) |
3634 | |
3635 (defun byte-compile-and (form) | |
3636 (let ((failtag (byte-compile-make-tag)) | |
3637 (args (cdr form))) | |
3638 (if (null args) | |
3639 (byte-compile-form-do-effect t) | |
64385
3b6714810ffc
(byte-compile-and-recursion): New function.
Richard M. Stallman <rms@gnu.org>
parents:
64179
diff
changeset
|
3640 (byte-compile-and-recursion args failtag)))) |
3b6714810ffc
(byte-compile-and-recursion): New function.
Richard M. Stallman <rms@gnu.org>
parents:
64179
diff
changeset
|
3641 |
64389
95851e91d5ef
(byte-compile-or-recursion): New function.
Richard M. Stallman <rms@gnu.org>
parents:
64385
diff
changeset
|
3642 ;; Handle compilation of a nontrivial `and' call. |
64385
3b6714810ffc
(byte-compile-and-recursion): New function.
Richard M. Stallman <rms@gnu.org>
parents:
64179
diff
changeset
|
3643 ;; We use tail recursion so we can use byte-compile-maybe-guarded. |
3b6714810ffc
(byte-compile-and-recursion): New function.
Richard M. Stallman <rms@gnu.org>
parents:
64179
diff
changeset
|
3644 (defun byte-compile-and-recursion (rest failtag) |
3b6714810ffc
(byte-compile-and-recursion): New function.
Richard M. Stallman <rms@gnu.org>
parents:
64179
diff
changeset
|
3645 (if (cdr rest) |
3b6714810ffc
(byte-compile-and-recursion): New function.
Richard M. Stallman <rms@gnu.org>
parents:
64179
diff
changeset
|
3646 (progn |
3b6714810ffc
(byte-compile-and-recursion): New function.
Richard M. Stallman <rms@gnu.org>
parents:
64179
diff
changeset
|
3647 (byte-compile-form (car rest)) |
757 | 3648 (byte-compile-goto-if nil for-effect failtag) |
64385
3b6714810ffc
(byte-compile-and-recursion): New function.
Richard M. Stallman <rms@gnu.org>
parents:
64179
diff
changeset
|
3649 (byte-compile-maybe-guarded (car rest) |
3b6714810ffc
(byte-compile-and-recursion): New function.
Richard M. Stallman <rms@gnu.org>
parents:
64179
diff
changeset
|
3650 (byte-compile-and-recursion (cdr rest) failtag))) |
3b6714810ffc
(byte-compile-and-recursion): New function.
Richard M. Stallman <rms@gnu.org>
parents:
64179
diff
changeset
|
3651 (byte-compile-form-do-effect (car rest)) |
3b6714810ffc
(byte-compile-and-recursion): New function.
Richard M. Stallman <rms@gnu.org>
parents:
64179
diff
changeset
|
3652 (byte-compile-out-tag failtag))) |
757 | 3653 |
3654 (defun byte-compile-or (form) | |
3655 (let ((wintag (byte-compile-make-tag)) | |
3656 (args (cdr form))) | |
3657 (if (null args) | |
3658 (byte-compile-form-do-effect nil) | |
64389
95851e91d5ef
(byte-compile-or-recursion): New function.
Richard M. Stallman <rms@gnu.org>
parents:
64385
diff
changeset
|
3659 (byte-compile-or-recursion args wintag)))) |
95851e91d5ef
(byte-compile-or-recursion): New function.
Richard M. Stallman <rms@gnu.org>
parents:
64385
diff
changeset
|
3660 |
95851e91d5ef
(byte-compile-or-recursion): New function.
Richard M. Stallman <rms@gnu.org>
parents:
64385
diff
changeset
|
3661 ;; Handle compilation of a nontrivial `or' call. |
95851e91d5ef
(byte-compile-or-recursion): New function.
Richard M. Stallman <rms@gnu.org>
parents:
64385
diff
changeset
|
3662 ;; We use tail recursion so we can use byte-compile-maybe-guarded. |
95851e91d5ef
(byte-compile-or-recursion): New function.
Richard M. Stallman <rms@gnu.org>
parents:
64385
diff
changeset
|
3663 (defun byte-compile-or-recursion (rest wintag) |
95851e91d5ef
(byte-compile-or-recursion): New function.
Richard M. Stallman <rms@gnu.org>
parents:
64385
diff
changeset
|
3664 (if (cdr rest) |
95851e91d5ef
(byte-compile-or-recursion): New function.
Richard M. Stallman <rms@gnu.org>
parents:
64385
diff
changeset
|
3665 (progn |
95851e91d5ef
(byte-compile-or-recursion): New function.
Richard M. Stallman <rms@gnu.org>
parents:
64385
diff
changeset
|
3666 (byte-compile-form (car rest)) |
757 | 3667 (byte-compile-goto-if t for-effect wintag) |
64389
95851e91d5ef
(byte-compile-or-recursion): New function.
Richard M. Stallman <rms@gnu.org>
parents:
64385
diff
changeset
|
3668 (byte-compile-maybe-guarded (list 'not (car rest)) |
95851e91d5ef
(byte-compile-or-recursion): New function.
Richard M. Stallman <rms@gnu.org>
parents:
64385
diff
changeset
|
3669 (byte-compile-or-recursion (cdr rest) wintag))) |
95851e91d5ef
(byte-compile-or-recursion): New function.
Richard M. Stallman <rms@gnu.org>
parents:
64385
diff
changeset
|
3670 (byte-compile-form-do-effect (car rest)) |
95851e91d5ef
(byte-compile-or-recursion): New function.
Richard M. Stallman <rms@gnu.org>
parents:
64385
diff
changeset
|
3671 (byte-compile-out-tag wintag))) |
757 | 3672 |
3673 (defun byte-compile-while (form) | |
3674 (let ((endtag (byte-compile-make-tag)) | |
3675 (looptag (byte-compile-make-tag))) | |
3676 (byte-compile-out-tag looptag) | |
3677 (byte-compile-form (car (cdr form))) | |
3678 (byte-compile-goto-if nil for-effect endtag) | |
3679 (byte-compile-body (cdr (cdr form)) t) | |
3680 (byte-compile-goto 'byte-goto looptag) | |
3681 (byte-compile-out-tag endtag) | |
3682 (setq for-effect nil))) | |
3683 | |
3684 (defun byte-compile-funcall (form) | |
29239
86949998e6fd
(byte-compile-callargs-warn): Use subr-arity to check primitives.
Dave Love <fx@gnu.org>
parents:
28441
diff
changeset
|
3685 (mapc 'byte-compile-form (cdr form)) |
757 | 3686 (byte-compile-out 'byte-call (length (cdr (cdr form))))) |
3687 | |
3688 | |
3689 (defun byte-compile-let (form) | |
3690 ;; First compute the binding values in the old scope. | |
3691 (let ((varlist (car (cdr form)))) | |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
3692 (dolist (var varlist) |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
3693 (if (consp var) |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
3694 (byte-compile-form (car (cdr var))) |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
3695 (byte-compile-push-constant nil)))) |
757 | 3696 (let ((byte-compile-bound-variables byte-compile-bound-variables) ;new scope |
3697 (varlist (reverse (car (cdr form))))) | |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
3698 (dolist (var varlist) |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
3699 (byte-compile-variable-ref 'byte-varbind (if (consp var) (car var) var))) |
757 | 3700 (byte-compile-body-do-effect (cdr (cdr form))) |
3701 (byte-compile-out 'byte-unbind (length (car (cdr form)))))) | |
3702 | |
3703 (defun byte-compile-let* (form) | |
3704 (let ((byte-compile-bound-variables byte-compile-bound-variables) ;new scope | |
3705 (varlist (copy-sequence (car (cdr form))))) | |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
3706 (dolist (var varlist) |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
3707 (if (atom var) |
757 | 3708 (byte-compile-push-constant nil) |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
3709 (byte-compile-form (car (cdr var))) |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
3710 (setq var (car var))) |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
3711 (byte-compile-variable-ref 'byte-varbind var)) |
757 | 3712 (byte-compile-body-do-effect (cdr (cdr form))) |
3713 (byte-compile-out 'byte-unbind (length (car (cdr form)))))) | |
3714 | |
3715 | |
3716 (byte-defop-compiler-1 /= byte-compile-negated) | |
3717 (byte-defop-compiler-1 atom byte-compile-negated) | |
3718 (byte-defop-compiler-1 nlistp byte-compile-negated) | |
3719 | |
3720 (put '/= 'byte-compile-negated-op '=) | |
3721 (put 'atom 'byte-compile-negated-op 'consp) | |
3722 (put 'nlistp 'byte-compile-negated-op 'listp) | |
3723 | |
3724 (defun byte-compile-negated (form) | |
3725 (byte-compile-form-do-effect (byte-compile-negation-optimizer form))) | |
3726 | |
3727 ;; Even when optimization is off, /= is optimized to (not (= ...)). | |
3728 (defun byte-compile-negation-optimizer (form) | |
3729 ;; an optimizer for forms where <form1> is less efficient than (not <form2>) | |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
3730 (byte-compile-set-symbol-position (car form)) |
757 | 3731 (list 'not |
3732 (cons (or (get (car form) 'byte-compile-negated-op) | |
3733 (error | |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
3734 "Compiler error: `%s' has no `byte-compile-negated-op' property" |
757 | 3735 (car form))) |
3736 (cdr form)))) | |
3737 | |
3738 ;;; other tricky macro-like special-forms | |
3739 | |
3740 (byte-defop-compiler-1 catch) | |
3741 (byte-defop-compiler-1 unwind-protect) | |
3742 (byte-defop-compiler-1 condition-case) | |
3743 (byte-defop-compiler-1 save-excursion) | |
16274
e9819849c533
(save-current-buffer): Compile it like save-excursion.
Richard M. Stallman <rms@gnu.org>
parents:
16232
diff
changeset
|
3744 (byte-defop-compiler-1 save-current-buffer) |
757 | 3745 (byte-defop-compiler-1 save-restriction) |
3746 (byte-defop-compiler-1 save-window-excursion) | |
3747 (byte-defop-compiler-1 with-output-to-temp-buffer) | |
2798
e2f296263868
(byte-compile-track-mouse): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2735
diff
changeset
|
3748 (byte-defop-compiler-1 track-mouse) |
757 | 3749 |
3750 (defun byte-compile-catch (form) | |
3751 (byte-compile-form (car (cdr form))) | |
3752 (byte-compile-push-constant | |
3753 (byte-compile-top-level (cons 'progn (cdr (cdr form))) for-effect)) | |
3754 (byte-compile-out 'byte-catch 0)) | |
3755 | |
3756 (defun byte-compile-unwind-protect (form) | |
3757 (byte-compile-push-constant | |
3758 (byte-compile-top-level-body (cdr (cdr form)) t)) | |
3759 (byte-compile-out 'byte-unwind-protect 0) | |
3760 (byte-compile-form-do-effect (car (cdr form))) | |
3761 (byte-compile-out 'byte-unbind 1)) | |
3762 | |
2798
e2f296263868
(byte-compile-track-mouse): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2735
diff
changeset
|
3763 (defun byte-compile-track-mouse (form) |
6293
649c8a929063
(byte-compile-track-mouse): Undo previous change,
Richard M. Stallman <rms@gnu.org>
parents:
6217
diff
changeset
|
3764 (byte-compile-form |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
3765 `(funcall '(lambda nil |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
3766 (track-mouse ,@(byte-compile-top-level-body (cdr form))))))) |
2798
e2f296263868
(byte-compile-track-mouse): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2735
diff
changeset
|
3767 |
757 | 3768 (defun byte-compile-condition-case (form) |
3769 (let* ((var (nth 1 form)) | |
3770 (byte-compile-bound-variables | |
3771 (if var (cons var byte-compile-bound-variables) | |
3772 byte-compile-bound-variables))) | |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
3773 (byte-compile-set-symbol-position 'condition-case) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
3774 (unless (symbolp var) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
3775 (byte-compile-warn |
56082
36284d653673
Put `...' around symbols in warning messages.
Richard M. Stallman <rms@gnu.org>
parents:
55694
diff
changeset
|
3776 "`%s' is not a variable-name or nil (in condition-case)" var)) |
757 | 3777 (byte-compile-push-constant var) |
3778 (byte-compile-push-constant (byte-compile-top-level | |
3779 (nth 2 form) for-effect)) | |
3780 (let ((clauses (cdr (cdr (cdr form)))) | |
3781 compiled-clauses) | |
3782 (while clauses | |
3653
974055b516d9
* bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents:
3591
diff
changeset
|
3783 (let* ((clause (car clauses)) |
974055b516d9
* bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents:
3591
diff
changeset
|
3784 (condition (car clause))) |
5562
2b3d2ea74ce1
(byte-compile-condition-case): Disable warning about
Richard M. Stallman <rms@gnu.org>
parents:
5454
diff
changeset
|
3785 (cond ((not (or (symbolp condition) |
2b3d2ea74ce1
(byte-compile-condition-case): Disable warning about
Richard M. Stallman <rms@gnu.org>
parents:
5454
diff
changeset
|
3786 (and (listp condition) |
2b3d2ea74ce1
(byte-compile-condition-case): Disable warning about
Richard M. Stallman <rms@gnu.org>
parents:
5454
diff
changeset
|
3787 (let ((syms condition) (ok t)) |
2b3d2ea74ce1
(byte-compile-condition-case): Disable warning about
Richard M. Stallman <rms@gnu.org>
parents:
5454
diff
changeset
|
3788 (while syms |
2b3d2ea74ce1
(byte-compile-condition-case): Disable warning about
Richard M. Stallman <rms@gnu.org>
parents:
5454
diff
changeset
|
3789 (if (not (symbolp (car syms))) |
2b3d2ea74ce1
(byte-compile-condition-case): Disable warning about
Richard M. Stallman <rms@gnu.org>
parents:
5454
diff
changeset
|
3790 (setq ok nil)) |
2b3d2ea74ce1
(byte-compile-condition-case): Disable warning about
Richard M. Stallman <rms@gnu.org>
parents:
5454
diff
changeset
|
3791 (setq syms (cdr syms))) |
2b3d2ea74ce1
(byte-compile-condition-case): Disable warning about
Richard M. Stallman <rms@gnu.org>
parents:
5454
diff
changeset
|
3792 ok)))) |
3653
974055b516d9
* bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents:
3591
diff
changeset
|
3793 (byte-compile-warn |
56082
36284d653673
Put `...' around symbols in warning messages.
Richard M. Stallman <rms@gnu.org>
parents:
55694
diff
changeset
|
3794 "`%s' is not a condition name or list of such (in condition-case)" |
3653
974055b516d9
* bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents:
3591
diff
changeset
|
3795 (prin1-to-string condition))) |
5562
2b3d2ea74ce1
(byte-compile-condition-case): Disable warning about
Richard M. Stallman <rms@gnu.org>
parents:
5454
diff
changeset
|
3796 ;; ((not (or (eq condition 't) |
2b3d2ea74ce1
(byte-compile-condition-case): Disable warning about
Richard M. Stallman <rms@gnu.org>
parents:
5454
diff
changeset
|
3797 ;; (and (stringp (get condition 'error-message)) |
2b3d2ea74ce1
(byte-compile-condition-case): Disable warning about
Richard M. Stallman <rms@gnu.org>
parents:
5454
diff
changeset
|
3798 ;; (consp (get condition 'error-conditions))))) |
2b3d2ea74ce1
(byte-compile-condition-case): Disable warning about
Richard M. Stallman <rms@gnu.org>
parents:
5454
diff
changeset
|
3799 ;; (byte-compile-warn |
56082
36284d653673
Put `...' around symbols in warning messages.
Richard M. Stallman <rms@gnu.org>
parents:
55694
diff
changeset
|
3800 ;; "`%s' is not a known condition name (in condition-case)" |
5562
2b3d2ea74ce1
(byte-compile-condition-case): Disable warning about
Richard M. Stallman <rms@gnu.org>
parents:
5454
diff
changeset
|
3801 ;; condition)) |
2b3d2ea74ce1
(byte-compile-condition-case): Disable warning about
Richard M. Stallman <rms@gnu.org>
parents:
5454
diff
changeset
|
3802 ) |
757 | 3803 (setq compiled-clauses |
3653
974055b516d9
* bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents:
3591
diff
changeset
|
3804 (cons (cons condition |
757 | 3805 (byte-compile-top-level-body |
3806 (cdr clause) for-effect)) | |
3807 compiled-clauses))) | |
3808 (setq clauses (cdr clauses))) | |
3809 (byte-compile-push-constant (nreverse compiled-clauses))) | |
3810 (byte-compile-out 'byte-condition-case 0))) | |
3811 | |
3812 | |
3813 (defun byte-compile-save-excursion (form) | |
3814 (byte-compile-out 'byte-save-excursion 0) | |
3815 (byte-compile-body-do-effect (cdr form)) | |
3816 (byte-compile-out 'byte-unbind 1)) | |
3817 | |
3818 (defun byte-compile-save-restriction (form) | |
3819 (byte-compile-out 'byte-save-restriction 0) | |
3820 (byte-compile-body-do-effect (cdr form)) | |
3821 (byte-compile-out 'byte-unbind 1)) | |
3822 | |
16274
e9819849c533
(save-current-buffer): Compile it like save-excursion.
Richard M. Stallman <rms@gnu.org>
parents:
16232
diff
changeset
|
3823 (defun byte-compile-save-current-buffer (form) |
e9819849c533
(save-current-buffer): Compile it like save-excursion.
Richard M. Stallman <rms@gnu.org>
parents:
16232
diff
changeset
|
3824 (byte-compile-out 'byte-save-current-buffer 0) |
e9819849c533
(save-current-buffer): Compile it like save-excursion.
Richard M. Stallman <rms@gnu.org>
parents:
16232
diff
changeset
|
3825 (byte-compile-body-do-effect (cdr form)) |
e9819849c533
(save-current-buffer): Compile it like save-excursion.
Richard M. Stallman <rms@gnu.org>
parents:
16232
diff
changeset
|
3826 (byte-compile-out 'byte-unbind 1)) |
e9819849c533
(save-current-buffer): Compile it like save-excursion.
Richard M. Stallman <rms@gnu.org>
parents:
16232
diff
changeset
|
3827 |
757 | 3828 (defun byte-compile-save-window-excursion (form) |
3829 (byte-compile-push-constant | |
3830 (byte-compile-top-level-body (cdr form) for-effect)) | |
3831 (byte-compile-out 'byte-save-window-excursion 0)) | |
3832 | |
3833 (defun byte-compile-with-output-to-temp-buffer (form) | |
3834 (byte-compile-form (car (cdr form))) | |
3835 (byte-compile-out 'byte-temp-output-buffer-setup 0) | |
3836 (byte-compile-body (cdr (cdr form))) | |
3837 (byte-compile-out 'byte-temp-output-buffer-show 0)) | |
3838 | |
3839 ;;; top-level forms elsewhere | |
3840 | |
3841 (byte-defop-compiler-1 defun) | |
3842 (byte-defop-compiler-1 defmacro) | |
3843 (byte-defop-compiler-1 defvar) | |
3844 (byte-defop-compiler-1 defconst byte-compile-defvar) | |
3845 (byte-defop-compiler-1 autoload) | |
3846 (byte-defop-compiler-1 lambda byte-compile-lambda-form) | |
3847 | |
3848 (defun byte-compile-defun (form) | |
3849 ;; This is not used for file-level defuns with doc strings. | |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
3850 (if (symbolp (car form)) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
3851 (byte-compile-set-symbol-position (car form)) |
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
3852 (byte-compile-set-symbol-position 'defun) |
39827
d9f8c7370b3a
(byte-compile-check-lambda-list): New
Gerd Moellmann <gerd@gnu.org>
parents:
39769
diff
changeset
|
3853 (error "defun name must be a symbol, not %s" (car form))) |
50680
ae1e2c38d746
(byte-compile-defun): Generate and compile a defalias form,
Richard M. Stallman <rms@gnu.org>
parents:
50658
diff
changeset
|
3854 (if (byte-compile-version-cond byte-compile-compatibility) |
ae1e2c38d746
(byte-compile-defun): Generate and compile a defalias form,
Richard M. Stallman <rms@gnu.org>
parents:
50658
diff
changeset
|
3855 (progn |
ae1e2c38d746
(byte-compile-defun): Generate and compile a defalias form,
Richard M. Stallman <rms@gnu.org>
parents:
50658
diff
changeset
|
3856 (byte-compile-two-args ; Use this to avoid byte-compile-fset's warning. |
ae1e2c38d746
(byte-compile-defun): Generate and compile a defalias form,
Richard M. Stallman <rms@gnu.org>
parents:
50658
diff
changeset
|
3857 (list 'fset |
ae1e2c38d746
(byte-compile-defun): Generate and compile a defalias form,
Richard M. Stallman <rms@gnu.org>
parents:
50658
diff
changeset
|
3858 (list 'quote (nth 1 form)) |
ae1e2c38d746
(byte-compile-defun): Generate and compile a defalias form,
Richard M. Stallman <rms@gnu.org>
parents:
50658
diff
changeset
|
3859 (byte-compile-byte-code-maker |
66317
3f882faaa9ae
(byte-compile-lambda): Add parameter add-lambda.
Lars Hansen <larsh@soem.dk>
parents:
64751
diff
changeset
|
3860 (byte-compile-lambda (cdr (cdr form)) t)))) |
50680
ae1e2c38d746
(byte-compile-defun): Generate and compile a defalias form,
Richard M. Stallman <rms@gnu.org>
parents:
50658
diff
changeset
|
3861 (byte-compile-discard)) |
50681 | 3862 ;; We prefer to generate a defalias form so it will record the function |
50682 | 3863 ;; definition just like interpreting a defun. |
50680
ae1e2c38d746
(byte-compile-defun): Generate and compile a defalias form,
Richard M. Stallman <rms@gnu.org>
parents:
50658
diff
changeset
|
3864 (byte-compile-form |
ae1e2c38d746
(byte-compile-defun): Generate and compile a defalias form,
Richard M. Stallman <rms@gnu.org>
parents:
50658
diff
changeset
|
3865 (list 'defalias |
ae1e2c38d746
(byte-compile-defun): Generate and compile a defalias form,
Richard M. Stallman <rms@gnu.org>
parents:
50658
diff
changeset
|
3866 (list 'quote (nth 1 form)) |
ae1e2c38d746
(byte-compile-defun): Generate and compile a defalias form,
Richard M. Stallman <rms@gnu.org>
parents:
50658
diff
changeset
|
3867 (byte-compile-byte-code-maker |
66317
3f882faaa9ae
(byte-compile-lambda): Add parameter add-lambda.
Lars Hansen <larsh@soem.dk>
parents:
64751
diff
changeset
|
3868 (byte-compile-lambda (cdr (cdr form)) t))) |
50680
ae1e2c38d746
(byte-compile-defun): Generate and compile a defalias form,
Richard M. Stallman <rms@gnu.org>
parents:
50658
diff
changeset
|
3869 t)) |
757 | 3870 (byte-compile-constant (nth 1 form))) |
3871 | |
3872 (defun byte-compile-defmacro (form) | |
3873 ;; This is not used for file-level defmacros with doc strings. | |
3874 (byte-compile-body-do-effect | |
3875 (list (list 'fset (list 'quote (nth 1 form)) | |
3876 (let ((code (byte-compile-byte-code-maker | |
66317
3f882faaa9ae
(byte-compile-lambda): Add parameter add-lambda.
Lars Hansen <larsh@soem.dk>
parents:
64751
diff
changeset
|
3877 (byte-compile-lambda (cdr (cdr form)) t)))) |
757 | 3878 (if (eq (car-safe code) 'make-byte-code) |
3879 (list 'cons ''macro code) | |
3880 (list 'quote (cons 'macro (eval code)))))) | |
3881 (list 'quote (nth 1 form))))) | |
3882 | |
3883 (defun byte-compile-defvar (form) | |
3884 ;; This is not used for file-level defvar/consts with doc strings. | |
31882
02bf229fa2be
(byte-compile-defvar-or-defconst): Only cons onto
Gerd Moellmann <gerd@gnu.org>
parents:
31552
diff
changeset
|
3885 (let ((fun (nth 0 form)) |
02bf229fa2be
(byte-compile-defvar-or-defconst): Only cons onto
Gerd Moellmann <gerd@gnu.org>
parents:
31552
diff
changeset
|
3886 (var (nth 1 form)) |
757 | 3887 (value (nth 2 form)) |
3888 (string (nth 3 form))) | |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
3889 (byte-compile-set-symbol-position fun) |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
3890 (when (or (> (length form) 4) |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
3891 (and (eq fun 'defconst) (null (cddr form)))) |
50658
94bb873a9f0d
(byte-compile-defvar): Improve message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50639
diff
changeset
|
3892 (let ((ncall (length (cdr form)))) |
94bb873a9f0d
(byte-compile-defvar): Improve message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50639
diff
changeset
|
3893 (byte-compile-warn |
56082
36284d653673
Put `...' around symbols in warning messages.
Richard M. Stallman <rms@gnu.org>
parents:
55694
diff
changeset
|
3894 "`%s' called with %d argument%s, but %s %s" |
50658
94bb873a9f0d
(byte-compile-defvar): Improve message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50639
diff
changeset
|
3895 fun ncall |
94bb873a9f0d
(byte-compile-defvar): Improve message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50639
diff
changeset
|
3896 (if (= 1 ncall) "" "s") |
94bb873a9f0d
(byte-compile-defvar): Improve message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50639
diff
changeset
|
3897 (if (< ncall 2) "requires" "accepts only") |
94bb873a9f0d
(byte-compile-defvar): Improve message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50639
diff
changeset
|
3898 "2-3"))) |
85730
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
3899 (when (byte-compile-warning-enabled-p 'free-vars) |
50573
e80e4ccf1bfc
(byte-compile-file-form-defvar, byte-compile-defvar):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50570
diff
changeset
|
3900 (push var byte-compile-bound-variables) |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
3901 (if (eq fun 'defconst) |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
3902 (push var byte-compile-const-variables))) |
757 | 3903 (byte-compile-body-do-effect |
31882
02bf229fa2be
(byte-compile-defvar-or-defconst): Only cons onto
Gerd Moellmann <gerd@gnu.org>
parents:
31552
diff
changeset
|
3904 (list |
02bf229fa2be
(byte-compile-defvar-or-defconst): Only cons onto
Gerd Moellmann <gerd@gnu.org>
parents:
31552
diff
changeset
|
3905 ;; Put the defined variable in this library's load-history entry |
02bf229fa2be
(byte-compile-defvar-or-defconst): Only cons onto
Gerd Moellmann <gerd@gnu.org>
parents:
31552
diff
changeset
|
3906 ;; just as a real defvar would, but only in top-level forms. |
39561
0881eab13b7a
(byte-recompile-directory): Make sure the file is readable.
Gerd Moellmann <gerd@gnu.org>
parents:
38895
diff
changeset
|
3907 (when (and (cddr form) (null byte-compile-current-form)) |
31882
02bf229fa2be
(byte-compile-defvar-or-defconst): Only cons onto
Gerd Moellmann <gerd@gnu.org>
parents:
31552
diff
changeset
|
3908 `(push ',var current-load-list)) |
02bf229fa2be
(byte-compile-defvar-or-defconst): Only cons onto
Gerd Moellmann <gerd@gnu.org>
parents:
31552
diff
changeset
|
3909 (when (> (length form) 3) |
02bf229fa2be
(byte-compile-defvar-or-defconst): Only cons onto
Gerd Moellmann <gerd@gnu.org>
parents:
31552
diff
changeset
|
3910 (when (and string (not (stringp string))) |
56082
36284d653673
Put `...' around symbols in warning messages.
Richard M. Stallman <rms@gnu.org>
parents:
55694
diff
changeset
|
3911 (byte-compile-warn "third arg to `%s %s' is not a string: %s" |
31882
02bf229fa2be
(byte-compile-defvar-or-defconst): Only cons onto
Gerd Moellmann <gerd@gnu.org>
parents:
31552
diff
changeset
|
3912 fun var string)) |
02bf229fa2be
(byte-compile-defvar-or-defconst): Only cons onto
Gerd Moellmann <gerd@gnu.org>
parents:
31552
diff
changeset
|
3913 `(put ',var 'variable-documentation ,string)) |
41176
2d63191afacd
(byte-compile-call-tree, byte-code-vector)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40451
diff
changeset
|
3914 (if (cddr form) ; `value' provided |
52133
4c112142c56f
(byte-compile-not-obsolete-var): New var.
Richard M. Stallman <rms@gnu.org>
parents:
51737
diff
changeset
|
3915 (let ((byte-compile-not-obsolete-var var)) |
4c112142c56f
(byte-compile-not-obsolete-var): New var.
Richard M. Stallman <rms@gnu.org>
parents:
51737
diff
changeset
|
3916 (if (eq fun 'defconst) |
4c112142c56f
(byte-compile-not-obsolete-var): New var.
Richard M. Stallman <rms@gnu.org>
parents:
51737
diff
changeset
|
3917 ;; `defconst' sets `var' unconditionally. |
4c112142c56f
(byte-compile-not-obsolete-var): New var.
Richard M. Stallman <rms@gnu.org>
parents:
51737
diff
changeset
|
3918 (let ((tmp (make-symbol "defconst-tmp-var"))) |
4c112142c56f
(byte-compile-not-obsolete-var): New var.
Richard M. Stallman <rms@gnu.org>
parents:
51737
diff
changeset
|
3919 `(funcall '(lambda (,tmp) (defconst ,var ,tmp)) |
4c112142c56f
(byte-compile-not-obsolete-var): New var.
Richard M. Stallman <rms@gnu.org>
parents:
51737
diff
changeset
|
3920 ,value)) |
4c112142c56f
(byte-compile-not-obsolete-var): New var.
Richard M. Stallman <rms@gnu.org>
parents:
51737
diff
changeset
|
3921 ;; `defvar' sets `var' only when unbound. |
4c112142c56f
(byte-compile-not-obsolete-var): New var.
Richard M. Stallman <rms@gnu.org>
parents:
51737
diff
changeset
|
3922 `(if (not (default-boundp ',var)) (setq-default ,var ,value)))) |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
3923 (when (eq fun 'defconst) |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
3924 ;; This will signal an appropriate error at runtime. |
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
3925 `(eval ',form))) |
31882
02bf229fa2be
(byte-compile-defvar-or-defconst): Only cons onto
Gerd Moellmann <gerd@gnu.org>
parents:
31552
diff
changeset
|
3926 `',var)))) |
757 | 3927 |
3928 (defun byte-compile-autoload (form) | |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
3929 (byte-compile-set-symbol-position 'autoload) |
757 | 3930 (and (byte-compile-constp (nth 1 form)) |
3931 (byte-compile-constp (nth 5 form)) | |
3932 (eval (nth 5 form)) ; macro-p | |
3933 (not (fboundp (eval (nth 1 form)))) | |
3934 (byte-compile-warn | |
28402 | 3935 "The compiler ignores `autoload' except at top level. You should |
757 | 3936 probably put the autoload of the macro `%s' at top-level." |
3937 (eval (nth 1 form)))) | |
3938 (byte-compile-normal-call form)) | |
3939 | |
28402 | 3940 ;; Lambdas in valid places are handled as special cases by various code. |
757 | 3941 ;; The ones that remain are errors. |
3942 (defun byte-compile-lambda-form (form) | |
45558
483a39fc5666
(byte-compile-last-line): Deleted.
Colin Walters <walters@gnu.org>
parents:
44130
diff
changeset
|
3943 (byte-compile-set-symbol-position 'lambda) |
757 | 3944 (error "`lambda' used as function name is invalid")) |
3945 | |
8086
9f6348616e4d
(byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents:
7298
diff
changeset
|
3946 ;; Compile normally, but deal with warnings for the function being defined. |
58154 | 3947 (put 'defalias 'byte-hunk-handler 'byte-compile-file-form-defalias) |
3948 (defun byte-compile-file-form-defalias (form) | |
8086
9f6348616e4d
(byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents:
7298
diff
changeset
|
3949 (if (and (consp (cdr form)) (consp (nth 1 form)) |
9f6348616e4d
(byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents:
7298
diff
changeset
|
3950 (eq (car (nth 1 form)) 'quote) |
9f6348616e4d
(byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents:
7298
diff
changeset
|
3951 (consp (cdr (nth 1 form))) |
58073
9412413950a3
(byte-compile-defalias):
Richard M. Stallman <rms@gnu.org>
parents:
57881
diff
changeset
|
3952 (symbolp (nth 1 (nth 1 form)))) |
9412413950a3
(byte-compile-defalias):
Richard M. Stallman <rms@gnu.org>
parents:
57881
diff
changeset
|
3953 (let ((constant |
9412413950a3
(byte-compile-defalias):
Richard M. Stallman <rms@gnu.org>
parents:
57881
diff
changeset
|
3954 (and (consp (nthcdr 2 form)) |
9412413950a3
(byte-compile-defalias):
Richard M. Stallman <rms@gnu.org>
parents:
57881
diff
changeset
|
3955 (consp (nth 2 form)) |
9412413950a3
(byte-compile-defalias):
Richard M. Stallman <rms@gnu.org>
parents:
57881
diff
changeset
|
3956 (eq (car (nth 2 form)) 'quote) |
9412413950a3
(byte-compile-defalias):
Richard M. Stallman <rms@gnu.org>
parents:
57881
diff
changeset
|
3957 (consp (cdr (nth 2 form))) |
9412413950a3
(byte-compile-defalias):
Richard M. Stallman <rms@gnu.org>
parents:
57881
diff
changeset
|
3958 (symbolp (nth 1 (nth 2 form)))))) |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
3959 (byte-compile-defalias-warn (nth 1 (nth 1 form))) |
58154 | 3960 (push (cons (nth 1 (nth 1 form)) |
3961 (if constant (nth 1 (nth 2 form)) t)) | |
3962 byte-compile-function-environment))) | |
68001
8e733b93ffdc
(byte-compile-file-form-defalias):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66317
diff
changeset
|
3963 ;; We used to jus do: (byte-compile-normal-call form) |
8e733b93ffdc
(byte-compile-file-form-defalias):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66317
diff
changeset
|
3964 ;; But it turns out that this fails to optimize the code. |
8e733b93ffdc
(byte-compile-file-form-defalias):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66317
diff
changeset
|
3965 ;; So instead we now do the same as what other byte-hunk-handlers do, |
8e733b93ffdc
(byte-compile-file-form-defalias):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66317
diff
changeset
|
3966 ;; which is to call back byte-compile-file-form and then return nil. |
8e733b93ffdc
(byte-compile-file-form-defalias):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66317
diff
changeset
|
3967 ;; Except that we can't just call byte-compile-file-form since it would |
8e733b93ffdc
(byte-compile-file-form-defalias):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66317
diff
changeset
|
3968 ;; call us right back. |
8e733b93ffdc
(byte-compile-file-form-defalias):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66317
diff
changeset
|
3969 (byte-compile-keep-pending form) |
8e733b93ffdc
(byte-compile-file-form-defalias):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66317
diff
changeset
|
3970 ;; Return nil so the form is not output twice. |
8e733b93ffdc
(byte-compile-file-form-defalias):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66317
diff
changeset
|
3971 nil) |
8086
9f6348616e4d
(byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents:
7298
diff
changeset
|
3972 |
9f6348616e4d
(byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents:
7298
diff
changeset
|
3973 ;; Turn off warnings about prior calls to the function being defalias'd. |
9f6348616e4d
(byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents:
7298
diff
changeset
|
3974 ;; This could be smarter and compare those calls with |
9f6348616e4d
(byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents:
7298
diff
changeset
|
3975 ;; the function it is being aliased to. |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
3976 (defun byte-compile-defalias-warn (new) |
8086
9f6348616e4d
(byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents:
7298
diff
changeset
|
3977 (let ((calls (assq new byte-compile-unresolved-functions))) |
9f6348616e4d
(byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents:
7298
diff
changeset
|
3978 (if calls |
9f6348616e4d
(byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents:
7298
diff
changeset
|
3979 (setq byte-compile-unresolved-functions |
9f6348616e4d
(byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents:
7298
diff
changeset
|
3980 (delq calls byte-compile-unresolved-functions))))) |
51289
ba101d1e9521
(byte-compile-no-warnings): New function.
Richard M. Stallman <rms@gnu.org>
parents:
50837
diff
changeset
|
3981 |
ba101d1e9521
(byte-compile-no-warnings): New function.
Richard M. Stallman <rms@gnu.org>
parents:
50837
diff
changeset
|
3982 (byte-defop-compiler-1 with-no-warnings byte-compile-no-warnings) |
ba101d1e9521
(byte-compile-no-warnings): New function.
Richard M. Stallman <rms@gnu.org>
parents:
50837
diff
changeset
|
3983 (defun byte-compile-no-warnings (form) |
ba101d1e9521
(byte-compile-no-warnings): New function.
Richard M. Stallman <rms@gnu.org>
parents:
50837
diff
changeset
|
3984 (let (byte-compile-warnings) |
55043 | 3985 (byte-compile-form (cons 'progn (cdr form))))) |
64681
12ea7ab25f7c
(byte-compile-make-variable-buffer-local)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64405
diff
changeset
|
3986 |
12ea7ab25f7c
(byte-compile-make-variable-buffer-local)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64405
diff
changeset
|
3987 ;; Warn about misuses of make-variable-buffer-local. |
12ea7ab25f7c
(byte-compile-make-variable-buffer-local)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64405
diff
changeset
|
3988 (byte-defop-compiler-1 make-variable-buffer-local byte-compile-make-variable-buffer-local) |
12ea7ab25f7c
(byte-compile-make-variable-buffer-local)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64405
diff
changeset
|
3989 (defun byte-compile-make-variable-buffer-local (form) |
81217
908a902d5545
(byte-compile-warnings): Add new option `make-local'.
Glenn Morris <rgm@gnu.org>
parents:
77119
diff
changeset
|
3990 (if (and (eq (car-safe (car-safe (cdr-safe form))) 'quote) |
85730
a1e136978a9a
(byte-compile-warnings): Document `not'.
Glenn Morris <rgm@gnu.org>
parents:
85657
diff
changeset
|
3991 (byte-compile-warning-enabled-p 'make-local)) |
64681
12ea7ab25f7c
(byte-compile-make-variable-buffer-local)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64405
diff
changeset
|
3992 (byte-compile-warn |
12ea7ab25f7c
(byte-compile-make-variable-buffer-local)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64405
diff
changeset
|
3993 "`make-variable-buffer-local' should be called at toplevel")) |
12ea7ab25f7c
(byte-compile-make-variable-buffer-local)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64405
diff
changeset
|
3994 (byte-compile-normal-call form)) |
12ea7ab25f7c
(byte-compile-make-variable-buffer-local)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64405
diff
changeset
|
3995 (put 'make-variable-buffer-local |
12ea7ab25f7c
(byte-compile-make-variable-buffer-local)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64405
diff
changeset
|
3996 'byte-hunk-handler 'byte-compile-form-make-variable-buffer-local) |
12ea7ab25f7c
(byte-compile-make-variable-buffer-local)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64405
diff
changeset
|
3997 (defun byte-compile-form-make-variable-buffer-local (form) |
12ea7ab25f7c
(byte-compile-make-variable-buffer-local)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64405
diff
changeset
|
3998 (byte-compile-keep-pending form 'byte-compile-normal-call)) |
12ea7ab25f7c
(byte-compile-make-variable-buffer-local)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64405
diff
changeset
|
3999 |
757 | 4000 |
4001 ;;; tags | |
4002 | |
4003 ;; Note: Most operations will strip off the 'TAG, but it speeds up | |
4004 ;; optimization to have the 'TAG as a part of the tag. | |
4005 ;; Tags will be (TAG . (tag-number . stack-depth)). | |
4006 (defun byte-compile-make-tag () | |
4007 (list 'TAG (setq byte-compile-tag-number (1+ byte-compile-tag-number)))) | |
4008 | |
4009 | |
4010 (defun byte-compile-out-tag (tag) | |
4011 (setq byte-compile-output (cons tag byte-compile-output)) | |
4012 (if (cdr (cdr tag)) | |
4013 (progn | |
4014 ;; ## remove this someday | |
4015 (and byte-compile-depth | |
4016 (not (= (cdr (cdr tag)) byte-compile-depth)) | |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4017 (error "Compiler bug: depth conflict at tag %d" (car (cdr tag)))) |
757 | 4018 (setq byte-compile-depth (cdr (cdr tag)))) |
4019 (setcdr (cdr tag) byte-compile-depth))) | |
4020 | |
4021 (defun byte-compile-goto (opcode tag) | |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
4022 (push (cons opcode tag) byte-compile-output) |
757 | 4023 (setcdr (cdr tag) (if (memq opcode byte-goto-always-pop-ops) |
4024 (1- byte-compile-depth) | |
4025 byte-compile-depth)) | |
4026 (setq byte-compile-depth (and (not (eq opcode 'byte-goto)) | |
4027 (1- byte-compile-depth)))) | |
4028 | |
4029 (defun byte-compile-out (opcode offset) | |
50570
80ed0fdbf171
Use push, with-current-buffer, dolist, ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49821
diff
changeset
|
4030 (push (cons opcode offset) byte-compile-output) |
757 | 4031 (cond ((eq opcode 'byte-call) |
4032 (setq byte-compile-depth (- byte-compile-depth offset))) | |
4033 ((eq opcode 'byte-return) | |
4034 ;; This is actually an unnecessary case, because there should be | |
4035 ;; no more opcodes behind byte-return. | |
4036 (setq byte-compile-depth nil)) | |
4037 (t | |
4038 (setq byte-compile-depth (+ byte-compile-depth | |
4039 (or (aref byte-stack+-info | |
4040 (symbol-value opcode)) | |
4041 (- (1- offset)))) | |
4042 byte-compile-maxdepth (max byte-compile-depth | |
4043 byte-compile-maxdepth)))) | |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4044 ;;(if (< byte-compile-depth 0) (error "Compiler error: stack underflow")) |
757 | 4045 ) |
4046 | |
4047 | |
4048 ;;; call tree stuff | |
4049 | |
4050 (defun byte-compile-annotate-call-tree (form) | |
4051 (let (entry) | |
4052 ;; annotate the current call | |
4053 (if (setq entry (assq (car form) byte-compile-call-tree)) | |
4054 (or (memq byte-compile-current-form (nth 1 entry)) ;callers | |
4055 (setcar (cdr entry) | |
4056 (cons byte-compile-current-form (nth 1 entry)))) | |
4057 (setq byte-compile-call-tree | |
4058 (cons (list (car form) (list byte-compile-current-form) nil) | |
4059 byte-compile-call-tree))) | |
4060 ;; annotate the current function | |
4061 (if (setq entry (assq byte-compile-current-form byte-compile-call-tree)) | |
4062 (or (memq (car form) (nth 2 entry)) ;called | |
4063 (setcar (cdr (cdr entry)) | |
4064 (cons (car form) (nth 2 entry)))) | |
4065 (setq byte-compile-call-tree | |
4066 (cons (list byte-compile-current-form nil (list (car form))) | |
4067 byte-compile-call-tree))) | |
4068 )) | |
4069 | |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4070 ;; Renamed from byte-compile-report-call-tree |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4071 ;; to avoid interfering with completion of byte-compile-file. |
819
5bbabfcef929
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
784
diff
changeset
|
4072 ;;;###autoload |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4073 (defun display-call-tree (&optional filename) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4074 "Display a call graph of a specified file. |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4075 This lists which functions have been called, what functions called |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4076 them, and what functions they call. The list includes all functions |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4077 whose definitions have been compiled in this Emacs session, as well as |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4078 all functions called by those functions. |
757 | 4079 |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4080 The call graph does not include macros, inline functions, or |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4081 primitives that the byte-code interpreter knows about directly \(eq, |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4082 cons, etc.\). |
757 | 4083 |
4084 The call tree also lists those functions which are not known to be called | |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4085 \(that is, to which no calls have been compiled\), and which cannot be |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4086 invoked interactively." |
757 | 4087 (interactive) |
4088 (message "Generating call tree...") | |
4089 (with-output-to-temp-buffer "*Call-Tree*" | |
4090 (set-buffer "*Call-Tree*") | |
4091 (erase-buffer) | |
10687
1bd70186f894
(byte-compile-file-form-defmumble, display-call-tree): Print ellipsis earlier,
Karl Heuer <kwzh@gnu.org>
parents:
10514
diff
changeset
|
4092 (message "Generating call tree... (sorting on %s)" |
757 | 4093 byte-compile-call-tree-sort) |
4094 (insert "Call tree for " | |
4095 (cond ((null byte-compile-current-file) (or filename "???")) | |
4096 ((stringp byte-compile-current-file) | |
4097 byte-compile-current-file) | |
4098 (t (buffer-name byte-compile-current-file))) | |
4099 " sorted on " | |
4100 (prin1-to-string byte-compile-call-tree-sort) | |
4101 ":\n\n") | |
4102 (if byte-compile-call-tree-sort | |
4103 (setq byte-compile-call-tree | |
4104 (sort byte-compile-call-tree | |
4105 (cond ((eq byte-compile-call-tree-sort 'callers) | |
4106 (function (lambda (x y) (< (length (nth 1 x)) | |
4107 (length (nth 1 y)))))) | |
4108 ((eq byte-compile-call-tree-sort 'calls) | |
4109 (function (lambda (x y) (< (length (nth 2 x)) | |
4110 (length (nth 2 y)))))) | |
4111 ((eq byte-compile-call-tree-sort 'calls+callers) | |
4112 (function (lambda (x y) (< (+ (length (nth 1 x)) | |
4113 (length (nth 2 x))) | |
4114 (+ (length (nth 1 y)) | |
4115 (length (nth 2 y))))))) | |
4116 ((eq byte-compile-call-tree-sort 'name) | |
4117 (function (lambda (x y) (string< (car x) | |
4118 (car y))))) | |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4119 (t (error "`byte-compile-call-tree-sort': `%s' - unknown sort mode" |
757 | 4120 byte-compile-call-tree-sort)))))) |
4121 (message "Generating call tree...") | |
4122 (let ((rest byte-compile-call-tree) | |
4123 (b (current-buffer)) | |
4124 f p | |
4125 callers calls) | |
4126 (while rest | |
4127 (prin1 (car (car rest)) b) | |
4128 (setq callers (nth 1 (car rest)) | |
4129 calls (nth 2 (car rest))) | |
4130 (insert "\t" | |
4131 (cond ((not (fboundp (setq f (car (car rest))))) | |
4132 (if (null f) | |
4133 " <top level>";; shouldn't insert nil then, actually -sk | |
4134 " <not defined>")) | |
4135 ((subrp (setq f (symbol-function f))) | |
4136 " <subr>") | |
4137 ((symbolp f) | |
4138 (format " ==> %s" f)) | |
1819
df06a60f3362
* disass.el (disassemble): Add autoload cookie for this.
Jim Blandy <jimb@redhat.com>
parents:
1604
diff
changeset
|
4139 ((byte-code-function-p f) |
757 | 4140 "<compiled function>") |
4141 ((not (consp f)) | |
4142 "<malformed function>") | |
4143 ((eq 'macro (car f)) | |
1819
df06a60f3362
* disass.el (disassemble): Add autoload cookie for this.
Jim Blandy <jimb@redhat.com>
parents:
1604
diff
changeset
|
4144 (if (or (byte-code-function-p (cdr f)) |
757 | 4145 (assq 'byte-code (cdr (cdr (cdr f))))) |
4146 " <compiled macro>" | |
4147 " <macro>")) | |
4148 ((assq 'byte-code (cdr (cdr f))) | |
4149 "<compiled lambda>") | |
4150 ((eq 'lambda (car f)) | |
4151 "<function>") | |
4152 (t "???")) | |
4153 (format " (%d callers + %d calls = %d)" | |
4154 ;; Does the optimizer eliminate common subexpressions?-sk | |
4155 (length callers) | |
4156 (length calls) | |
4157 (+ (length callers) (length calls))) | |
4158 "\n") | |
4159 (if callers | |
4160 (progn | |
4161 (insert " called by:\n") | |
4162 (setq p (point)) | |
4163 (insert " " (if (car callers) | |
4164 (mapconcat 'symbol-name callers ", ") | |
4165 "<top level>")) | |
4166 (let ((fill-prefix " ")) | |
57004
e9a116c0f176
(byte-compile-generate-call-tree): Doc fix.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
56657
diff
changeset
|
4167 (fill-region-as-paragraph p (point))) |
e9a116c0f176
(byte-compile-generate-call-tree): Doc fix.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
56657
diff
changeset
|
4168 (unless (= 0 (current-column)) |
e9a116c0f176
(byte-compile-generate-call-tree): Doc fix.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
56657
diff
changeset
|
4169 (insert "\n")))) |
757 | 4170 (if calls |
4171 (progn | |
4172 (insert " calls:\n") | |
4173 (setq p (point)) | |
4174 (insert " " (mapconcat 'symbol-name calls ", ")) | |
4175 (let ((fill-prefix " ")) | |
57004
e9a116c0f176
(byte-compile-generate-call-tree): Doc fix.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
56657
diff
changeset
|
4176 (fill-region-as-paragraph p (point))) |
e9a116c0f176
(byte-compile-generate-call-tree): Doc fix.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
56657
diff
changeset
|
4177 (unless (= 0 (current-column)) |
e9a116c0f176
(byte-compile-generate-call-tree): Doc fix.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
56657
diff
changeset
|
4178 (insert "\n")))) |
757 | 4179 (setq rest (cdr rest))) |
4180 | |
4181 (message "Generating call tree...(finding uncalled functions...)") | |
4182 (setq rest byte-compile-call-tree) | |
4183 (let ((uncalled nil)) | |
4184 (while rest | |
4185 (or (nth 1 (car rest)) | |
4186 (null (setq f (car (car rest)))) | |
58073
9412413950a3
(byte-compile-defalias):
Richard M. Stallman <rms@gnu.org>
parents:
57881
diff
changeset
|
4187 (functionp (byte-compile-fdefinition f t)) |
757 | 4188 (commandp (byte-compile-fdefinition f nil)) |
4189 (setq uncalled (cons f uncalled))) | |
4190 (setq rest (cdr rest))) | |
4191 (if uncalled | |
4192 (let ((fill-prefix " ")) | |
4193 (insert "Noninteractive functions not known to be called:\n ") | |
4194 (setq p (point)) | |
4195 (insert (mapconcat 'symbol-name (nreverse uncalled) ", ")) | |
4196 (fill-region-as-paragraph p (point))))) | |
4197 ) | |
4198 (message "Generating call tree...done.") | |
4199 )) | |
4200 | |
4201 | |
44103
f93538d76117
(batch-byte-compile-if-not-done): Add autoload cookie.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43027
diff
changeset
|
4202 ;;;###autoload |
43027
4c6cdfeb929c
(batch-byte-compile): New arg noforce.
Richard M. Stallman <rms@gnu.org>
parents:
41176
diff
changeset
|
4203 (defun batch-byte-compile-if-not-done () |
4c6cdfeb929c
(batch-byte-compile): New arg noforce.
Richard M. Stallman <rms@gnu.org>
parents:
41176
diff
changeset
|
4204 "Like `byte-compile-file' but doesn't recompile if already up to date. |
4c6cdfeb929c
(batch-byte-compile): New arg noforce.
Richard M. Stallman <rms@gnu.org>
parents:
41176
diff
changeset
|
4205 Use this from the command line, with `-batch'; |
4c6cdfeb929c
(batch-byte-compile): New arg noforce.
Richard M. Stallman <rms@gnu.org>
parents:
41176
diff
changeset
|
4206 it won't work in an interactive Emacs." |
4c6cdfeb929c
(batch-byte-compile): New arg noforce.
Richard M. Stallman <rms@gnu.org>
parents:
41176
diff
changeset
|
4207 (batch-byte-compile t)) |
4c6cdfeb929c
(batch-byte-compile): New arg noforce.
Richard M. Stallman <rms@gnu.org>
parents:
41176
diff
changeset
|
4208 |
757 | 4209 ;;; by crl@newton.purdue.edu |
4210 ;;; Only works noninteractively. | |
819
5bbabfcef929
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
784
diff
changeset
|
4211 ;;;###autoload |
43027
4c6cdfeb929c
(batch-byte-compile): New arg noforce.
Richard M. Stallman <rms@gnu.org>
parents:
41176
diff
changeset
|
4212 (defun batch-byte-compile (&optional noforce) |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4213 "Run `byte-compile-file' on the files remaining on the command line. |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4214 Use this from the command line, with `-batch'; |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4215 it won't work in an interactive Emacs. |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4216 Each file is processed even if an error occurred previously. |
43027
4c6cdfeb929c
(batch-byte-compile): New arg noforce.
Richard M. Stallman <rms@gnu.org>
parents:
41176
diff
changeset
|
4217 For example, invoke \"emacs -batch -f batch-byte-compile $emacs/ ~/*.el\". |
4c6cdfeb929c
(batch-byte-compile): New arg noforce.
Richard M. Stallman <rms@gnu.org>
parents:
41176
diff
changeset
|
4218 If NOFORCE is non-nil, don't recompile a file that seems to be |
4c6cdfeb929c
(batch-byte-compile): New arg noforce.
Richard M. Stallman <rms@gnu.org>
parents:
41176
diff
changeset
|
4219 already up-to-date." |
757 | 4220 ;; command-line-args-left is what is left of the command line (from startup.el) |
4221 (defvar command-line-args-left) ;Avoid 'free variable' warning | |
4222 (if (not noninteractive) | |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4223 (error "`batch-byte-compile' is to be used only with -batch")) |
757 | 4224 (let ((error nil)) |
4225 (while command-line-args-left | |
4226 (if (file-directory-p (expand-file-name (car command-line-args-left))) | |
43027
4c6cdfeb929c
(batch-byte-compile): New arg noforce.
Richard M. Stallman <rms@gnu.org>
parents:
41176
diff
changeset
|
4227 ;; Directory as argument. |
92388 | 4228 (let ((bytecomp-files (directory-files (car command-line-args-left))) |
4229 bytecomp-source bytecomp-dest) | |
4230 (dolist (bytecomp-file bytecomp-files) | |
4231 (if (and (string-match emacs-lisp-file-regexp bytecomp-file) | |
4232 (not (auto-save-file-name-p bytecomp-file)) | |
4233 (setq bytecomp-source | |
4234 (expand-file-name bytecomp-file | |
4235 (car command-line-args-left))) | |
4236 (setq bytecomp-dest (byte-compile-dest-file | |
4237 bytecomp-source)) | |
4238 (file-exists-p bytecomp-dest) | |
4239 (file-newer-than-file-p bytecomp-source bytecomp-dest)) | |
4240 (if (null (batch-byte-compile-file bytecomp-source)) | |
40451
9c7e47dd60be
(byte-recompile-directory): Report numbers of files skipped and failed too.
Sam Steingold <sds@gnu.org>
parents:
40035
diff
changeset
|
4241 (setq error t))))) |
43027
4c6cdfeb929c
(batch-byte-compile): New arg noforce.
Richard M. Stallman <rms@gnu.org>
parents:
41176
diff
changeset
|
4242 ;; Specific file argument |
4c6cdfeb929c
(batch-byte-compile): New arg noforce.
Richard M. Stallman <rms@gnu.org>
parents:
41176
diff
changeset
|
4243 (if (or (not noforce) |
92388 | 4244 (let* ((bytecomp-source (car command-line-args-left)) |
4245 (bytecomp-dest (byte-compile-dest-file bytecomp-source))) | |
4246 (or (not (file-exists-p bytecomp-dest)) | |
4247 (file-newer-than-file-p bytecomp-source bytecomp-dest)))) | |
43027
4c6cdfeb929c
(batch-byte-compile): New arg noforce.
Richard M. Stallman <rms@gnu.org>
parents:
41176
diff
changeset
|
4248 (if (null (batch-byte-compile-file (car command-line-args-left))) |
4c6cdfeb929c
(batch-byte-compile): New arg noforce.
Richard M. Stallman <rms@gnu.org>
parents:
41176
diff
changeset
|
4249 (setq error t)))) |
757 | 4250 (setq command-line-args-left (cdr command-line-args-left))) |
4251 (kill-emacs (if error 1 0)))) | |
4252 | |
92388 | 4253 (defun batch-byte-compile-file (bytecomp-file) |
54890
ab70a3ddd144
(batch-byte-compile-file): Give a backtrace if requested.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54790
diff
changeset
|
4254 (if debug-on-error |
92388 | 4255 (byte-compile-file bytecomp-file) |
54890
ab70a3ddd144
(batch-byte-compile-file): Give a backtrace if requested.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54790
diff
changeset
|
4256 (condition-case err |
92388 | 4257 (byte-compile-file bytecomp-file) |
54890
ab70a3ddd144
(batch-byte-compile-file): Give a backtrace if requested.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54790
diff
changeset
|
4258 (file-error |
ab70a3ddd144
(batch-byte-compile-file): Give a backtrace if requested.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54790
diff
changeset
|
4259 (message (if (cdr err) |
ab70a3ddd144
(batch-byte-compile-file): Give a backtrace if requested.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54790
diff
changeset
|
4260 ">>Error occurred processing %s: %s (%s)" |
45572
26228dbfd782
(batch-byte-compile-file): Delete the output file if we get a file-error.
Richard M. Stallman <rms@gnu.org>
parents:
45558
diff
changeset
|
4261 ">>Error occurred processing %s: %s") |
92388 | 4262 bytecomp-file |
54890
ab70a3ddd144
(batch-byte-compile-file): Give a backtrace if requested.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54790
diff
changeset
|
4263 (get (car err) 'error-message) |
ab70a3ddd144
(batch-byte-compile-file): Give a backtrace if requested.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54790
diff
changeset
|
4264 (prin1-to-string (cdr err))) |
92388 | 4265 (let ((bytecomp-destfile (byte-compile-dest-file bytecomp-file))) |
4266 (if (file-exists-p bytecomp-destfile) | |
4267 (delete-file bytecomp-destfile))) | |
54890
ab70a3ddd144
(batch-byte-compile-file): Give a backtrace if requested.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54790
diff
changeset
|
4268 nil) |
ab70a3ddd144
(batch-byte-compile-file): Give a backtrace if requested.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54790
diff
changeset
|
4269 (error |
ab70a3ddd144
(batch-byte-compile-file): Give a backtrace if requested.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54790
diff
changeset
|
4270 (message (if (cdr err) |
ab70a3ddd144
(batch-byte-compile-file): Give a backtrace if requested.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54790
diff
changeset
|
4271 ">>Error occurred processing %s: %s (%s)" |
757 | 4272 ">>Error occurred processing %s: %s") |
92388 | 4273 bytecomp-file |
54890
ab70a3ddd144
(batch-byte-compile-file): Give a backtrace if requested.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54790
diff
changeset
|
4274 (get (car err) 'error-message) |
ab70a3ddd144
(batch-byte-compile-file): Give a backtrace if requested.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54790
diff
changeset
|
4275 (prin1-to-string (cdr err))) |
ab70a3ddd144
(batch-byte-compile-file): Give a backtrace if requested.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54790
diff
changeset
|
4276 nil)))) |
757 | 4277 |
5283
f48e54cb9b01
(byte-compile-dest-file): If FILENAME is not recognized, append .elc to it.
Richard M. Stallman <rms@gnu.org>
parents:
4556
diff
changeset
|
4278 ;;;###autoload |
55077
6635869bd341
(batch-byte-recompile-directory): Add byte-recompile-directory's opt `arg'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
55043
diff
changeset
|
4279 (defun batch-byte-recompile-directory (&optional arg) |
47344
0b6b707c1e14
(byte-compile-file): Don't switch buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47332
diff
changeset
|
4280 "Run `byte-recompile-directory' on the dirs remaining on the command line. |
3718
37a8a7489fc5
(byte-compile-file): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents:
3653
diff
changeset
|
4281 Must be used only with `-batch', and kills Emacs on completion. |
68167
9681817a2fa5
(batch-byte-recompile-directory): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents:
68001
diff
changeset
|
4282 For example, invoke `emacs -batch -f batch-byte-recompile-directory .'. |
9681817a2fa5
(batch-byte-recompile-directory): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents:
68001
diff
changeset
|
4283 |
9681817a2fa5
(batch-byte-recompile-directory): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents:
68001
diff
changeset
|
4284 Optional argument ARG is passed as second argument ARG to |
79488
b8e6a2408b6d
(batch-byte-recompile-directory): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
79231
diff
changeset
|
4285 `byte-recompile-directory'; see there for its possible values |
68167
9681817a2fa5
(batch-byte-recompile-directory): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents:
68001
diff
changeset
|
4286 and corresponding effects." |
3653
974055b516d9
* bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents:
3591
diff
changeset
|
4287 ;; command-line-args-left is what is left of the command line (startup.el) |
974055b516d9
* bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents:
3591
diff
changeset
|
4288 (defvar command-line-args-left) ;Avoid 'free variable' warning |
974055b516d9
* bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents:
3591
diff
changeset
|
4289 (if (not noninteractive) |
974055b516d9
* bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents:
3591
diff
changeset
|
4290 (error "batch-byte-recompile-directory is to be used only with -batch")) |
974055b516d9
* bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents:
3591
diff
changeset
|
4291 (or command-line-args-left |
974055b516d9
* bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents:
3591
diff
changeset
|
4292 (setq command-line-args-left '("."))) |
974055b516d9
* bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents:
3591
diff
changeset
|
4293 (while command-line-args-left |
55077
6635869bd341
(batch-byte-recompile-directory): Add byte-recompile-directory's opt `arg'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
55043
diff
changeset
|
4294 (byte-recompile-directory (car command-line-args-left) arg) |
3653
974055b516d9
* bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents:
3591
diff
changeset
|
4295 (setq command-line-args-left (cdr command-line-args-left))) |
974055b516d9
* bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents:
3591
diff
changeset
|
4296 (kill-emacs 0)) |
974055b516d9
* bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents:
3591
diff
changeset
|
4297 |
757 | 4298 (provide 'byte-compile) |
5341
2f4fab6070b8
Provide bytecomp as well as byte-compile.
Richard M. Stallman <rms@gnu.org>
parents:
5283
diff
changeset
|
4299 (provide 'bytecomp) |
757 | 4300 |
4301 | |
4302 ;;; report metering (see the hacks in bytecode.c) | |
4303 | |
51737
10cd0bec4a7f
(byte-compile-defvar): Check and set the default value of the variable.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51289
diff
changeset
|
4304 (defvar byte-code-meter) |
784
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4305 (defun byte-compile-report-ops () |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4306 (with-output-to-temp-buffer "*Meter*" |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4307 (set-buffer "*Meter*") |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4308 (let ((i 0) n op off) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4309 (while (< i 256) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4310 (setq n (aref (aref byte-code-meter 0) i) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4311 off nil) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4312 (if t ;(not (zerop n)) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4313 (progn |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4314 (setq op i) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4315 (setq off nil) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4316 (cond ((< op byte-nth) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4317 (setq off (logand op 7)) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4318 (setq op (logand op 248))) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4319 ((>= op byte-constant) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4320 (setq off (- op byte-constant) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4321 op byte-constant))) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4322 (setq op (aref byte-code-vector op)) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4323 (insert (format "%-4d" i)) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4324 (insert (symbol-name op)) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4325 (if off (insert " [" (int-to-string off) "]")) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4326 (indent-to 40) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4327 (insert (int-to-string n) "\n"))) |
6d993c174c62
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
757
diff
changeset
|
4328 (setq i (1+ i)))))) |
757 | 4329 |
4330 ;; To avoid "lisp nesting exceeds max-lisp-eval-depth" when bytecomp compiles | |
4331 ;; itself, compile some of its most used recursive functions (at load time). | |
4332 ;; | |
4333 (eval-when-compile | |
12511
93a7cb2eefcc
Made executing-macro, before-change-function, after-change-function and font-lock-doc-string-face obsolete.
Simon Marshall <simon@gnu.org>
parents:
12487
diff
changeset
|
4334 (or (byte-code-function-p (symbol-function 'byte-compile-form)) |
93a7cb2eefcc
Made executing-macro, before-change-function, after-change-function and font-lock-doc-string-face obsolete.
Simon Marshall <simon@gnu.org>
parents:
12487
diff
changeset
|
4335 (assq 'byte-code (symbol-function 'byte-compile-form)) |
93a7cb2eefcc
Made executing-macro, before-change-function, after-change-function and font-lock-doc-string-face obsolete.
Simon Marshall <simon@gnu.org>
parents:
12487
diff
changeset
|
4336 (let ((byte-optimize nil) ; do it fast |
93a7cb2eefcc
Made executing-macro, before-change-function, after-change-function and font-lock-doc-string-face obsolete.
Simon Marshall <simon@gnu.org>
parents:
12487
diff
changeset
|
4337 (byte-compile-warnings nil)) |
84746 | 4338 (mapc (lambda (x) |
4339 (or noninteractive (message "compiling %s..." x)) | |
4340 (byte-compile x) | |
4341 (or noninteractive (message "compiling %s...done" x))) | |
4342 '(byte-compile-normal-call | |
4343 byte-compile-form | |
4344 byte-compile-body | |
4345 ;; Inserted some more than necessary, to speed it up. | |
4346 byte-compile-top-level | |
4347 byte-compile-out-toplevel | |
4348 byte-compile-constant | |
4349 byte-compile-variable-ref)))) | |
12511
93a7cb2eefcc
Made executing-macro, before-change-function, after-change-function and font-lock-doc-string-face obsolete.
Simon Marshall <simon@gnu.org>
parents:
12487
diff
changeset
|
4350 nil) |
819
5bbabfcef929
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
784
diff
changeset
|
4351 |
27584 | 4352 (run-hooks 'bytecomp-load-hook) |
4353 | |
58154 | 4354 ;; arch-tag: 9c97b0f0-8745-4571-bfc3-8dceb677292a |
819
5bbabfcef929
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
784
diff
changeset
|
4355 ;;; bytecomp.el ends here |