annotate lisp/emacs-lisp/bytecomp.el @ 38136:278f2295cde6

New node Program Misc; text about word and paragraph and selective display features moved there. Major rewrite of Programming Modes node. Mention font lock and compilation commands in initial list of capabilities. Rewrite explanation of C-M- convention. In Basic Indent, add intro text.
author Richard M. Stallman <rms@gnu.org>
date Wed, 20 Jun 2001 10:57:04 +0000
parents 3d650ae7e609
children 253f761ad37b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
819
5bbabfcef929 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 784
diff changeset
1 ;;; bytecomp.el --- compilation of Lisp code into byte code.
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2
27824
52c0cae80495 Change old backquote syntax.
Dave Love <fx@gnu.org>
parents: 27584
diff changeset
3 ;; Copyright (C) 1985, 1986, 1987, 1992, 1994, 1998, 2000
52c0cae80495 Change old backquote syntax.
Dave Love <fx@gnu.org>
parents: 27584
diff changeset
4 ;; 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
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
9 ;; Keywords: lisp
819
5bbabfcef929 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 784
diff changeset
10
28402
843e552813e3 Doc fixes.
Dave Love <fx@gnu.org>
parents: 28336
diff changeset
11 ;;; This version incorporates changes up to version 2.10 of the
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
12 ;;; Zawinski-Furuseth compiler.
37909
3d650ae7e609 (byte-compile-file-form-autoload): Use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35145
diff changeset
13 (defconst byte-compile-version "$Revision: 2.82 $")
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15 ;; This file is part of GNU Emacs.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 ;; GNU Emacs is free software; you can redistribute it and/or modify
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 ;; it under the terms of the GNU General Public License as published by
819
5bbabfcef929 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 784
diff changeset
19 ;; the Free Software Foundation; either version 2, or (at your option)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20 ;; any later version.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
22 ;; GNU Emacs is distributed in the hope that it will be useful,
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
23 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
24 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
25 ;; GNU General Public License for more details.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
26
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
27 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
28 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
29 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
30 ;; Boston, MA 02111-1307, USA.
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
31
2307
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2299
diff changeset
32 ;;; Commentary:
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2299
diff changeset
33
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2299
diff changeset
34 ;; 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
35 ;; 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
36 ;; faster. [`LAP' == `Lisp Assembly Program'.]
2307
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2299
diff changeset
37 ;; 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
38
819
5bbabfcef929 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 784
diff changeset
39 ;;; Code:
5bbabfcef929 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 784
diff changeset
40
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
41 ;; ========================================================================
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
42 ;; Entry points:
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
43 ;; byte-recompile-directory, byte-compile-file,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
44 ;; batch-byte-compile, batch-byte-recompile-directory,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
45 ;; byte-compile, compile-defun,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
46 ;; display-call-tree
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
47 ;; (byte-compile-buffer and byte-compile-and-load-file were turned off
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
48 ;; because they are not terribly useful and get in the way of completion.)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
49
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
50 ;; This version of the byte compiler has the following improvements:
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
51 ;; + optimization of compiled code:
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
52 ;; - removal of unreachable code;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
53 ;; - removal of calls to side-effectless functions whose return-value
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
54 ;; is unused;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
55 ;; - compile-time evaluation of safe constant forms, such as (consp nil)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
56 ;; and (ash 1 6);
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
57 ;; - open-coding of literal lambdas;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
58 ;; - peephole optimization of emitted code;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
59 ;; - trivial functions are left uncompiled for speed.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
60 ;; + support for inline functions;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
61 ;; + compile-time evaluation of arbitrary expressions;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
62 ;; + compile-time warning messages for:
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
63 ;; - functions being redefined with incompatible arglists;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
64 ;; - functions being redefined as macros, or vice-versa;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
65 ;; - functions or macros defined multiple times in the same file;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
66 ;; - functions being called with the incorrect number of arguments;
28402
843e552813e3 Doc fixes.
Dave Love <fx@gnu.org>
parents: 28336
diff changeset
67 ;; - functions being called which are not defined globally, in the
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
68 ;; file, or as autoloads;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
69 ;; - assignment and reference of undeclared free variables;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
70 ;; - various syntax errors;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
71 ;; + correct compilation of nested defuns, defmacros, defvars and defsubsts;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
72 ;; + correct compilation of top-level uses of macros;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
73 ;; + the ability to generate a histogram of functions called.
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
74
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
75 ;; User customization variables:
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
76 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
77 ;; byte-compile-verbose Whether to report the function currently being
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
78 ;; compiled in the minibuffer;
28402
843e552813e3 Doc fixes.
Dave Love <fx@gnu.org>
parents: 28336
diff changeset
79 ;; byte-optimize Whether to do optimizations; this may be
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
80 ;; t, nil, 'source, or 'byte;
28402
843e552813e3 Doc fixes.
Dave Love <fx@gnu.org>
parents: 28336
diff changeset
81 ;; byte-optimize-log Whether to report (in excruciating detail)
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
82 ;; exactly which optimizations have been made.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
83 ;; This may be t, nil, 'source, or 'byte;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
84 ;; byte-compile-error-on-warn Whether to stop compilation when a warning is
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
85 ;; produced;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
86 ;; byte-compile-delete-errors Whether the optimizer may delete calls or
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
87 ;; variable references that are side-effect-free
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
88 ;; except that they may return an error.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
89 ;; byte-compile-generate-call-tree Whether to generate a histogram of
28402
843e552813e3 Doc fixes.
Dave Love <fx@gnu.org>
parents: 28336
diff changeset
90 ;; function calls. This can be useful for
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
91 ;; finding unused functions, as well as simple
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
92 ;; performance metering.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
93 ;; byte-compile-warnings List of warnings to issue, or t. May contain
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
94 ;; 'free-vars (references to variables not in the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
95 ;; current lexical scope)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
96 ;; 'unresolved (calls to unknown functions)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
97 ;; 'callargs (lambda calls with args that don't
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
98 ;; match the lambda's definition)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
99 ;; 'redefine (function cell redefined from
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
100 ;; a macro to a lambda or vice versa,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
101 ;; or redefined to take other args)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
102 ;; 'obsolete (obsolete variables and functions)
28295
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
103 ;; 'noruntime (calls to functions only defined
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
104 ;; within `eval-when-compile')
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
105 ;; byte-compile-compatibility Whether the compiler should
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
106 ;; generate .elc files which can be loaded into
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
107 ;; generic emacs 18.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
108 ;; emacs-lisp-file-regexp Regexp for the extension of source-files;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
109 ;; see also the function byte-compile-dest-file.
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
110
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
111 ;; New Features:
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
112 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
113 ;; o The form `defsubst' is just like `defun', except that the function
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
114 ;; generated will be open-coded in compiled code which uses it. This
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
115 ;; means that no function call will be generated, it will simply be
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
116 ;; spliced in. Lisp functions calls are very slow, so this can be a
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
117 ;; big win.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
118 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
119 ;; You can generally accomplish the same thing with `defmacro', but in
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
120 ;; that case, the defined procedure can't be used as an argument to
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
121 ;; mapcar, etc.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
122 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
123 ;; o You can also open-code one particular call to a function without
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
124 ;; open-coding all calls. Use the 'inline' form to do this, like so:
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
125 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
126 ;; (inline (foo 1 2 3)) ;; `foo' will be open-coded
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
127 ;; or...
28402
843e552813e3 Doc fixes.
Dave Love <fx@gnu.org>
parents: 28336
diff changeset
128 ;; (inline ;; `foo' and `baz' will be
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
129 ;; (foo 1 2 3 (bar 5)) ;; open-coded, but `bar' will not.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
130 ;; (baz 0))
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
131 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
132 ;; o It is possible to open-code a function in the same file it is defined
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
133 ;; in without having to load that file before compiling it. the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
134 ;; byte-compiler has been modified to remember function definitions in
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
135 ;; the compilation environment in the same way that it remembers macro
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
136 ;; definitions.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
137 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
138 ;; o Forms like ((lambda ...) ...) are open-coded.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
139 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
140 ;; o The form `eval-when-compile' is like progn, except that the body
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
141 ;; is evaluated at compile-time. When it appears at top-level, this
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
142 ;; is analogous to the Common Lisp idiom (eval-when (compile) ...).
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
143 ;; When it does not appear at top-level, it is similar to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
144 ;; Common Lisp #. reader macro (but not in interpreted code).
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
145 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
146 ;; o The form `eval-and-compile' is similar to eval-when-compile, but
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
147 ;; the whole form is evalled both at compile-time and at run-time.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
148 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
149 ;; o The command compile-defun is analogous to eval-defun.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
150 ;;
28402
843e552813e3 Doc fixes.
Dave Love <fx@gnu.org>
parents: 28336
diff changeset
151 ;; o If you run byte-compile-file on a filename which is visited in a
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
152 ;; buffer, and that buffer is modified, you are asked whether you want
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
153 ;; to save the buffer before compiling.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
154 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
155 ;; o byte-compiled files now start with the string `;ELC'.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
156 ;; Some versions of `file' can be customized to recognize that.
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
160 (or (fboundp 'defsubst)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
161 ;; This really ought to be loaded already!
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
162 (load-library "byte-run"))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
163
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
164 ;;; The feature of compiling in a specific target Emacs version
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
165 ;;; has been turned off because compile time options are a bad idea.
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
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
168
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
169 ;;; The crud you see scattered through this file of the form
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
170 ;;; (or (and (boundp 'epoch::version) epoch::version)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
171 ;;; (string-lessp emacs-version "19"))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
172 ;;; is because the Epoch folks couldn't be bothered to follow the
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
173 ;;; normal emacs version numbering convention.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
181 ;;
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))
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
185 ;;
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
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
194
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
195
20779
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
196 (defgroup bytecomp nil
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
197 "Emacs Lisp byte-compiler"
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
198 :group 'lisp)
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
199
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
200 (defcustom emacs-lisp-file-regexp (if (eq system-type 'vax-vms)
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
201 "\\.EL\\(;[0-9]+\\)?$"
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
202 "\\.el$")
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
203 "*Regexp which matches Emacs Lisp source files.
20779
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
204 You may want to redefine the function `byte-compile-dest-file'
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
205 if you change this variable."
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
206 :group 'bytecomp
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
207 :type 'regexp)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
208
12928
5c76c36717cb (byte-compiler-base-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12823
diff changeset
209 ;; 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
210 ;; 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
211 ;; through to the output file name.
5c76c36717cb (byte-compiler-base-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12823
diff changeset
212 (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
213 (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
214 'byte-compiler-base-file-name)))
5c76c36717cb (byte-compiler-base-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12823
diff changeset
215 (if handler
5c76c36717cb (byte-compiler-base-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12823
diff changeset
216 (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
217 filename)))
5c76c36717cb (byte-compiler-base-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12823
diff changeset
218
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
219 (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
220 ;; The user may want to redefine this along with emacs-lisp-file-regexp,
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
221 ;; so only define it if it is undefined.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
222 (defun byte-compile-dest-file (filename)
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
223 "Convert an Emacs Lisp source file name to a compiled file name."
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
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
225 (setq filename (file-name-sans-versions filename))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
226 (cond ((eq system-type 'vax-vms)
23054
2f2375c24426 Whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 22910
diff changeset
227 (concat (substring filename 0 (string-match ";" filename)) "c"))
2f2375c24426 Whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 22910
diff changeset
228 ((string-match emacs-lisp-file-regexp filename)
2f2375c24426 Whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 22910
diff changeset
229 (concat (substring filename 0 (match-beginning 0)) ".elc"))
2f2375c24426 Whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 22910
diff changeset
230 (t (concat filename ".elc")))))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
231
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
232 ;; 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
233 (autoload 'byte-compile-inline-expand "byte-opt")
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
234
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
235 ;; This is the entrypoint to the lapcode optimizer pass1.
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
236 (autoload 'byte-optimize-form "byte-opt")
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
237 ;; This is the entrypoint to the lapcode optimizer pass2.
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
238 (autoload 'byte-optimize-lapcode "byte-opt")
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
239 (autoload 'byte-compile-unfold-lambda "byte-opt")
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
240
1819
df06a60f3362 * disass.el (disassemble): Add autoload cookie for this.
Jim Blandy <jimb@redhat.com>
parents: 1604
diff changeset
241 ;; 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
242 ;; 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
243 ;; 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
244 ;; thing to do.
df06a60f3362 * disass.el (disassemble): Add autoload cookie for this.
Jim Blandy <jimb@redhat.com>
parents: 1604
diff changeset
245 (autoload 'byte-decompile-bytecode "byte-opt")
df06a60f3362 * disass.el (disassemble): Add autoload cookie for this.
Jim Blandy <jimb@redhat.com>
parents: 1604
diff changeset
246
20779
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
247 (defcustom byte-compile-verbose
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
248 (and (not noninteractive) (> baud-rate search-slow-speed))
20779
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
249 "*Non-nil means print messages describing progress of byte-compiler."
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
250 :group 'bytecomp
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
251 :type 'boolean)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
252
20779
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
253 (defcustom byte-compile-compatibility nil
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
254 "*Non-nil means generate output that can run in Emacs 18."
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
255 :group 'bytecomp
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
256 :type 'boolean)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
843e552813e3 Doc fixes.
Dave Love <fx@gnu.org>
parents: 28336
diff changeset
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
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
264
20779
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
265 (defcustom byte-optimize t
1129
6f1d3e86c4fd entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 958
diff changeset
266 "*Enables optimization in the byte compiler.
6f1d3e86c4fd entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 958
diff changeset
267 nil means don't do any optimization.
6f1d3e86c4fd entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 958
diff changeset
268 t means do all optimizations.
6f1d3e86c4fd entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 958
diff changeset
269 `source' means do source-level optimizations only.
20779
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
270 `byte' means do code-level optimizations only."
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
271 :group 'bytecomp
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
272 :type '(choice (const :tag "none" nil)
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
273 (const :tag "all" t)
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
274 (const :tag "source-level" source)
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
275 (const :tag "byte-level" byte)))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
276
20779
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
277 (defcustom byte-compile-delete-errors t
1129
6f1d3e86c4fd entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 958
diff changeset
278 "*If non-nil, the optimizer may delete forms that may signal an error.
20779
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
279 This includes variable references and calls to functions such as `car'."
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
280 :group 'bytecomp
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
281 :type 'boolean)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
282
10235
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
283 (defvar byte-compile-dynamic nil
20779
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
284 "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
285 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
286 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
287 function is called.
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
288
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
289 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
290 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
291 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
292
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
293 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
294 the functions you loaded will not be able to run.")
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
295
20779
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
296 (defcustom byte-compile-dynamic-docstrings t
10235
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
297 "*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
298 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
299 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
300 are actually needed.
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
301
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
302 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
303 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
304
11848
1a50b9d542ce (byte-compile-dynamic-docstrings): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 11819
diff changeset
305 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
306 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
307 -*-byte-compile-dynamic-docstrings:nil;-*-
1a50b9d542ce (byte-compile-dynamic-docstrings): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 11819
diff changeset
308 You can also set the variable globally.
1a50b9d542ce (byte-compile-dynamic-docstrings): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 11819
diff changeset
309
20779
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
310 This option is enabled by default because it reduces Emacs memory usage."
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
311 :group 'bytecomp
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
312 :type 'boolean)
10235
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
313
20779
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
314 (defcustom byte-optimize-log nil
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
315 "*If true, the byte-compiler will log its optimizations into *Compile-Log*.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
316 If this is 'source, then only source-level optimizations will be logged.
20779
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
317 If it is 'byte, then only byte-level optimizations will be logged."
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
318 :group 'bytecomp
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
319 :type '(choice (const :tag "none" nil)
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
320 (const :tag "all" t)
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
321 (const :tag "source-level" source)
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
322 (const :tag "byte-level" byte)))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
323
20779
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
324 (defcustom byte-compile-error-on-warn nil
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
325 "*If true, the byte-compiler reports warnings with `error'."
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
326 :group 'bytecomp
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
327 :type 'boolean)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
328
10256
83d56dd99a40 (byte-compile-warning-types): Add obsolete.
Richard M. Stallman <rms@gnu.org>
parents: 10235
diff changeset
329 (defconst byte-compile-warning-types
28295
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
330 '(redefine callargs free-vars unresolved obsolete noruntime))
20779
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
331 (defcustom byte-compile-warnings t
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
332 "*List of warnings that the byte-compiler should issue (t for all).
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
333 Elements of the list may be be:
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
334
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
335 free-vars references to variables not in the current lexical scope.
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
336 unresolved calls to unknown functions.
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
337 callargs lambda calls with args that don't match the definition.
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
338 redefine function cell redefined from a macro to a lambda or vice
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
339 versa, or redefined to take a different number of arguments.
24025
547ceb9e069c (byte-compile-warnings): Doc fix.
Dave Love <fx@gnu.org>
parents: 23731
diff changeset
340 obsolete obsolete variables and functions."
20779
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
341 :group 'bytecomp
21510
daf7dfe93205 (byte-compile-warnings): Fix customize
Andreas Schwab <schwab@suse.de>
parents: 20847
diff changeset
342 :type '(choice (const :tag "All" t)
daf7dfe93205 (byte-compile-warnings): Fix customize
Andreas Schwab <schwab@suse.de>
parents: 20847
diff changeset
343 (set :menu-tag "Some"
daf7dfe93205 (byte-compile-warnings): Fix customize
Andreas Schwab <schwab@suse.de>
parents: 20847
diff changeset
344 (const free-vars) (const unresolved)
daf7dfe93205 (byte-compile-warnings): Fix customize
Andreas Schwab <schwab@suse.de>
parents: 20847
diff changeset
345 (const callargs) (const redefined)
28295
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
346 (const obsolete) (const noruntime))))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
347
20779
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
348 (defcustom byte-compile-generate-call-tree nil
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
349 "*Non-nil means collect call-graph information when compiling.
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
350 This records functions were called and from where.
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
351 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
352 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
353 the graph.
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
354
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
355 The call tree only lists functions called, not macros used. Those functions
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
356 which the byte-code interpreter knows about directly (eq, cons, etc.) are
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
357 not reported.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
358
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
359 The call tree also lists those functions which are not known to be called
10372
bdf897e70017 Fix text punctuation.
Karl Heuer <kwzh@gnu.org>
parents: 10256
diff changeset
360 \(that is, to which no calls have been compiled). Functions which can be
20779
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
361 invoked interactively are excluded from this list."
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
362 :group 'bytecomp
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
363 :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
364 (other :tag "Ask" lambda)))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
365
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
366 (defconst byte-compile-call-tree nil "Alist of functions and their call tree.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
367 Each element looks like
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
368
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
369 \(FUNCTION CALLERS CALLS\)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
370
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
371 where CALLERS is a list of functions that call FUNCTION, and CALLS
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
372 is a list of functions for which calls were generated while compiling
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
373 FUNCTION.")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
374
20779
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
375 (defcustom byte-compile-call-tree-sort 'name
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
376 "*If non-nil, sort the call tree.
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
377 The values `name', `callers', `calls', `calls+callers'
20779
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
378 specify different fields to sort on."
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
379 :group 'bytecomp
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
380 :type '(choice (const name) (const callers) (const calls)
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
381 (const calls+callers) (const nil)))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
382
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
383 ;; (defvar byte-compile-overwrite-file t
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
384 ;; "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
385 ;; 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
386 ;; existing .elc files will simply be overwritten, and the existing modes
28402
843e552813e3 Doc fixes.
Dave Love <fx@gnu.org>
parents: 28336
diff changeset
387 ;; 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
388 ;; 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
389 ;; which the link points to being overwritten.")
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
390
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
391 (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
392 "List of all constants encountered during compilation of this form.")
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
393 (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
394 "List of all variables encountered during compilation of this form.")
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
395 (defvar byte-compile-bound-variables nil
26922
6fdf1f6c23a0 (byte-compile-bound-variables): Doc fix.
Dave Love <fx@gnu.org>
parents: 25636
diff changeset
396 "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
397 This list lives partly on the stack.")
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
398 (defvar byte-compile-free-references)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
399 (defvar byte-compile-free-assignments)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
400
1129
6f1d3e86c4fd entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 958
diff changeset
401 (defvar byte-compiler-error-flag)
6f1d3e86c4fd entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 958
diff changeset
402
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
403 (defconst byte-compile-initial-macro-environment
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
404 '(
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
405 ;; (byte-compiler-options . (lambda (&rest forms)
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
406 ;; (apply 'byte-compiler-options-handler forms)))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
407 (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
408 (list 'quote
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
409 (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
410 (cons 'progn body))))))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
411 (eval-and-compile . (lambda (&rest body)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
412 (eval (cons 'progn body))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
413 (cons 'progn body))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
414 "The default macro-environment passed to macroexpand by the compiler.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
415 Placing a macro here will cause a macro to have different semantics when
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
416 expanded by the compiler as when expanded by the interpreter.")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
417
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
418 (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
419 "Alist of macros defined in the file being compiled.
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
420 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
421 \(MACRONAME . nil) when a macro is redefined as a function.")
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
422
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
423 (defvar byte-compile-function-environment nil
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
424 "Alist of functions defined in the file being compiled.
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
425 This is so we can inline them when necessary.
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
426 Each element looks like (FUNCTIONNAME . DEFINITION). It is
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
427 \(FUNCTIONNAME . nil) when a function is redefined as a macro.")
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
428
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
429 (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
430 "Alist of undefined functions to which calls have been compiled.
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
431 Used for warnings when the function is not known to be defined or is later
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
432 defined with incorrect args.")
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
433
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
434 (defvar byte-compile-tag-number 0)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
435 (defvar byte-compile-output nil
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
436 "Alist describing contents to put in byte code string.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
437 Each element is (INDEX . VALUE)")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
438 (defvar byte-compile-depth 0 "Current depth of execution stack.")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
439 (defvar byte-compile-maxdepth 0 "Maximum depth of execution stack.")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
440
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
441
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
442 ;;; The byte codes; this information is duplicated in bytecomp.c
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
443
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
444 (defconst byte-code-vector nil
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
445 "An array containing byte-code names indexed by byte-code values.")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
446
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
447 (defconst byte-stack+-info nil
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
448 "An array with the stack adjustment for each byte-code.")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
449
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
450 (defmacro byte-defop (opcode stack-adjust opname &optional docstring)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
451 ;; This is a speed-hack for building the byte-code-vector at compile-time.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
452 ;; We fill in the vector at macroexpand-time, and then after the last call
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
453 ;; to byte-defop, we write the vector out as a constant instead of writing
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
454 ;; out a bunch of calls to aset.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
455 ;; Actually, we don't fill in the vector itself, because that could make
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
456 ;; it problematic to compile big changes to this compiler; we store the
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
457 ;; values on its plist, and remove them later in -extrude.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
458 (let ((v1 (or (get 'byte-code-vector 'tmp-compile-time-value)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
459 (put 'byte-code-vector 'tmp-compile-time-value
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
460 (make-vector 256 nil))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
461 (v2 (or (get 'byte-stack+-info 'tmp-compile-time-value)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
462 (put 'byte-stack+-info 'tmp-compile-time-value
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
463 (make-vector 256 nil)))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
464 (aset v1 opcode opname)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
465 (aset v2 opcode stack-adjust))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
466 (if docstring
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
467 (list 'defconst opname opcode (concat "Byte code opcode " docstring "."))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
468 (list 'defconst opname opcode)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
469
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
470 (defmacro byte-extrude-byte-code-vectors ()
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
471 (prog1 (list 'setq 'byte-code-vector
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
472 (get 'byte-code-vector 'tmp-compile-time-value)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
473 'byte-stack+-info
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
474 (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
475 (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
476 (put 'byte-stack+-info 'tmp-compile-time-value nil)))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
477
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
478
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
479 ;; unused: 0-7
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
480
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
481 ;; These opcodes are special in that they pack their argument into the
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
482 ;; opcode word.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
483 ;;
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
484 (byte-defop 8 1 byte-varref "for variable reference")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
485 (byte-defop 16 -1 byte-varset "for setting a variable")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
486 (byte-defop 24 -1 byte-varbind "for binding a variable")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
487 (byte-defop 32 0 byte-call "for calling a function")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
488 (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
489 ;; codes 8-47 are consumed by the preceding opcodes
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
490
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
491 ;; unused: 48-55
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
492
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
493 (byte-defop 56 -1 byte-nth)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
494 (byte-defop 57 0 byte-symbolp)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
495 (byte-defop 58 0 byte-consp)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
496 (byte-defop 59 0 byte-stringp)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
497 (byte-defop 60 0 byte-listp)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
498 (byte-defop 61 -1 byte-eq)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
499 (byte-defop 62 -1 byte-memq)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
500 (byte-defop 63 0 byte-not)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
501 (byte-defop 64 0 byte-car)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
502 (byte-defop 65 0 byte-cdr)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
503 (byte-defop 66 -1 byte-cons)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
504 (byte-defop 67 0 byte-list1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
505 (byte-defop 68 -1 byte-list2)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
506 (byte-defop 69 -2 byte-list3)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
507 (byte-defop 70 -3 byte-list4)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
508 (byte-defop 71 0 byte-length)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
509 (byte-defop 72 -1 byte-aref)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
510 (byte-defop 73 -2 byte-aset)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
511 (byte-defop 74 0 byte-symbol-value)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
512 (byte-defop 75 0 byte-symbol-function) ; this was commented out
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
513 (byte-defop 76 -1 byte-set)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
514 (byte-defop 77 -1 byte-fset) ; this was commented out
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
515 (byte-defop 78 -1 byte-get)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
516 (byte-defop 79 -2 byte-substring)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
517 (byte-defop 80 -1 byte-concat2)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
518 (byte-defop 81 -2 byte-concat3)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
519 (byte-defop 82 -3 byte-concat4)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
520 (byte-defop 83 0 byte-sub1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
521 (byte-defop 84 0 byte-add1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
522 (byte-defop 85 -1 byte-eqlsign)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
523 (byte-defop 86 -1 byte-gtr)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
524 (byte-defop 87 -1 byte-lss)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
525 (byte-defop 88 -1 byte-leq)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
526 (byte-defop 89 -1 byte-geq)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
527 (byte-defop 90 -1 byte-diff)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
528 (byte-defop 91 0 byte-negate)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
529 (byte-defop 92 -1 byte-plus)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
530 (byte-defop 93 -1 byte-max)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
531 (byte-defop 94 -1 byte-min)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
532 (byte-defop 95 -1 byte-mult) ; v19 only
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
533 (byte-defop 96 1 byte-point)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
534 (byte-defop 98 0 byte-goto-char)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
535 (byte-defop 99 0 byte-insert)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
536 (byte-defop 100 1 byte-point-max)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
537 (byte-defop 101 1 byte-point-min)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
538 (byte-defop 102 0 byte-char-after)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
539 (byte-defop 103 1 byte-following-char)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
540 (byte-defop 104 1 byte-preceding-char)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
541 (byte-defop 105 1 byte-current-column)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
542 (byte-defop 106 0 byte-indent-to)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
543 (byte-defop 107 0 byte-scan-buffer-OBSOLETE) ; no longer generated as of v18
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
544 (byte-defop 108 1 byte-eolp)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
545 (byte-defop 109 1 byte-eobp)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
546 (byte-defop 110 1 byte-bolp)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
547 (byte-defop 111 1 byte-bobp)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
548 (byte-defop 112 1 byte-current-buffer)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
549 (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
550 (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
551 "To make a binding to record the current buffer")
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
552 (byte-defop 115 0 byte-set-mark-OBSOLETE)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
553 (byte-defop 116 1 byte-interactive-p)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
554
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
555 ;; These ops are new to v19
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
556 (byte-defop 117 0 byte-forward-char)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
557 (byte-defop 118 0 byte-forward-word)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
558 (byte-defop 119 -1 byte-skip-chars-forward)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
559 (byte-defop 120 -1 byte-skip-chars-backward)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
560 (byte-defop 121 0 byte-forward-line)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
561 (byte-defop 122 0 byte-char-syntax)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
562 (byte-defop 123 -1 byte-buffer-substring)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
563 (byte-defop 124 -1 byte-delete-region)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
564 (byte-defop 125 -1 byte-narrow-to-region)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
565 (byte-defop 126 1 byte-widen)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
566 (byte-defop 127 0 byte-end-of-line)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
567
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
568 ;; unused: 128
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
569
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
570 ;; These store their argument in the next two bytes
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
571 (byte-defop 129 1 byte-constant2
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
572 "for reference to a constant with vector index >= byte-constant-limit")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
573 (byte-defop 130 0 byte-goto "for unconditional jump")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
574 (byte-defop 131 -1 byte-goto-if-nil "to pop value and jump if it's nil")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
575 (byte-defop 132 -1 byte-goto-if-not-nil "to pop value and jump if it's not nil")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
576 (byte-defop 133 -1 byte-goto-if-nil-else-pop
28402
843e552813e3 Doc fixes.
Dave Love <fx@gnu.org>
parents: 28336
diff changeset
577 "to examine top-of-stack, jump and don't pop it if it's nil,
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
578 otherwise pop it")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
579 (byte-defop 134 -1 byte-goto-if-not-nil-else-pop
28402
843e552813e3 Doc fixes.
Dave Love <fx@gnu.org>
parents: 28336
diff changeset
580 "to examine top-of-stack, jump and don't pop it if it's non nil,
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
581 otherwise pop it")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
582
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
583 (byte-defop 135 -1 byte-return "to pop a value and return it from `byte-code'")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
584 (byte-defop 136 -1 byte-discard "to discard one value from stack")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
585 (byte-defop 137 1 byte-dup "to duplicate the top of the stack")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
586
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
587 (byte-defop 138 0 byte-save-excursion
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
588 "to make a binding to record the buffer, point and mark")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
589 (byte-defop 139 0 byte-save-window-excursion
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
590 "to make a binding to record entire window configuration")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
591 (byte-defop 140 0 byte-save-restriction
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
592 "to make a binding to record the current buffer clipping restrictions")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
593 (byte-defop 141 -1 byte-catch
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
594 "for catch. Takes, on stack, the tag and an expression for the body")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
595 (byte-defop 142 -1 byte-unwind-protect
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
596 "for unwind-protect. Takes, on stack, an expression for the unwind-action")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
597
28402
843e552813e3 Doc fixes.
Dave Love <fx@gnu.org>
parents: 28336
diff changeset
598 ;; 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
599 ;; an expression for the body, and a list of clauses.
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
600 (byte-defop 143 -2 byte-condition-case)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
601
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
602 ;; For entry to with-output-to-temp-buffer.
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
603 ;; Takes, on stack, the buffer name.
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
604 ;; Binds standard-output and does some other things.
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
605 ;; 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
606 (byte-defop 144 0 byte-temp-output-buffer-setup)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
607
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
608 ;; For exit from with-output-to-temp-buffer.
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
609 ;; 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
610 ;; Pops them both, then pushes the value back on.
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
611 ;; Unbinds standard-output and makes the temp buffer visible.
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
612 (byte-defop 145 -1 byte-temp-output-buffer-show)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
613
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
614 ;; these ops are new to v19
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
615
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
616 ;; 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
617 ;; 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
618 (byte-defop 146 0 byte-unbind-all)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
619
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
620 ;; these ops are new to v19
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
621 (byte-defop 147 -2 byte-set-marker)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
622 (byte-defop 148 0 byte-match-beginning)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
623 (byte-defop 149 0 byte-match-end)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
624 (byte-defop 150 0 byte-upcase)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
625 (byte-defop 151 0 byte-downcase)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
626 (byte-defop 152 -1 byte-string=)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
627 (byte-defop 153 -1 byte-string<)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
628 (byte-defop 154 -1 byte-equal)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
629 (byte-defop 155 -1 byte-nthcdr)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
630 (byte-defop 156 -1 byte-elt)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
631 (byte-defop 157 -1 byte-member)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
632 (byte-defop 158 -1 byte-assq)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
633 (byte-defop 159 0 byte-nreverse)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
634 (byte-defop 160 -1 byte-setcar)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
635 (byte-defop 161 -1 byte-setcdr)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
636 (byte-defop 162 0 byte-car-safe)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
637 (byte-defop 163 0 byte-cdr-safe)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
638 (byte-defop 164 -1 byte-nconc)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
639 (byte-defop 165 -1 byte-quo)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
640 (byte-defop 166 -1 byte-rem)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
641 (byte-defop 167 0 byte-numberp)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
642 (byte-defop 168 0 byte-integerp)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
643
848
58d3ed08f776 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
644 ;; unused: 169-174
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
645 (byte-defop 175 nil byte-listN)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
646 (byte-defop 176 nil byte-concatN)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
647 (byte-defop 177 nil byte-insertN)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
648
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
649 ;; unused: 178-191
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
650
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
651 (byte-defop 192 1 byte-constant "for reference to a constant")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
652 ;; codes 193-255 are consumed by byte-constant.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
653 (defconst byte-constant-limit 64
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
654 "Exclusive maximum index usable in the `byte-constant' opcode.")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
655
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
656 (defconst byte-goto-ops '(byte-goto byte-goto-if-nil byte-goto-if-not-nil
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
657 byte-goto-if-nil-else-pop
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
658 byte-goto-if-not-nil-else-pop)
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
659 "List of byte-codes whose offset is a pc.")
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
660
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
661 (defconst byte-goto-always-pop-ops '(byte-goto-if-nil byte-goto-if-not-nil))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
662
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
663 (byte-extrude-byte-code-vectors)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
664
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
665 ;;; lapcode generator
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
666 ;;;
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
667 ;;; the byte-compiler now does source -> lapcode -> bytecode instead of
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
668 ;;; source -> bytecode, because it's a lot easier to make optimizations
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
669 ;;; on lapcode than on bytecode.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
670 ;;;
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
671 ;;; Elements of the lapcode list are of the form (<instruction> . <parameter>)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
672 ;;; where instruction is a symbol naming a byte-code instruction,
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
673 ;;; and parameter is an argument to that instruction, if any.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
674 ;;;
28402
843e552813e3 Doc fixes.
Dave Love <fx@gnu.org>
parents: 28336
diff changeset
675 ;;; The instruction can be the pseudo-op TAG, which means that this position
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
676 ;;; in the instruction stream is a target of a goto. (car PARAMETER) will be
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
677 ;;; the PC for this location, and the whole instruction "(TAG pc)" will be the
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
678 ;;; parameter for some goto op.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
679 ;;;
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
680 ;;; If the operation is varbind, varref, varset or push-constant, then the
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
681 ;;; parameter is (variable/constant . index_in_constant_vector).
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
682 ;;;
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
683 ;;; First, the source code is macroexpanded and optimized in various ways.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
684 ;;; Then the resultant code is compiled into lapcode. Another set of
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
685 ;;; optimizations are then run over the lapcode. Then the variables and
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
686 ;;; constants referenced by the lapcode are collected and placed in the
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
687 ;;; constants-vector. (This happens now so that variables referenced by dead
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
688 ;;; code don't consume space.) And finally, the lapcode is transformed into
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
689 ;;; compacted byte-code.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
690 ;;;
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
691 ;;; A distinction is made between variables and constants because the variable-
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
692 ;;; referencing instructions are more sensitive to the variables being near the
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
693 ;;; front of the constants-vector than the constant-referencing instructions.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
694 ;;; Also, this lets us notice references to free variables.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
695
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
696 (defun byte-compile-lapcode (lap)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
697 "Turns lapcode into bytecode. The lapcode is destroyed."
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
698 ;; Lapcode modifications: changes the ID of a tag to be the tag's PC.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
699 (let ((pc 0) ; Program counter
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
700 op off ; Operation & offset
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
701 (bytes '()) ; Put the output bytes here
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
702 (patchlist nil) ; List of tags and goto's to patch
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
703 rest rel tmp)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
704 (while lap
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
705 (setq op (car (car lap))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
706 off (cdr (car lap)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
707 (cond ((not (symbolp op))
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
708 (error "Non-symbolic opcode `%s'" op))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
709 ((eq op 'TAG)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
710 (setcar off pc)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
711 (setq patchlist (cons off patchlist)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
712 ((memq op byte-goto-ops)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
713 (setq pc (+ pc 3))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
714 (setq bytes (cons (cons pc (cdr off))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
715 (cons nil
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
716 (cons (symbol-value op) bytes))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
717 (setq patchlist (cons bytes patchlist)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
718 (t
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
719 (setq bytes
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
720 (cond ((cond ((consp off)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
721 ;; Variable or constant reference
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
722 (setq off (cdr off))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
723 (eq op 'byte-constant)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
724 (cond ((< off byte-constant-limit)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
725 (setq pc (1+ pc))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
726 (cons (+ byte-constant off) bytes))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
727 (t
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
728 (setq pc (+ 3 pc))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
729 (cons (lsh off -8)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
730 (cons (logand off 255)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
731 (cons byte-constant2 bytes))))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
732 ((<= byte-listN (symbol-value op))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
733 (setq pc (+ 2 pc))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
734 (cons off (cons (symbol-value op) bytes)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
735 ((< off 6)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
736 (setq pc (1+ pc))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
737 (cons (+ (symbol-value op) off) bytes))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
738 ((< off 256)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
739 (setq pc (+ 2 pc))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
740 (cons off (cons (+ (symbol-value op) 6) bytes)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
741 (t
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
742 (setq pc (+ 3 pc))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
743 (cons (lsh off -8)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
744 (cons (logand off 255)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
745 (cons (+ (symbol-value op) 7)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
746 bytes))))))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
747 (setq lap (cdr lap)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
748 ;;(if (not (= pc (length bytes)))
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
749 ;; (error "Compiler error: pc mismatch - %s %s" pc (length bytes)))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
750 ;; Patch PC into jumps
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
751 (let (bytes)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
752 (while patchlist
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
753 (setq bytes (car patchlist))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
754 (cond ((atom (car bytes))) ; Tag
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
755 (t ; Absolute jump
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
756 (setq pc (car (cdr (car bytes)))) ; Pick PC from tag
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
757 (setcar (cdr bytes) (logand pc 255))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
758 (setcar bytes (lsh pc -8))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
759 (setq patchlist (cdr patchlist))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
760 (concat (nreverse bytes))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
761
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
762
28295
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
763 ;;; compile-time evaluation
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
764
28336
49b7af1b8e1b (byte-compile-eval): Fix and reenable the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28305
diff changeset
765 (defun byte-compile-eval (form)
49b7af1b8e1b (byte-compile-eval): Fix and reenable the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28305
diff changeset
766 "Eval FORM and mark the functions defined therein.
49b7af1b8e1b (byte-compile-eval): Fix and reenable the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28305
diff changeset
767 Each function's symbol gets marked with the `byte-compile-noruntime' property."
28295
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
768 (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
769 (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
770 (prog1 (eval form)
49b7af1b8e1b (byte-compile-eval): Fix and reenable the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28305
diff changeset
771 (when (memq 'noruntime byte-compile-warnings)
28295
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
772 (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
773 (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
774 ;; 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
775 ;; 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
776 (while (and hist-new (not (eq hist-new hist-orig)))
49b7af1b8e1b (byte-compile-eval): Fix and reenable the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28305
diff changeset
777 (let ((xs (pop hist-new)))
49b7af1b8e1b (byte-compile-eval): Fix and reenable the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28305
diff changeset
778 ;; Make sure the file was not already loaded before.
49b7af1b8e1b (byte-compile-eval): Fix and reenable the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28305
diff changeset
779 (unless (assoc (car xs) hist-orig)
49b7af1b8e1b (byte-compile-eval): Fix and reenable the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28305
diff changeset
780 (dolist (s xs)
49b7af1b8e1b (byte-compile-eval): Fix and reenable the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28305
diff changeset
781 (cond
49b7af1b8e1b (byte-compile-eval): Fix and reenable the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28305
diff changeset
782 ((symbolp s) (put s 'byte-compile-noruntime t))
49b7af1b8e1b (byte-compile-eval): Fix and reenable the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28305
diff changeset
783 ((and (consp s) (eq 'autoload (car s)))
49b7af1b8e1b (byte-compile-eval): Fix and reenable the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28305
diff changeset
784 (put (cdr s) 'byte-compile-noruntime t)))))))
49b7af1b8e1b (byte-compile-eval): Fix and reenable the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28305
diff changeset
785 ;; Go through current-load-list for the locally defined funs.
49b7af1b8e1b (byte-compile-eval): Fix and reenable the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28305
diff changeset
786 (while (and hist-nil-new (not (eq hist-nil-new hist-nil-orig)))
28295
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
787 (let ((s (pop hist-nil-new)))
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
788 (when (symbolp s)
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
789 (put s 'byte-compile-noruntime t)))))))))
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
790
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
791
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
792 ;;; byte compiler messages
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
793
10235
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
794 (defvar byte-compile-current-form nil)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
795 (defvar byte-compile-dest-file nil)
33352
bd48e8729dbb (byte-compiling-files-p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33348
diff changeset
796 (defvar byte-compile-current-file nil)
33348
af3d766a1234 (byte-compile-current-file): Don't bind
Gerd Moellmann <gerd@gnu.org>
parents: 32765
diff changeset
797
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
798 (defmacro byte-compile-log (format-string &rest args)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
799 (list 'and
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
800 'byte-optimize
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
801 '(memq byte-optimize-log '(t source))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
802 (list 'let '((print-escape-newlines t)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
803 (print-level 4)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
804 (print-length 4))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
805 (list 'byte-compile-log-1
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
806 (cons 'format
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
807 (cons format-string
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
808 (mapcar
29352
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
809 (lambda (x)
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
810 (if (symbolp x) (list 'prin1-to-string x) x))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
811 args)))))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
812
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
813 (defconst byte-compile-last-warned-form nil)
32763
5436a18ec371 [the following changes fix a bug where `define-minor-mode' didn't
Miles Bader <miles@gnu.org>
parents: 31882
diff changeset
814 (defconst byte-compile-last-logged-file nil)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
815
11323
5f75d3e225c1 (byte-compile-log-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 11253
diff changeset
816 ;; Log a message STRING in *Compile-Log*.
5f75d3e225c1 (byte-compile-log-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 11253
diff changeset
817 ;; Also log the current function and file if not already done.
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
818 (defun byte-compile-log-1 (string &optional fill)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
819 (cond (noninteractive
32763
5436a18ec371 [the following changes fix a bug where `define-minor-mode' didn't
Miles Bader <miles@gnu.org>
parents: 31882
diff changeset
820 (if (or (and byte-compile-current-file
5436a18ec371 [the following changes fix a bug where `define-minor-mode' didn't
Miles Bader <miles@gnu.org>
parents: 31882
diff changeset
821 (not (equal byte-compile-current-file
5436a18ec371 [the following changes fix a bug where `define-minor-mode' didn't
Miles Bader <miles@gnu.org>
parents: 31882
diff changeset
822 byte-compile-last-logged-file)))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
823 (and byte-compile-last-warned-form
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
824 (not (eq byte-compile-current-form
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
825 byte-compile-last-warned-form))))
14412
75222e07921e (byte-compile-log-1): Delete format call inside message.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
826 (message "While compiling %s%s:"
75222e07921e (byte-compile-log-1): Delete format call inside message.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
827 (or byte-compile-current-form "toplevel forms")
75222e07921e (byte-compile-log-1): Delete format call inside message.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
828 (if byte-compile-current-file
75222e07921e (byte-compile-log-1): Delete format call inside message.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
829 (if (stringp byte-compile-current-file)
75222e07921e (byte-compile-log-1): Delete format call inside message.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
830 (concat " in file " byte-compile-current-file)
75222e07921e (byte-compile-log-1): Delete format call inside message.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
831 (concat " in buffer "
75222e07921e (byte-compile-log-1): Delete format call inside message.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
832 (buffer-name byte-compile-current-file)))
75222e07921e (byte-compile-log-1): Delete format call inside message.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
833 "")))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
834 (message " %s" string))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
835 (t
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
836 (save-excursion
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
837 (set-buffer (get-buffer-create "*Compile-Log*"))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
838 (goto-char (point-max))
32763
5436a18ec371 [the following changes fix a bug where `define-minor-mode' didn't
Miles Bader <miles@gnu.org>
parents: 31882
diff changeset
839 (cond ((or (and byte-compile-current-file
5436a18ec371 [the following changes fix a bug where `define-minor-mode' didn't
Miles Bader <miles@gnu.org>
parents: 31882
diff changeset
840 (not (equal byte-compile-current-file
5436a18ec371 [the following changes fix a bug where `define-minor-mode' didn't
Miles Bader <miles@gnu.org>
parents: 31882
diff changeset
841 byte-compile-last-logged-file)))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
842 (and byte-compile-last-warned-form
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
843 (not (eq byte-compile-current-form
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
844 byte-compile-last-warned-form))))
35145
85b1d35e08bd (byte-compile-log-1): In non-batch case, don't mention the file name
Richard M. Stallman <rms@gnu.org>
parents: 33352
diff changeset
845 ;;; This is redundant, since it is given at the start of the file,
85b1d35e08bd (byte-compile-log-1): In non-batch case, don't mention the file name
Richard M. Stallman <rms@gnu.org>
parents: 33352
diff changeset
846 ;;; and the extra clutter gets in the way -- rms.
85b1d35e08bd (byte-compile-log-1): In non-batch case, don't mention the file name
Richard M. Stallman <rms@gnu.org>
parents: 33352
diff changeset
847 ;;; (if (and byte-compile-current-file
85b1d35e08bd (byte-compile-log-1): In non-batch case, don't mention the file name
Richard M. Stallman <rms@gnu.org>
parents: 33352
diff changeset
848 ;;; (not (equal byte-compile-current-file
85b1d35e08bd (byte-compile-log-1): In non-batch case, don't mention the file name
Richard M. Stallman <rms@gnu.org>
parents: 33352
diff changeset
849 ;;; byte-compile-last-logged-file)))
85b1d35e08bd (byte-compile-log-1): In non-batch case, don't mention the file name
Richard M. Stallman <rms@gnu.org>
parents: 33352
diff changeset
850 ;;; (insert "\n\^L\n" (current-time-string) "\n"))
85b1d35e08bd (byte-compile-log-1): In non-batch case, don't mention the file name
Richard M. Stallman <rms@gnu.org>
parents: 33352
diff changeset
851 (insert "\nWhile compiling "
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
852 (if byte-compile-current-form
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
853 (format "%s" byte-compile-current-form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
854 "toplevel forms"))
35145
85b1d35e08bd (byte-compile-log-1): In non-batch case, don't mention the file name
Richard M. Stallman <rms@gnu.org>
parents: 33352
diff changeset
855 ;;; This is redundant, since it is given at the start of the file,
85b1d35e08bd (byte-compile-log-1): In non-batch case, don't mention the file name
Richard M. Stallman <rms@gnu.org>
parents: 33352
diff changeset
856 ;;; and the extra clutter gets in the way -- rms.
85b1d35e08bd (byte-compile-log-1): In non-batch case, don't mention the file name
Richard M. Stallman <rms@gnu.org>
parents: 33352
diff changeset
857 ;;; (if byte-compile-current-file
85b1d35e08bd (byte-compile-log-1): In non-batch case, don't mention the file name
Richard M. Stallman <rms@gnu.org>
parents: 33352
diff changeset
858 ;;; (if (stringp byte-compile-current-file)
85b1d35e08bd (byte-compile-log-1): In non-batch case, don't mention the file name
Richard M. Stallman <rms@gnu.org>
parents: 33352
diff changeset
859 ;;; (insert " in file " byte-compile-current-file)
85b1d35e08bd (byte-compile-log-1): In non-batch case, don't mention the file name
Richard M. Stallman <rms@gnu.org>
parents: 33352
diff changeset
860 ;;; (insert " in buffer "
85b1d35e08bd (byte-compile-log-1): In non-batch case, don't mention the file name
Richard M. Stallman <rms@gnu.org>
parents: 33352
diff changeset
861 ;;; (buffer-name byte-compile-current-file))))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
862 (insert ":\n")))
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
863 (insert " " string "\n")
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
864 (if (and fill (not (string-match "\n" string)))
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
865 (let ((fill-prefix " ")
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
866 (fill-column 78))
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
867 (fill-paragraph nil)))
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
868 )))
32763
5436a18ec371 [the following changes fix a bug where `define-minor-mode' didn't
Miles Bader <miles@gnu.org>
parents: 31882
diff changeset
869 (setq byte-compile-last-logged-file byte-compile-current-file
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
870 byte-compile-last-warned-form byte-compile-current-form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
871
11323
5f75d3e225c1 (byte-compile-log-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 11253
diff changeset
872 ;; Log the start of a file in *Compile-Log*, and mark it as done.
5f75d3e225c1 (byte-compile-log-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 11253
diff changeset
873 ;; But do nothing in batch mode.
5f75d3e225c1 (byte-compile-log-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 11253
diff changeset
874 (defun byte-compile-log-file ()
32763
5436a18ec371 [the following changes fix a bug where `define-minor-mode' didn't
Miles Bader <miles@gnu.org>
parents: 31882
diff changeset
875 (and byte-compile-current-file
5436a18ec371 [the following changes fix a bug where `define-minor-mode' didn't
Miles Bader <miles@gnu.org>
parents: 31882
diff changeset
876 (not (equal byte-compile-current-file byte-compile-last-logged-file))
5436a18ec371 [the following changes fix a bug where `define-minor-mode' didn't
Miles Bader <miles@gnu.org>
parents: 31882
diff changeset
877 (not noninteractive)
11323
5f75d3e225c1 (byte-compile-log-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 11253
diff changeset
878 (save-excursion
5f75d3e225c1 (byte-compile-log-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 11253
diff changeset
879 (set-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
880 (goto-char (point-max))
11323
5f75d3e225c1 (byte-compile-log-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 11253
diff changeset
881 (insert "\n\^L\nCompiling "
5f75d3e225c1 (byte-compile-log-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 11253
diff changeset
882 (if (stringp byte-compile-current-file)
5f75d3e225c1 (byte-compile-log-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 11253
diff changeset
883 (concat "file " byte-compile-current-file)
5f75d3e225c1 (byte-compile-log-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 11253
diff changeset
884 (concat "buffer " (buffer-name byte-compile-current-file)))
5f75d3e225c1 (byte-compile-log-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 11253
diff changeset
885 " at " (current-time-string) "\n")
32763
5436a18ec371 [the following changes fix a bug where `define-minor-mode' didn't
Miles Bader <miles@gnu.org>
parents: 31882
diff changeset
886 (setq byte-compile-last-logged-file byte-compile-current-file))))
11323
5f75d3e225c1 (byte-compile-log-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 11253
diff changeset
887
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
888 (defun byte-compile-warn (format &rest args)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
889 (setq format (apply 'format format args))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
890 (if byte-compile-error-on-warn
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
891 (error "%s" format) ; byte-compile-file catches and logs it
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
892 (byte-compile-log-1 (concat "** " format) t)
819
5bbabfcef929 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 784
diff changeset
893 ;;; It is useless to flash warnings too fast to be read.
5bbabfcef929 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 784
diff changeset
894 ;;; Besides, they will all be shown at the end.
5bbabfcef929 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 784
diff changeset
895 ;;; (or noninteractive ; already written on stdout.
5bbabfcef929 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 784
diff changeset
896 ;;; (message "Warning: %s" format))
5bbabfcef929 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 784
diff changeset
897 ))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
898
922
52cd80cb5be1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 848
diff changeset
899 ;;; This function should be used to report errors that have halted
52cd80cb5be1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 848
diff changeset
900 ;;; compilation of the current file.
52cd80cb5be1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 848
diff changeset
901 (defun byte-compile-report-error (error-info)
1129
6f1d3e86c4fd entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 958
diff changeset
902 (setq byte-compiler-error-flag t)
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
903 (byte-compile-log-1
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
904 (concat "!! "
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
905 (format (if (cdr error-info) "%s (%s)" "%s")
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
906 (get (car error-info) 'error-message)
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
907 (prin1-to-string (cdr error-info))))))
922
52cd80cb5be1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 848
diff changeset
908
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
909 ;;; Used by make-obsolete.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
910 (defun byte-compile-obsolete (form)
29352
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
911 (let* ((new (get (car form) 'byte-obsolete-info))
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
912 (handler (nth 1 new))
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
913 (when (nth 2 new)))
12487
b657158dd5c9 (byte-compile-obsolete): Do the funcall to compile
Richard M. Stallman <rms@gnu.org>
parents: 11928
diff changeset
914 (if (memq 'obsolete byte-compile-warnings)
29352
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
915 (byte-compile-warn "%s is an obsolete function%s; %s" (car form)
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
916 (if when (concat " since " when) "")
10256
83d56dd99a40 (byte-compile-warning-types): Add obsolete.
Richard M. Stallman <rms@gnu.org>
parents: 10235
diff changeset
917 (if (stringp (car new))
83d56dd99a40 (byte-compile-warning-types): Add obsolete.
Richard M. Stallman <rms@gnu.org>
parents: 10235
diff changeset
918 (car new)
29352
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
919 (format "use %s instead." (car new)))))
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
920 (funcall (or handler 'byte-compile-normal-call) form)))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
921
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
922 ;; Compiler options
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
923
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
924 ;; (defvar byte-compiler-valid-options
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
925 ;; '((optimize byte-optimize (t nil source byte) val)
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
926 ;; (file-format byte-compile-compatibility (emacs18 emacs19)
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
927 ;; (eq val 'emacs18))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
928 ;; ;; (new-bytecodes byte-compile-generate-emacs19-bytecodes (t nil) val)
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
929 ;; (delete-errors byte-compile-delete-errors (t nil) val)
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
930 ;; (verbose byte-compile-verbose (t nil) val)
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
931 ;; (warnings byte-compile-warnings ((callargs redefine free-vars unresolved))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
932 ;; val)))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
933
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
934 ;; Inhibit v18/v19 selectors if the version is hardcoded.
28402
843e552813e3 Doc fixes.
Dave Love <fx@gnu.org>
parents: 28336
diff changeset
935 ;; #### This should print a warning if the user tries to change something
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
936 ;; 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
937 ;; (cond
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
938 ;; ((byte-compile-single-version)
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
939 ;; (setcar (cdr (cdr (assq 'new-bytecodes byte-compiler-valid-options)))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
940 ;; (list (byte-compile-version-cond
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
941 ;; byte-compile-generate-emacs19-bytecodes)))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
942 ;; (setcar (cdr (cdr (assq 'file-format byte-compiler-valid-options)))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
943 ;; (if (byte-compile-version-cond byte-compile-compatibility)
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
944 ;; '(emacs18) '(emacs19)))))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
945
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
946 ;; (defun byte-compiler-options-handler (&rest args)
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
947 ;; (let (key val desc choices)
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
948 ;; (while args
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
949 ;; (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
950 ;; (error "Malformed byte-compiler option `%s'" (car args)))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
951 ;; (setq key (car (car args))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
952 ;; val (car (cdr (car args)))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
953 ;; desc (assq key byte-compiler-valid-options))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
954 ;; (or desc
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
955 ;; (error "Unknown byte-compiler option `%s'" key))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
956 ;; (setq choices (nth 2 desc))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
957 ;; (if (consp (car choices))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
958 ;; (let (this
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
959 ;; (handler 'cons)
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
960 ;; (ret (and (memq (car val) '(+ -))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
961 ;; (copy-sequence (if (eq t (symbol-value (nth 1 desc)))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
962 ;; choices
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
963 ;; (symbol-value (nth 1 desc)))))))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
964 ;; (setq choices (car choices))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
965 ;; (while val
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
966 ;; (setq this (car val))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
967 ;; (cond ((memq this choices)
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
968 ;; (setq ret (funcall handler this ret)))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
969 ;; ((eq this '+) (setq handler 'cons))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
970 ;; ((eq this '-) (setq handler 'delq))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
971 ;; ((error "`%s' only accepts %s" key choices)))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
972 ;; (setq val (cdr val)))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
973 ;; (set (nth 1 desc) ret))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
974 ;; (or (memq val choices)
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
975 ;; (error "`%s' must be one of `%s'" key choices))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
976 ;; (set (nth 1 desc) (eval (nth 3 desc))))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
977 ;; (setq args (cdr args)))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
978 ;; nil))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
979
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
980 ;;; sanity-checking arglists
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
981
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
982 (defun byte-compile-fdefinition (name macro-p)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
983 (let* ((list (if macro-p
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
984 byte-compile-macro-environment
8086
9f6348616e4d (byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents: 7298
diff changeset
985 byte-compile-function-environment))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
986 (env (cdr (assq name list))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
987 (or env
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
988 (let ((fn name))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
989 (while (and (symbolp fn)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
990 (fboundp fn)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
991 (or (symbolp (symbol-function fn))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
992 (consp (symbol-function fn))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
993 (and (not macro-p)
1819
df06a60f3362 * disass.el (disassemble): Add autoload cookie for this.
Jim Blandy <jimb@redhat.com>
parents: 1604
diff changeset
994 (byte-code-function-p (symbol-function fn)))))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
995 (setq fn (symbol-function fn)))
1819
df06a60f3362 * disass.el (disassemble): Add autoload cookie for this.
Jim Blandy <jimb@redhat.com>
parents: 1604
diff changeset
996 (if (and (not macro-p) (byte-code-function-p fn))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
997 fn
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
998 (and (consp fn)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
999 (if (eq 'macro (car fn))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1000 (cdr fn)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1001 (if macro-p
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1002 nil
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1003 (if (eq 'autoload (car fn))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1004 nil
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1005 fn)))))))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1006
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1007 (defun byte-compile-arglist-signature (arglist)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1008 (let ((args 0)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1009 opts
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1010 restp)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1011 (while arglist
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1012 (cond ((eq (car arglist) '&optional)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1013 (or opts (setq opts 0)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1014 ((eq (car arglist) '&rest)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1015 (if (cdr arglist)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1016 (setq restp t
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1017 arglist nil)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1018 (t
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1019 (if opts
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1020 (setq opts (1+ opts))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1021 (setq args (1+ args)))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1022 (setq arglist (cdr arglist)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1023 (cons args (if restp nil (if opts (+ args opts) args)))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1024
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1025
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1026 (defun byte-compile-arglist-signatures-congruent-p (old new)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1027 (not (or
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1028 (> (car new) (car old)) ; requires more args now
14040
187735b53d52 Comment fixes.
Karl Heuer <kwzh@gnu.org>
parents: 13791
diff changeset
1029 (and (null (cdr old)) ; took rest-args, doesn't any more
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1030 (cdr new))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1031 (and (cdr new) (cdr old) ; can't take as many args now
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1032 (< (cdr new) (cdr old)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1033 )))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1034
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1035 (defun byte-compile-arglist-signature-string (signature)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1036 (cond ((null (cdr signature))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1037 (format "%d+" (car signature)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1038 ((= (car signature) (cdr signature))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1039 (format "%d" (car signature)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1040 (t (format "%d-%d" (car signature) (cdr signature)))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1041
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1042
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
1043 ;; Warn if the form is calling a function with the wrong number of arguments.
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1044 (defun byte-compile-callargs-warn (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1045 (let* ((def (or (byte-compile-fdefinition (car form) nil)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1046 (byte-compile-fdefinition (car form) t)))
29239
86949998e6fd (byte-compile-callargs-warn): Use subr-arity to check primitives.
Dave Love <fx@gnu.org>
parents: 28441
diff changeset
1047 (sig (if def
86949998e6fd (byte-compile-callargs-warn): Use subr-arity to check primitives.
Dave Love <fx@gnu.org>
parents: 28441
diff changeset
1048 (byte-compile-arglist-signature
86949998e6fd (byte-compile-callargs-warn): Use subr-arity to check primitives.
Dave Love <fx@gnu.org>
parents: 28441
diff changeset
1049 (if (eq 'lambda (car-safe def))
86949998e6fd (byte-compile-callargs-warn): Use subr-arity to check primitives.
Dave Love <fx@gnu.org>
parents: 28441
diff changeset
1050 (nth 1 def)
86949998e6fd (byte-compile-callargs-warn): Use subr-arity to check primitives.
Dave Love <fx@gnu.org>
parents: 28441
diff changeset
1051 (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
1052 (aref def 0)
86949998e6fd (byte-compile-callargs-warn): Use subr-arity to check primitives.
Dave Love <fx@gnu.org>
parents: 28441
diff changeset
1053 '(&rest def))))
86949998e6fd (byte-compile-callargs-warn): Use subr-arity to check primitives.
Dave Love <fx@gnu.org>
parents: 28441
diff changeset
1054 (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
1055 (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
1056 (subr-arity (symbol-function (car form))))))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1057 (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
1058 ;; 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
1059 (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
1060 (not (numberp (cdr sig))))
86949998e6fd (byte-compile-callargs-warn): Use subr-arity to check primitives.
Dave Love <fx@gnu.org>
parents: 28441
diff changeset
1061 (setcdr sig nil))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1062 (if sig
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1063 (if (or (< ncall (car sig))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1064 (and (cdr sig) (> ncall (cdr sig))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1065 (byte-compile-warn
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1066 "%s called with %d argument%s, but %s %s"
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1067 (car form) ncall
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1068 (if (= 1 ncall) "" "s")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1069 (if (< ncall (car sig))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1070 "requires"
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1071 "accepts only")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1072 (byte-compile-arglist-signature-string sig)))
28295
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
1073 (or (and (fboundp (car form)) ; might be a subr or autoload.
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
1074 (not (get (car form) 'byte-compile-noruntime)))
26922
6fdf1f6c23a0 (byte-compile-bound-variables): Doc fix.
Dave Love <fx@gnu.org>
parents: 25636
diff changeset
1075 (eq (car form) byte-compile-current-form) ; ## this doesn't work
6fdf1f6c23a0 (byte-compile-bound-variables): Doc fix.
Dave Love <fx@gnu.org>
parents: 25636
diff changeset
1076 ; with recursion.
6fdf1f6c23a0 (byte-compile-bound-variables): Doc fix.
Dave Love <fx@gnu.org>
parents: 25636
diff changeset
1077 ;; It's a currently-undefined function.
6fdf1f6c23a0 (byte-compile-bound-variables): Doc fix.
Dave Love <fx@gnu.org>
parents: 25636
diff changeset
1078 ;; Remember number of args in call.
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1079 (let ((cons (assq (car form) byte-compile-unresolved-functions))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1080 (n (length (cdr form))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1081 (if cons
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1082 (or (memq n (cdr cons))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1083 (setcdr cons (cons n (cdr cons))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1084 (setq byte-compile-unresolved-functions
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1085 (cons (list (car form) n)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1086 byte-compile-unresolved-functions))))))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1087
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
1088 ;; 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
1089 ;; number of arguments.
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1090 (defun byte-compile-arglist-warn (form macrop)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1091 (let ((old (byte-compile-fdefinition (nth 1 form) macrop)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1092 (if old
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1093 (let ((sig1 (byte-compile-arglist-signature
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1094 (if (eq 'lambda (car-safe old))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1095 (nth 1 old)
10235
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1096 (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
1097 (aref old 0)
9f6348616e4d (byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents: 7298
diff changeset
1098 '(&rest def)))))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1099 (sig2 (byte-compile-arglist-signature (nth 2 form))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1100 (or (byte-compile-arglist-signatures-congruent-p sig1 sig2)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1101 (byte-compile-warn "%s %s used to take %s %s, now takes %s"
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1102 (if (eq (car form) 'defun) "function" "macro")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1103 (nth 1 form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1104 (byte-compile-arglist-signature-string sig1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1105 (if (equal sig1 '(1 . 1)) "argument" "arguments")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1106 (byte-compile-arglist-signature-string sig2))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1107 ;; This is the first definition. See if previous calls are compatible.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1108 (let ((calls (assq (nth 1 form) byte-compile-unresolved-functions))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1109 nums sig min max)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1110 (if calls
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1111 (progn
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1112 (setq sig (byte-compile-arglist-signature (nth 2 form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1113 nums (sort (copy-sequence (cdr calls)) (function <))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1114 min (car nums)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1115 max (car (nreverse nums)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1116 (if (or (< min (car sig))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1117 (and (cdr sig) (> max (cdr sig))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1118 (byte-compile-warn
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1119 "%s being defined to take %s%s, but was previously called with %s"
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1120 (nth 1 form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1121 (byte-compile-arglist-signature-string sig)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1122 (if (equal sig '(1 . 1)) " arg" " args")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1123 (byte-compile-arglist-signature-string (cons min max))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1124
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1125 (setq byte-compile-unresolved-functions
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1126 (delq calls byte-compile-unresolved-functions)))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1127 )))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1128
28295
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
1129 (defun byte-compile-print-syms (str1 strn syms)
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
1130 (cond
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
1131 ((cdr syms)
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
1132 (let* ((str strn)
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
1133 (L (length str))
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
1134 s)
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
1135 (while syms
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
1136 (setq s (symbol-name (pop syms))
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
1137 L (+ L (length s) 2))
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
1138 (if (< L (1- fill-column))
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
1139 (setq str (concat str " " s (and syms ",")))
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
1140 (setq str (concat str "\n " s (and syms ","))
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
1141 L (+ (length s) 4))))
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
1142 (byte-compile-warn "%s" str)))
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
1143 (syms
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
1144 (byte-compile-warn str1 (car syms)))))
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
1145
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
1146 ;; If we have compiled any calls to functions which are not known to be
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
1147 ;; defined, issue a warning enumerating them.
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
1148 ;; `unresolved' in the list `byte-compile-warnings' disables this.
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1149 (defun byte-compile-warn-about-unresolved-functions ()
28295
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
1150 (when (memq 'unresolved byte-compile-warnings)
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
1151 (let ((byte-compile-current-form "the end of the data")
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
1152 (noruntime nil)
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
1153 (unresolved nil))
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
1154 ;; 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
1155 ;; 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
1156 (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
1157 (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
1158 (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
1159 ;; 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
1160 (byte-compile-print-syms
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
1161 "The function `%s' might not be defined at runtime."
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
1162 "The following functions might not be defined at runtime:"
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
1163 noruntime)
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
1164 ;; 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
1165 (byte-compile-print-syms
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
1166 "The function `%s' is not known to be defined."
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
1167 "The following functions are not known to be defined:"
8082575fec24 (byte-compile-warning-types, byte-compile-warnings): New warning `noruntime'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27824
diff changeset
1168 unresolved)))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1169 nil)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1170
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1171
27824
52c0cae80495 Change old backquote syntax.
Dave Love <fx@gnu.org>
parents: 27584
diff changeset
1172 (defsubst byte-compile-const-symbol-p (symbol)
52c0cae80495 Change old backquote syntax.
Dave Love <fx@gnu.org>
parents: 27584
diff changeset
1173 (or (memq symbol '(nil t))
52c0cae80495 Change old backquote syntax.
Dave Love <fx@gnu.org>
parents: 27584
diff changeset
1174 (keywordp symbol)))
52c0cae80495 Change old backquote syntax.
Dave Love <fx@gnu.org>
parents: 27584
diff changeset
1175
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1176 (defmacro byte-compile-constp (form)
28402
843e552813e3 Doc fixes.
Dave Love <fx@gnu.org>
parents: 28336
diff changeset
1177 "Return non-nil if FORM is a constant."
27824
52c0cae80495 Change old backquote syntax.
Dave Love <fx@gnu.org>
parents: 27584
diff changeset
1178 `(cond ((consp ,form) (eq (car ,form) 'quote))
52c0cae80495 Change old backquote syntax.
Dave Love <fx@gnu.org>
parents: 27584
diff changeset
1179 ((not (symbolp ,form)))
52c0cae80495 Change old backquote syntax.
Dave Love <fx@gnu.org>
parents: 27584
diff changeset
1180 ((byte-compile-const-symbol-p ,form))))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1181
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1182 (defmacro byte-compile-close-variables (&rest body)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1183 (cons 'let
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1184 (cons '(;;
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1185 ;; Close over these variables to encapsulate the
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1186 ;; compilation state
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1187 ;;
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1188 (byte-compile-macro-environment
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1189 ;; Copy it because the compiler may patch into the
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1190 ;; macroenvironment.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1191 (copy-alist byte-compile-initial-macro-environment))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1192 (byte-compile-function-environment nil)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1193 (byte-compile-bound-variables nil)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1194 (byte-compile-free-references nil)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1195 (byte-compile-free-assignments nil)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1196 ;;
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1197 ;; Close over these variables so that `byte-compiler-options'
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1198 ;; can change them on a per-file basis.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1199 ;;
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1200 (byte-compile-verbose byte-compile-verbose)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1201 (byte-optimize byte-optimize)
10235
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1202 (byte-compile-compatibility byte-compile-compatibility)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1203 (byte-compile-dynamic byte-compile-dynamic)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1204 (byte-compile-dynamic-docstrings
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1205 byte-compile-dynamic-docstrings)
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
1206 ;; (byte-compile-generate-emacs19-bytecodes
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
1207 ;; byte-compile-generate-emacs19-bytecodes)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1208 (byte-compile-warnings (if (eq byte-compile-warnings t)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1209 byte-compile-warning-types
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1210 byte-compile-warnings))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1211 )
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1212 body)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1213
11323
5f75d3e225c1 (byte-compile-log-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 11253
diff changeset
1214 (defvar byte-compile-warnings-point-max nil)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1215 (defmacro displaying-byte-compile-warnings (&rest body)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1216 (list 'let
11323
5f75d3e225c1 (byte-compile-log-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 11253
diff changeset
1217 '((byte-compile-warnings-point-max byte-compile-warnings-point-max))
5f75d3e225c1 (byte-compile-log-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 11253
diff changeset
1218 ;; Log the file name.
5f75d3e225c1 (byte-compile-log-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 11253
diff changeset
1219 '(byte-compile-log-file)
5f75d3e225c1 (byte-compile-log-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 11253
diff changeset
1220 ;; Record how much is logged now.
5f75d3e225c1 (byte-compile-log-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 11253
diff changeset
1221 ;; We will display the log buffer if anything more is logged
5f75d3e225c1 (byte-compile-log-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 11253
diff changeset
1222 ;; before the end of BODY.
5f75d3e225c1 (byte-compile-log-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 11253
diff changeset
1223 '(or byte-compile-warnings-point-max
5f75d3e225c1 (byte-compile-log-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 11253
diff changeset
1224 (save-excursion
5f75d3e225c1 (byte-compile-log-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 11253
diff changeset
1225 (set-buffer (get-buffer-create "*Compile-Log*"))
5f75d3e225c1 (byte-compile-log-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 11253
diff changeset
1226 (setq byte-compile-warnings-point-max (point-max))))
922
52cd80cb5be1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 848
diff changeset
1227 (list 'unwind-protect
52cd80cb5be1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 848
diff changeset
1228 (list 'condition-case 'error-info
52cd80cb5be1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 848
diff changeset
1229 (cons 'progn body)
52cd80cb5be1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 848
diff changeset
1230 '(error
52cd80cb5be1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 848
diff changeset
1231 (byte-compile-report-error error-info)))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1232 '(save-excursion
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1233 ;; If there were compilation warnings, display them.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1234 (set-buffer "*Compile-Log*")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1235 (if (= byte-compile-warnings-point-max (point-max))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1236 nil
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1237 (select-window
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1238 (prog1 (selected-window)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1239 (select-window (display-buffer (current-buffer)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1240 (goto-char byte-compile-warnings-point-max)
20779
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
1241 (beginning-of-line)
eb1c101c6732 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 19981
diff changeset
1242 (forward-line -1)
19981
1d135b4edfcb (displaying-byte-compile-warnings): Show
Karl Heuer <kwzh@gnu.org>
parents: 19637
diff changeset
1243 (recenter 0))))))))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1244
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1245
819
5bbabfcef929 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 784
diff changeset
1246 ;;;###autoload
13338
0f082123d484 (byte-recompile-directory): New arg FORCE.
Richard M. Stallman <rms@gnu.org>
parents: 13138
diff changeset
1247 (defun byte-force-recompile (directory)
0f082123d484 (byte-recompile-directory): New arg FORCE.
Richard M. Stallman <rms@gnu.org>
parents: 13138
diff changeset
1248 "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
1249 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
1250 (interactive "DByte force recompile (directory): ")
13338
0f082123d484 (byte-recompile-directory): New arg FORCE.
Richard M. Stallman <rms@gnu.org>
parents: 13138
diff changeset
1251 (byte-recompile-directory directory nil t))
0f082123d484 (byte-recompile-directory): New arg FORCE.
Richard M. Stallman <rms@gnu.org>
parents: 13138
diff changeset
1252
0f082123d484 (byte-recompile-directory): New arg FORCE.
Richard M. Stallman <rms@gnu.org>
parents: 13138
diff changeset
1253 ;;;###autoload
0f082123d484 (byte-recompile-directory): New arg FORCE.
Richard M. Stallman <rms@gnu.org>
parents: 13138
diff changeset
1254 (defun byte-recompile-directory (directory &optional arg force)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1255 "Recompile every `.el' file in DIRECTORY that needs recompilation.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1256 This is if a `.elc' file exists but is older than the `.el' file.
4316
667b32d2c02c (byte-recompile-directory): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 4129
diff changeset
1257 Files in subdirectories of DIRECTORY are processed also.
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1258
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1259 If the `.elc' file does not exist, normally the `.el' file is *not* compiled.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1260 But a prefix argument (optional second arg) means ask user,
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
1261 for each such `.el' file, whether to compile it. Prefix argument 0 means
4316
667b32d2c02c (byte-recompile-directory): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 4129
diff changeset
1262 don't ask and compile the file anyway.
667b32d2c02c (byte-recompile-directory): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 4129
diff changeset
1263
13338
0f082123d484 (byte-recompile-directory): New arg FORCE.
Richard M. Stallman <rms@gnu.org>
parents: 13138
diff changeset
1264 A nonzero prefix argument also means ask about each subdirectory.
0f082123d484 (byte-recompile-directory): New arg FORCE.
Richard M. Stallman <rms@gnu.org>
parents: 13138
diff changeset
1265
0f082123d484 (byte-recompile-directory): New arg FORCE.
Richard M. Stallman <rms@gnu.org>
parents: 13138
diff changeset
1266 If the third argument FORCE is non-nil,
0f082123d484 (byte-recompile-directory): New arg FORCE.
Richard M. Stallman <rms@gnu.org>
parents: 13138
diff changeset
1267 recompile every `.el' file that already has a `.elc' file."
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1268 (interactive "DByte recompile directory: \nP")
2735
6489c9da34b9 (byte-recompile-directory): If ARG is non-nil, set it to its prefix
Roland McGrath <roland@gnu.org>
parents: 2626
diff changeset
1269 (if arg
6489c9da34b9 (byte-recompile-directory): If ARG is non-nil, set it to its prefix
Roland McGrath <roland@gnu.org>
parents: 2626
diff changeset
1270 (setq arg (prefix-numeric-value arg)))
3653
974055b516d9 * bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents: 3591
diff changeset
1271 (if noninteractive
974055b516d9 * bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents: 3591
diff changeset
1272 nil
974055b516d9 * bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents: 3591
diff changeset
1273 (save-some-buffers)
11590
97a90e900ce7 (byte-recompile-directory): Use force-mode-line-update.
Karl Heuer <kwzh@gnu.org>
parents: 11432
diff changeset
1274 (force-mode-line-update))
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
1275 (let ((directories (list (expand-file-name directory)))
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
1276 (file-count 0)
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
1277 (dir-count 0)
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
1278 last-dir)
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
1279 (displaying-byte-compile-warnings
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
1280 (while directories
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
1281 (setq directory (car directories))
23486
427877c8fe78 (byte-recompile-directory):
Richard M. Stallman <rms@gnu.org>
parents: 23342
diff changeset
1282 (message "Checking %s..." directory)
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
1283 (let ((files (directory-files directory))
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
1284 source dest)
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
1285 (while files
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
1286 (setq source (expand-file-name (car files) directory))
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
1287 (if (and (not (member (car files) '("." ".." "RCS" "CVS")))
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
1288 (file-directory-p source)
f48e54cb9b01 (byte-compile-dest-file): If FILENAME is not recognized, append .elc to it.
Richard M. Stallman <rms@gnu.org>
parents: 4556
diff changeset
1289 (not (file-symlink-p source)))
13338
0f082123d484 (byte-recompile-directory): New arg FORCE.
Richard M. Stallman <rms@gnu.org>
parents: 13138
diff changeset
1290 ;; This file is a subdirectory. Handle them differently.
23486
427877c8fe78 (byte-recompile-directory):
Richard M. Stallman <rms@gnu.org>
parents: 23342
diff changeset
1291 (when (or (null arg)
427877c8fe78 (byte-recompile-directory):
Richard M. Stallman <rms@gnu.org>
parents: 23342
diff changeset
1292 (eq 0 arg)
427877c8fe78 (byte-recompile-directory):
Richard M. Stallman <rms@gnu.org>
parents: 23342
diff changeset
1293 (y-or-n-p (concat "Check " source "? ")))
427877c8fe78 (byte-recompile-directory):
Richard M. Stallman <rms@gnu.org>
parents: 23342
diff changeset
1294 (setq directories
427877c8fe78 (byte-recompile-directory):
Richard M. Stallman <rms@gnu.org>
parents: 23342
diff changeset
1295 (nconc directories (list source))))
13338
0f082123d484 (byte-recompile-directory): New arg FORCE.
Richard M. Stallman <rms@gnu.org>
parents: 13138
diff changeset
1296 ;; It is an ordinary file. Decide whether to compile it.
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
1297 (if (and (string-match emacs-lisp-file-regexp source)
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
1298 (not (auto-save-file-name-p source))
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
1299 (setq dest (byte-compile-dest-file source))
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
1300 (if (file-exists-p dest)
13338
0f082123d484 (byte-recompile-directory): New arg FORCE.
Richard M. Stallman <rms@gnu.org>
parents: 13138
diff changeset
1301 ;; File was already compiled.
0f082123d484 (byte-recompile-directory): New arg FORCE.
Richard M. Stallman <rms@gnu.org>
parents: 13138
diff changeset
1302 (or force (file-newer-than-file-p source dest))
0f082123d484 (byte-recompile-directory): New arg FORCE.
Richard M. Stallman <rms@gnu.org>
parents: 13138
diff changeset
1303 ;; No compiled file exists yet.
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
1304 (and arg
2735
6489c9da34b9 (byte-recompile-directory): If ARG is non-nil, set it to its prefix
Roland McGrath <roland@gnu.org>
parents: 2626
diff changeset
1305 (or (eq 0 arg)
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
1306 (y-or-n-p (concat "Compile " source "? "))))))
3653
974055b516d9 * bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents: 3591
diff changeset
1307 (progn (if (and noninteractive (not byte-compile-verbose))
974055b516d9 * bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents: 3591
diff changeset
1308 (message "Compiling %s..." source))
974055b516d9 * bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents: 3591
diff changeset
1309 (byte-compile-file source)
4411
cde0e3c3b642 (byte-recompile-directory): At end of compiling a file,
Richard M. Stallman <rms@gnu.org>
parents: 4316
diff changeset
1310 (or noninteractive
cde0e3c3b642 (byte-recompile-directory): At end of compiling a file,
Richard M. Stallman <rms@gnu.org>
parents: 4316
diff changeset
1311 (message "Checking %s..." directory))
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
1312 (setq file-count (1+ file-count))
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
1313 (if (not (eq last-dir directory))
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
1314 (setq last-dir directory
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
1315 dir-count (1+ dir-count)))
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
1316 )))
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
1317 (setq files (cdr files))))
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
1318 (setq directories (cdr directories))))
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
1319 (message "Done (Total of %d file%s compiled%s)"
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
1320 file-count (if (= file-count 1) "" "s")
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
1321 (if (> dir-count 1) (format " in %d directories" dir-count) ""))))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1322
819
5bbabfcef929 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 784
diff changeset
1323 ;;;###autoload
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1324 (defun byte-compile-file (filename &optional load)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1325 "Compile a file of Lisp code named FILENAME into a file of byte code.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1326 The output file's name is made by appending `c' to the end of FILENAME.
18391
1ff0bfd40508 (byte-compile-file): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 18266
diff changeset
1327 With prefix arg (noninteractively: 2nd arg), load the file after compiling.
1ff0bfd40508 (byte-compile-file): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 18266
diff changeset
1328 The value is t if there were no errors, nil if errors."
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1329 ;; (interactive "fByte compile file: \nP")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1330 (interactive
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1331 (let ((file buffer-file-name)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1332 (file-name nil)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1333 (file-dir nil))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1334 (and file
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1335 (eq (cdr (assq 'major-mode (buffer-local-variables)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1336 'emacs-lisp-mode)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1337 (setq file-name (file-name-nondirectory file)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1338 file-dir (file-name-directory file)))
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
1339 (list (read-file-name (if current-prefix-arg
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
1340 "Byte compile and load file: "
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
1341 "Byte compile file: ")
3718
37a8a7489fc5 (byte-compile-file): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 3653
diff changeset
1342 file-dir file-name nil)
819
5bbabfcef929 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 784
diff changeset
1343 current-prefix-arg)))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1344 ;; Expand now so we get the current buffer's defaults
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1345 (setq filename (expand-file-name filename))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1346
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1347 ;; If we're compiling a file that's in a buffer and is modified, offer
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1348 ;; to save it first.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1349 (or noninteractive
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1350 (let ((b (get-file-buffer (expand-file-name filename))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1351 (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
1352 (y-or-n-p (format "Save buffer %s first? " (buffer-name b))))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1353 (save-excursion (set-buffer b) (save-buffer)))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1354
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1355 (if byte-compile-verbose
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1356 (message "Compiling %s..." filename))
6554
5f8effa94d20 (byte-compile-file): Use whole file name for errors.
Richard M. Stallman <rms@gnu.org>
parents: 6293
diff changeset
1357 (let ((byte-compile-current-file filename)
32765
f11890c9f7df (byte-compile-file): Bind `byte-compile-last-logged-file' to nil.
Miles Bader <miles@gnu.org>
parents: 32763
diff changeset
1358 (byte-compile-last-logged-file nil)
22689
2d69ba7d76f4 (byte-compile-file): Bind set-auto-coding-for-load to t.
Richard M. Stallman <rms@gnu.org>
parents: 22578
diff changeset
1359 (set-auto-coding-for-load t)
10235
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1360 target-file input-buffer output-buffer
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1361 byte-compile-dest-file)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1362 (setq target-file (byte-compile-dest-file filename))
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1363 (setq byte-compile-dest-file target-file)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1364 (save-excursion
1129
6f1d3e86c4fd entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 958
diff changeset
1365 (setq input-buffer (get-buffer-create " *Compiler Input*"))
6f1d3e86c4fd entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 958
diff changeset
1366 (set-buffer input-buffer)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1367 (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
1368 (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
1369 ;; 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
1370 ;; 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
1371 (set-buffer-multibyte t)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1372 (insert-file-contents filename)
24576
d11ae896247c (byte-compile-file): Clear buffer-file-coding-system. If the coding
Richard M. Stallman <rms@gnu.org>
parents: 24025
diff changeset
1373 ;; Mimic the way after-insert-file-set-buffer-file-coding-system
d11ae896247c (byte-compile-file): Clear buffer-file-coding-system. If the coding
Richard M. Stallman <rms@gnu.org>
parents: 24025
diff changeset
1374 ;; can make the buffer unibyte when visiting this file.
d11ae896247c (byte-compile-file): Clear buffer-file-coding-system. If the coding
Richard M. Stallman <rms@gnu.org>
parents: 24025
diff changeset
1375 (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
1376 (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
1377 ;; 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
1378 ;; 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
1379 (set-buffer-multibyte nil))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1380 ;; Run hooks including the uncompression hook.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1381 ;; If they change the file name, then change it for the output also.
10235
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1382 (let ((buffer-file-name filename)
10836
3c9b3505feef (byte-compile-file): Bind default-major-mode to avoid randomness.
Richard M. Stallman <rms@gnu.org>
parents: 10696
diff changeset
1383 (default-major-mode 'emacs-lisp-mode)
10235
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1384 (enable-local-eval nil))
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1385 (normal-mode)
16788
ffb387a3d054 (byte-compile-file): Set default-directory in compiler input buffer.
Richard M. Stallman <rms@gnu.org>
parents: 16666
diff changeset
1386 (setq filename buffer-file-name))
ffb387a3d054 (byte-compile-file): Set default-directory in compiler input buffer.
Richard M. Stallman <rms@gnu.org>
parents: 16666
diff changeset
1387 ;; Set the default directory, in case an eval-when-compile uses it.
ffb387a3d054 (byte-compile-file): Set default-directory in compiler input buffer.
Richard M. Stallman <rms@gnu.org>
parents: 16666
diff changeset
1388 (setq default-directory (file-name-directory filename)))
1129
6f1d3e86c4fd entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 958
diff changeset
1389 (setq byte-compiler-error-flag nil)
6f1d3e86c4fd entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 958
diff changeset
1390 ;; It is important that input-buffer not be current at this call,
6f1d3e86c4fd entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 958
diff changeset
1391 ;; so that the value of point set in input-buffer
6f1d3e86c4fd entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 958
diff changeset
1392 ;; within byte-compile-from-buffer lingers in that buffer.
6193
74fcc9007c39 (byte-compile-insert-header): Take a filename argument.
Richard M. Stallman <rms@gnu.org>
parents: 6081
diff changeset
1393 (setq output-buffer (byte-compile-from-buffer input-buffer filename))
2855
b858b91dff34 (byte-compile-file): Don't write output if error.
Richard M. Stallman <rms@gnu.org>
parents: 2853
diff changeset
1394 (if byte-compiler-error-flag
b858b91dff34 (byte-compile-file): Don't write output if error.
Richard M. Stallman <rms@gnu.org>
parents: 2853
diff changeset
1395 nil
10696
5cf8a7a41664 (byte-compile-file): Add "done" message.
Karl Heuer <kwzh@gnu.org>
parents: 10687
diff changeset
1396 (if byte-compile-verbose
5cf8a7a41664 (byte-compile-file): Add "done" message.
Karl Heuer <kwzh@gnu.org>
parents: 10687
diff changeset
1397 (message "Compiling %s...done" filename))
2855
b858b91dff34 (byte-compile-file): Don't write output if error.
Richard M. Stallman <rms@gnu.org>
parents: 2853
diff changeset
1398 (kill-buffer input-buffer)
b858b91dff34 (byte-compile-file): Don't write output if error.
Richard M. Stallman <rms@gnu.org>
parents: 2853
diff changeset
1399 (save-excursion
b858b91dff34 (byte-compile-file): Don't write output if error.
Richard M. Stallman <rms@gnu.org>
parents: 2853
diff changeset
1400 (set-buffer output-buffer)
b858b91dff34 (byte-compile-file): Don't write output if error.
Richard M. Stallman <rms@gnu.org>
parents: 2853
diff changeset
1401 (goto-char (point-max))
b858b91dff34 (byte-compile-file): Don't write output if error.
Richard M. Stallman <rms@gnu.org>
parents: 2853
diff changeset
1402 (insert "\n") ; aaah, unix.
b858b91dff34 (byte-compile-file): Don't write output if error.
Richard M. Stallman <rms@gnu.org>
parents: 2853
diff changeset
1403 (let ((vms-stmlf-recfm t))
b858b91dff34 (byte-compile-file): Don't write output if error.
Richard M. Stallman <rms@gnu.org>
parents: 2853
diff changeset
1404 (if (file-writable-p target-file)
17002
07144e5d208a (byte-compile-file): Write a compiled file without
Karl Heuer <kwzh@gnu.org>
parents: 16788
diff changeset
1405 ;; We must disable any code conversion here.
17077
8f8c3d05b158 (byte-compile-file): Bind coding-system-for-write
Kenichi Handa <handa@m17n.org>
parents: 17002
diff changeset
1406 (let ((coding-system-for-write 'no-conversion))
9781
ae6fed248fb9 (byte-compile-file): Treat windows-nt like ms-dos.
Richard M. Stallman <rms@gnu.org>
parents: 9414
diff changeset
1407 (if (or (eq system-type 'ms-dos) (eq system-type 'windows-nt))
5454
751ea2cff517 [ms-dos] (byte-compile-file): Save as binary.
Richard M. Stallman <rms@gnu.org>
parents: 5431
diff changeset
1408 (setq buffer-file-type t))
2855
b858b91dff34 (byte-compile-file): Don't write output if error.
Richard M. Stallman <rms@gnu.org>
parents: 2853
diff changeset
1409 (write-region 1 (point-max) target-file))
b858b91dff34 (byte-compile-file): Don't write output if error.
Richard M. Stallman <rms@gnu.org>
parents: 2853
diff changeset
1410 ;; This is just to give a better error message than
b858b91dff34 (byte-compile-file): Don't write output if error.
Richard M. Stallman <rms@gnu.org>
parents: 2853
diff changeset
1411 ;; write-region
b858b91dff34 (byte-compile-file): Don't write output if error.
Richard M. Stallman <rms@gnu.org>
parents: 2853
diff changeset
1412 (signal 'file-error
b858b91dff34 (byte-compile-file): Don't write output if error.
Richard M. Stallman <rms@gnu.org>
parents: 2853
diff changeset
1413 (list "Opening output file"
b858b91dff34 (byte-compile-file): Don't write output if error.
Richard M. Stallman <rms@gnu.org>
parents: 2853
diff changeset
1414 (if (file-exists-p target-file)
b858b91dff34 (byte-compile-file): Don't write output if error.
Richard M. Stallman <rms@gnu.org>
parents: 2853
diff changeset
1415 "cannot overwrite file"
b858b91dff34 (byte-compile-file): Don't write output if error.
Richard M. Stallman <rms@gnu.org>
parents: 2853
diff changeset
1416 "directory not writable or nonexistent")
10235
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1417 target-file))))
2855
b858b91dff34 (byte-compile-file): Don't write output if error.
Richard M. Stallman <rms@gnu.org>
parents: 2853
diff changeset
1418 (kill-buffer (current-buffer)))
b858b91dff34 (byte-compile-file): Don't write output if error.
Richard M. Stallman <rms@gnu.org>
parents: 2853
diff changeset
1419 (if (and byte-compile-generate-call-tree
b858b91dff34 (byte-compile-file): Don't write output if error.
Richard M. Stallman <rms@gnu.org>
parents: 2853
diff changeset
1420 (or (eq t byte-compile-generate-call-tree)
b858b91dff34 (byte-compile-file): Don't write output if error.
Richard M. Stallman <rms@gnu.org>
parents: 2853
diff changeset
1421 (y-or-n-p (format "Report call tree for %s? " filename))))
b858b91dff34 (byte-compile-file): Don't write output if error.
Richard M. Stallman <rms@gnu.org>
parents: 2853
diff changeset
1422 (save-excursion
b858b91dff34 (byte-compile-file): Don't write output if error.
Richard M. Stallman <rms@gnu.org>
parents: 2853
diff changeset
1423 (display-call-tree filename)))
b858b91dff34 (byte-compile-file): Don't write output if error.
Richard M. Stallman <rms@gnu.org>
parents: 2853
diff changeset
1424 (if load
6043
1b850ad30158 (byte-compile-file): Return nil on failure.
Karl Heuer <kwzh@gnu.org>
parents: 5562
diff changeset
1425 (load target-file))
1b850ad30158 (byte-compile-file): Return nil on failure.
Karl Heuer <kwzh@gnu.org>
parents: 5562
diff changeset
1426 t)))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1427
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
1428 ;;(defun byte-compile-and-load-file (&optional filename)
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
1429 ;; "Compile a file of Lisp code named FILENAME into a file of byte code,
28402
843e552813e3 Doc fixes.
Dave Love <fx@gnu.org>
parents: 28336
diff changeset
1430 ;;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
1431 ;;the end of FILENAME."
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
1432 ;; (interactive)
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
1433 ;; (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
1434 ;; (byte-compile-file filename t)
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
1435 ;; (let ((current-prefix-arg '(4)))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
1436 ;; (call-interactively 'byte-compile-file))))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1437
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
1438 ;;(defun byte-compile-buffer (&optional buffer)
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
1439 ;; "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
1440 ;; (interactive "bByte compile buffer: ")
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
1441 ;; (setq buffer (if buffer (get-buffer buffer) (current-buffer)))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
1442 ;; (message "Compiling %s..." (buffer-name buffer))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
1443 ;; (let* ((filename (or (buffer-file-name buffer)
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
1444 ;; (concat "#<buffer " (buffer-name buffer) ">")))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
1445 ;; (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
1446 ;; (byte-compile-from-buffer buffer nil))
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
1447 ;; (message "Compiling %s...done" (buffer-name buffer))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
1448 ;; t)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1449
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1450 ;;; compiling a single function
819
5bbabfcef929 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 784
diff changeset
1451 ;;;###autoload
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
1452 (defun compile-defun (&optional arg)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1453 "Compile and evaluate the current top-level form.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1454 Print the result in the minibuffer.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1455 With argument, insert value in current buffer after the form."
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1456 (interactive "P")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1457 (save-excursion
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1458 (end-of-defun)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1459 (beginning-of-defun)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1460 (let* ((byte-compile-current-file nil)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1461 (byte-compile-last-warned-form 'nothing)
819
5bbabfcef929 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 784
diff changeset
1462 (value (eval (displaying-byte-compile-warnings
5bbabfcef929 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 784
diff changeset
1463 (byte-compile-sexp (read (current-buffer)))))))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1464 (cond (arg
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1465 (message "Compiling from buffer... done.")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1466 (prin1 value (current-buffer))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1467 (insert "\n"))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1468 ((message "%s" (prin1-to-string value)))))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1469
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1470
6193
74fcc9007c39 (byte-compile-insert-header): Take a filename argument.
Richard M. Stallman <rms@gnu.org>
parents: 6081
diff changeset
1471 (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
1472 ;; 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
1473 (let (outbuffer
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1474 ;; 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
1475 (float-output-format nil)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1476 (case-fold-search nil)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1477 (print-length nil)
13138
2a0ef3a2ccc3 (byte-compile-from-buffer): Bind print-level.
Richard M. Stallman <rms@gnu.org>
parents: 12928
diff changeset
1478 (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
1479 ;; 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
1480 ;; and put the output into a file.
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
1481 (edebug-all-defs nil)
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
1482 (edebug-all-forms nil)
10235
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1483 ;; Simulate entry to byte-compile-top-level
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1484 (byte-compile-constants nil)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1485 (byte-compile-variables nil)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1486 (byte-compile-tag-number 0)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1487 (byte-compile-depth 0)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1488 (byte-compile-maxdepth 0)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1489 (byte-compile-output nil)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1490 ;; #### This is bound in b-c-close-variables.
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1491 ;; (byte-compile-warnings (if (eq byte-compile-warnings t)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1492 ;; byte-compile-warning-types
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1493 ;; byte-compile-warnings))
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1494 )
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1495 (byte-compile-close-variables
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1496 (save-excursion
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1497 (setq outbuffer
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1498 (set-buffer (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
1499 (set-buffer-multibyte t)
10235
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1500 (erase-buffer)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1501 ;; (emacs-lisp-mode)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1502 (setq case-fold-search nil)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1503 ;; 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
1504 ;; write files containing binary information specially.
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1505 ;; 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
1506 ;; 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
1507 ;; 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
1508 ;; need to be written carefully.
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1509 (setq overwrite-mode 'overwrite-mode-binary))
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1510 (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
1511 (and filename (byte-compile-insert-header filename inbuffer outbuffer))
10235
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1512 (save-excursion
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1513 (set-buffer inbuffer)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1514 (goto-char 1)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1515
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1516 ;; Compile the forms from the input buffer.
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1517 (while (progn
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1518 (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
1519 (looking-at ";"))
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1520 (forward-line 1))
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1521 (not (eobp)))
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1522 (byte-compile-file-form (read inbuffer)))
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1523
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1524 ;; Compile pending forms at end of file.
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1525 (byte-compile-flush-pending)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1526 (byte-compile-warn-about-unresolved-functions)
14040
187735b53d52 Comment fixes.
Karl Heuer <kwzh@gnu.org>
parents: 13791
diff changeset
1527 ;; Should we always do this? When calling multiple files, it
10235
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1528 ;; would be useful to delay this warning until all have
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1529 ;; been compiled.
22136
bc8c7f59c064 (byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents: 22050
diff changeset
1530 (setq byte-compile-unresolved-functions nil))
bc8c7f59c064 (byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents: 22050
diff changeset
1531 ;; 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
1532 ;; 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
1533 (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
1534 outbuffer))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1535
22136
bc8c7f59c064 (byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents: 22050
diff changeset
1536 (defun byte-compile-fix-header (filename inbuffer outbuffer)
bc8c7f59c064 (byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents: 22050
diff changeset
1537 (save-excursion
bc8c7f59c064 (byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents: 22050
diff changeset
1538 (set-buffer outbuffer)
bc8c7f59c064 (byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents: 22050
diff changeset
1539 ;; 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
1540 (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
1541 (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
1542 (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
1543 (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
1544 ;; 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
1545 (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
1546 (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
1547 (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
1548 ;; 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
1549 (search-forward ";;;;;;;;;;")
bc8c7f59c064 (byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents: 22050
diff changeset
1550 (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
1551
bc8c7f59c064 (byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents: 22050
diff changeset
1552 (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
1553 (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
1554 delta)
bc8c7f59c064 (byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents: 22050
diff changeset
1555 (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
1556 (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
1557 (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
1558 (point)))
bc8c7f59c064 (byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents: 22050
diff changeset
1559 (insert ";;; This file contains multibyte non-ASCII characters\n"
bc8c7f59c064 (byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents: 22050
diff changeset
1560 ";;; and therefore cannot be loaded into Emacs 19.\n")
bc8c7f59c064 (byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents: 22050
diff changeset
1561 ;; Replace "19" or "19.29" with "20", twice.
bc8c7f59c064 (byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents: 22050
diff changeset
1562 (re-search-forward "19\\(\\.[0-9]+\\)")
bc8c7f59c064 (byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents: 22050
diff changeset
1563 (replace-match "20")
bc8c7f59c064 (byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents: 22050
diff changeset
1564 (re-search-forward "19\\(\\.[0-9]+\\)")
bc8c7f59c064 (byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents: 22050
diff changeset
1565 (replace-match "20")
bc8c7f59c064 (byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents: 22050
diff changeset
1566 ;; 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
1567 ;; 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
1568 (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
1569 (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
1570 (widen)
bc8c7f59c064 (byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents: 22050
diff changeset
1571 (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
1572
12823
c1fcd8660aba (byte-compile-insert-header): Use 19.29, not 19.28.90
Richard M. Stallman <rms@gnu.org>
parents: 12794
diff changeset
1573 (defun byte-compile-insert-header (filename inbuffer outbuffer)
c1fcd8660aba (byte-compile-insert-header): Use 19.29, not 19.28.90
Richard M. Stallman <rms@gnu.org>
parents: 12794
diff changeset
1574 (set-buffer inbuffer)
15925
278440a92757 (byte-compile-insert-header): Clean up syntax
Richard M. Stallman <rms@gnu.org>
parents: 14766
diff changeset
1575 (let ((dynamic-docstrings byte-compile-dynamic-docstrings)
22136
bc8c7f59c064 (byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents: 22050
diff changeset
1576 (dynamic byte-compile-dynamic))
12823
c1fcd8660aba (byte-compile-insert-header): Use 19.29, not 19.28.90
Richard M. Stallman <rms@gnu.org>
parents: 12794
diff changeset
1577 (set-buffer outbuffer)
c1fcd8660aba (byte-compile-insert-header): Use 19.29, not 19.28.90
Richard M. Stallman <rms@gnu.org>
parents: 12794
diff changeset
1578 (goto-char 1)
22047
678a1ed22116 (byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 22015
diff changeset
1579 ;; The magic number of .elc files is ";ELC", or 0x3B454C43. After
678a1ed22116 (byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 22015
diff changeset
1580 ;; that is the file-format version number (18, 19 or 20) as a
678a1ed22116 (byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 22015
diff changeset
1581 ;; byte, followed by some nulls. The primary motivation for doing
678a1ed22116 (byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 22015
diff changeset
1582 ;; this is to get some binary characters up in the first line of
678a1ed22116 (byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 22015
diff changeset
1583 ;; the file so that `diff' will simply say "Binary files differ"
678a1ed22116 (byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 22015
diff changeset
1584 ;; instead of actually doing a diff of two .elc files. An extra
678a1ed22116 (byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 22015
diff changeset
1585 ;; benefit is that you can add this to /etc/magic:
678a1ed22116 (byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 22015
diff changeset
1586
12823
c1fcd8660aba (byte-compile-insert-header): Use 19.29, not 19.28.90
Richard M. Stallman <rms@gnu.org>
parents: 12794
diff changeset
1587 ;; 0 string ;ELC GNU Emacs Lisp compiled file,
c1fcd8660aba (byte-compile-insert-header): Use 19.29, not 19.28.90
Richard M. Stallman <rms@gnu.org>
parents: 12794
diff changeset
1588 ;; >4 byte x version %d
22047
678a1ed22116 (byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 22015
diff changeset
1589
12823
c1fcd8660aba (byte-compile-insert-header): Use 19.29, not 19.28.90
Richard M. Stallman <rms@gnu.org>
parents: 12794
diff changeset
1590 (insert
c1fcd8660aba (byte-compile-insert-header): Use 19.29, not 19.28.90
Richard M. Stallman <rms@gnu.org>
parents: 12794
diff changeset
1591 ";ELC"
22047
678a1ed22116 (byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 22015
diff changeset
1592 (if (byte-compile-version-cond byte-compile-compatibility) 18 20)
12823
c1fcd8660aba (byte-compile-insert-header): Use 19.29, not 19.28.90
Richard M. Stallman <rms@gnu.org>
parents: 12794
diff changeset
1593 "\000\000\000\n"
c1fcd8660aba (byte-compile-insert-header): Use 19.29, not 19.28.90
Richard M. Stallman <rms@gnu.org>
parents: 12794
diff changeset
1594 )
15925
278440a92757 (byte-compile-insert-header): Clean up syntax
Richard M. Stallman <rms@gnu.org>
parents: 14766
diff changeset
1595 (insert ";;; Compiled by "
12823
c1fcd8660aba (byte-compile-insert-header): Use 19.29, not 19.28.90
Richard M. Stallman <rms@gnu.org>
parents: 12794
diff changeset
1596 (or (and (boundp 'user-mail-address) user-mail-address)
c1fcd8660aba (byte-compile-insert-header): Use 19.29, not 19.28.90
Richard M. Stallman <rms@gnu.org>
parents: 12794
diff changeset
1597 (concat (user-login-name) "@" (system-name)))
c1fcd8660aba (byte-compile-insert-header): Use 19.29, not 19.28.90
Richard M. Stallman <rms@gnu.org>
parents: 12794
diff changeset
1598 " on "
c1fcd8660aba (byte-compile-insert-header): Use 19.29, not 19.28.90
Richard M. Stallman <rms@gnu.org>
parents: 12794
diff changeset
1599 (current-time-string) "\n;;; from file " filename "\n")
15925
278440a92757 (byte-compile-insert-header): Clean up syntax
Richard M. Stallman <rms@gnu.org>
parents: 14766
diff changeset
1600 (insert ";;; in Emacs version " emacs-version "\n")
15927
9b6ae5c1a0bf (byte-compile-insert-header):
Richard M. Stallman <rms@gnu.org>
parents: 15926
diff changeset
1601 (insert ";;; with bytecomp version "
15930
811f16bdff08 (byte-compile-insert-header): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 15927
diff changeset
1602 (progn (string-match "[0-9.]+" byte-compile-version)
811f16bdff08 (byte-compile-insert-header): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 15927
diff changeset
1603 (match-string 0 byte-compile-version))
15927
9b6ae5c1a0bf (byte-compile-insert-header):
Richard M. Stallman <rms@gnu.org>
parents: 15926
diff changeset
1604 "\n;;; "
12823
c1fcd8660aba (byte-compile-insert-header): Use 19.29, not 19.28.90
Richard M. Stallman <rms@gnu.org>
parents: 12794
diff changeset
1605 (cond
15925
278440a92757 (byte-compile-insert-header): Clean up syntax
Richard M. Stallman <rms@gnu.org>
parents: 14766
diff changeset
1606 ((eq byte-optimize 'source) "with source-level optimization only")
278440a92757 (byte-compile-insert-header): Clean up syntax
Richard M. Stallman <rms@gnu.org>
parents: 14766
diff changeset
1607 ((eq byte-optimize 'byte) "with byte-level optimization only")
278440a92757 (byte-compile-insert-header): Clean up syntax
Richard M. Stallman <rms@gnu.org>
parents: 14766
diff changeset
1608 (byte-optimize "with all optimizations")
278440a92757 (byte-compile-insert-header): Clean up syntax
Richard M. Stallman <rms@gnu.org>
parents: 14766
diff changeset
1609 (t "without optimization"))
12823
c1fcd8660aba (byte-compile-insert-header): Use 19.29, not 19.28.90
Richard M. Stallman <rms@gnu.org>
parents: 12794
diff changeset
1610 (if (byte-compile-version-cond byte-compile-compatibility)
c1fcd8660aba (byte-compile-insert-header): Use 19.29, not 19.28.90
Richard M. Stallman <rms@gnu.org>
parents: 12794
diff changeset
1611 "; compiled with Emacs 18 compatibility.\n"
c1fcd8660aba (byte-compile-insert-header): Use 19.29, not 19.28.90
Richard M. Stallman <rms@gnu.org>
parents: 12794
diff changeset
1612 ".\n"))
15925
278440a92757 (byte-compile-insert-header): Clean up syntax
Richard M. Stallman <rms@gnu.org>
parents: 14766
diff changeset
1613 (if dynamic
278440a92757 (byte-compile-insert-header): Clean up syntax
Richard M. Stallman <rms@gnu.org>
parents: 14766
diff changeset
1614 (insert ";;; Function definitions are lazy-loaded.\n"))
22136
bc8c7f59c064 (byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents: 22050
diff changeset
1615 (if (not (byte-compile-version-cond byte-compile-compatibility))
22047
678a1ed22116 (byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 22015
diff changeset
1616 (let (intro-string minimum-version)
678a1ed22116 (byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 22015
diff changeset
1617 ;; Figure out which Emacs version to require,
678a1ed22116 (byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 22015
diff changeset
1618 ;; and what comment to use to explain why.
22136
bc8c7f59c064 (byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents: 22050
diff changeset
1619 ;; Note that this fails to take account of whether
bc8c7f59c064 (byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents: 22050
diff changeset
1620 ;; the buffer contains multibyte characters. We may have to
bc8c7f59c064 (byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents: 22050
diff changeset
1621 ;; compensate at the end in 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
1622 (if dynamic-docstrings
22047
678a1ed22116 (byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 22015
diff changeset
1623 (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
1624 ";;; 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
1625 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
1626 (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
1627 ";;; 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
1628 minimum-version "19"))
22047
678a1ed22116 (byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 22015
diff changeset
1629 ;; Now insert the comment and the error check.
678a1ed22116 (byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 22015
diff changeset
1630 (insert
22136
bc8c7f59c064 (byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents: 22050
diff changeset
1631 "\n"
22047
678a1ed22116 (byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 22015
diff changeset
1632 intro-string
678a1ed22116 (byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 22015
diff changeset
1633 ;; 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
1634 ;; 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
1635 "(if (and (boundp 'emacs-version)\n"
22047
678a1ed22116 (byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 22015
diff changeset
1636 ;; 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
1637 ;; don't try to check the version number.
678a1ed22116 (byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 22015
diff changeset
1638 "\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
1639 "\t (or (and (boundp 'epoch::version) epoch::version)\n"
678a1ed22116 (byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 22015
diff changeset
1640 (format "\t (string-lessp emacs-version \"%s\")))\n"
678a1ed22116 (byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 22015
diff changeset
1641 minimum-version)
678a1ed22116 (byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 22015
diff changeset
1642 " (error \"`"
678a1ed22116 (byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 22015
diff changeset
1643 ;; prin1-to-string is used to quote backslashes.
678a1ed22116 (byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 22015
diff changeset
1644 (substring (prin1-to-string (file-name-nondirectory filename))
678a1ed22116 (byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 22015
diff changeset
1645 1 -1)
678a1ed22116 (byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 22015
diff changeset
1646 (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
1647 minimum-version)
bc8c7f59c064 (byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents: 22050
diff changeset
1648 ;; 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
1649 ;; 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
1650 ;; constant for the actual compiled code.
bc8c7f59c064 (byte-compile-insert-header): Do not look for multibyte characters here.
Richard M. Stallman <rms@gnu.org>
parents: 22050
diff changeset
1651 ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n\n"))
22047
678a1ed22116 (byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 22015
diff changeset
1652 ;; 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
1653 (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
1654 (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
1655 (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
1656 (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
1657 (insert "(or (boundp 'current-load-list) (setq current-load-list nil))\n"
22047
678a1ed22116 (byte-compile-from-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 22015
diff changeset
1658 "\n"))))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1659
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1660 (defun byte-compile-output-file-form (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1661 ;; 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
1662 ;; 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
1663 ;; 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
1664 ;; 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
1665 ;; 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
1666 ;; it here.
19637
baaf02a51ba2 (byte-compile-output-file-form): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents: 18960
diff changeset
1667 (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
1668 custom-declare-variable))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1669 (stringp (nth 3 form)))
10235
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1670 (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
1671 (memq (car form)
baaf02a51ba2 (byte-compile-output-file-form): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents: 18960
diff changeset
1672 '(autoload custom-declare-variable)))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1673 (let ((print-escape-newlines t)
12552
176c42cc7eeb (byte-compile-output-file-form): Bind print-length
Karl Heuer <kwzh@gnu.org>
parents: 12511
diff changeset
1674 (print-length nil)
176c42cc7eeb (byte-compile-output-file-form): Bind print-length
Karl Heuer <kwzh@gnu.org>
parents: 12511
diff changeset
1675 (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
1676 (print-quoted t)
d4b674c08fe1 (byte-compile-output-file-form): Bind print-quoted and print-gensym to t
Erik Naggum <erik@naggum.no>
parents: 16149
diff changeset
1677 (print-gensym t))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1678 (princ "\n" outbuffer)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1679 (prin1 form outbuffer)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1680 nil)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1681
10235
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1682 (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
1683 "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
1684 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
1685 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
1686 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
1687 of the function bytecode string. In that case,
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1688 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
1689 together, for lazy loading.
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1690 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
1691 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
1692 `autoload' and `custom-declare-variable' need that."
12794
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1693 ;; We need to examine byte-compile-dynamic-docstrings
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1694 ;; 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
1695 (let ((dynamic-docstrings byte-compile-dynamic-docstrings))
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1696 (set-buffer
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1697 (prog1 (current-buffer)
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1698 (set-buffer outbuffer)
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1699 (let (position)
10235
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1700
12794
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1701 ;; Insert the doc string, and make it a comment with #@LENGTH.
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1702 (and (>= (nth 1 info) 0)
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1703 dynamic-docstrings
13791
1feec098c24d (byte-compile-output-docform): Don't do dynamic doc
Karl Heuer <kwzh@gnu.org>
parents: 13474
diff changeset
1704 (not byte-compile-compatibility)
12794
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1705 (progn
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1706 ;; Make the doc string start at beginning of line
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1707 ;; for make-docfile's sake.
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1708 (insert "\n")
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1709 (setq position
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1710 (byte-compile-output-as-comment
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1711 (nth (nth 1 info) form) nil))
22015
3ace0ce90a3f (byte-compile-output-docform): Use position-bytes.
Richard M. Stallman <rms@gnu.org>
parents: 21725
diff changeset
1712 (setq position (position-bytes position))
12794
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1713 ;; If the doc string starts with * (a user variable),
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1714 ;; negate POSITION.
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1715 (if (and (stringp (nth (nth 1 info) form))
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1716 (> (length (nth (nth 1 info) form)) 0)
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1717 (eq (aref (nth (nth 1 info) form) 0) ?*))
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1718 (setq position (- position)))))
10235
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1719
12794
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1720 (if preface
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1721 (progn
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1722 (insert preface)
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1723 (prin1 name outbuffer)))
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1724 (insert (car info))
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1725 (let ((print-escape-newlines t)
16159
d4b674c08fe1 (byte-compile-output-file-form): Bind print-quoted and print-gensym to t
Erik Naggum <erik@naggum.no>
parents: 16149
diff changeset
1726 (print-quoted t)
25636
ebc88533212e (byte-compile-output-docform): Bind print-gensym-alist for compatibility,
Richard M. Stallman <rms@gnu.org>
parents: 25635
diff changeset
1727 ;; For compatibility with code before print-circle,
ebc88533212e (byte-compile-output-docform): Bind print-gensym-alist for compatibility,
Richard M. Stallman <rms@gnu.org>
parents: 25635
diff changeset
1728 ;; use a cons cell to say that we want
ebc88533212e (byte-compile-output-docform): Bind print-gensym-alist for compatibility,
Richard M. Stallman <rms@gnu.org>
parents: 25635
diff changeset
1729 ;; print-gensym-alist not to be cleared
ebc88533212e (byte-compile-output-docform): Bind print-gensym-alist for compatibility,
Richard M. Stallman <rms@gnu.org>
parents: 25635
diff changeset
1730 ;; between calls to print functions.
ebc88533212e (byte-compile-output-docform): Bind print-gensym-alist for compatibility,
Richard M. Stallman <rms@gnu.org>
parents: 25635
diff changeset
1731 (print-gensym '(t))
ebc88533212e (byte-compile-output-docform): Bind print-gensym-alist for compatibility,
Richard M. Stallman <rms@gnu.org>
parents: 25635
diff changeset
1732 ;; print-gensym-alist was used before print-circle existed.
ebc88533212e (byte-compile-output-docform): Bind print-gensym-alist for compatibility,
Richard M. Stallman <rms@gnu.org>
parents: 25635
diff changeset
1733 print-gensym-alist
25635
f39d91949fc4 (byte-compile-output-docform): Bind print-continuous-numbering and
Richard M. Stallman <rms@gnu.org>
parents: 24576
diff changeset
1734 (print-continuous-numbering t)
f39d91949fc4 (byte-compile-output-docform): Bind print-continuous-numbering and
Richard M. Stallman <rms@gnu.org>
parents: 24576
diff changeset
1735 print-number-table
12794
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1736 (index 0))
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1737 (prin1 (car form) outbuffer)
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1738 (while (setq form (cdr form))
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1739 (setq index (1+ index))
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1740 (insert " ")
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1741 (cond ((and (numberp specindex) (= index specindex))
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1742 (let ((position
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1743 (byte-compile-output-as-comment
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1744 (cons (car form) (nth 1 form))
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1745 t)))
22015
3ace0ce90a3f (byte-compile-output-docform): Use position-bytes.
Richard M. Stallman <rms@gnu.org>
parents: 21725
diff changeset
1746 (setq position (position-bytes position))
12794
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1747 (princ (format "(#$ . %d) nil" position) outbuffer)
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1748 (setq form (cdr form))
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1749 (setq index (1+ index))))
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1750 ((= index (nth 1 info))
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1751 (if position
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1752 (princ (format (if quoted "'(#$ . %d)" "(#$ . %d)")
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1753 position)
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1754 outbuffer)
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1755 (let ((print-escape-newlines nil))
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1756 (goto-char (prog1 (1+ (point))
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1757 (prin1 (car form) outbuffer)))
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1758 (insert "\\\n")
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1759 (goto-char (point-max)))))
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1760 (t
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1761 (prin1 (car form) outbuffer)))))
913a19cf074a (byte-compile-output-docform): Check
Richard M. Stallman <rms@gnu.org>
parents: 12726
diff changeset
1762 (insert (nth 2 info))))))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1763 nil)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1764
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1765 (defun byte-compile-keep-pending (form &optional handler)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1766 (if (memq byte-optimize '(t source))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1767 (setq form (byte-optimize-form form t)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1768 (if handler
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1769 (let ((for-effect t))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1770 ;; To avoid consing up monstrously large forms at load time, we split
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1771 ;; the output regularly.
3954
cac16b165691 (byte-compile-keep-pending): Handle fset like defalias.
Richard M. Stallman <rms@gnu.org>
parents: 3948
diff changeset
1772 (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
1773 (nthcdr 300 byte-compile-output)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1774 (byte-compile-flush-pending))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1775 (funcall handler form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1776 (if for-effect
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1777 (byte-compile-discard)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1778 (byte-compile-form form t))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1779 nil)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1780
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1781 (defun byte-compile-flush-pending ()
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1782 (if byte-compile-output
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1783 (let ((form (byte-compile-out-toplevel t 'file)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1784 (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
1785 (mapc 'byte-compile-output-file-form (cdr form)))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1786 (form
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1787 (byte-compile-output-file-form form)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1788 (setq byte-compile-constants nil
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1789 byte-compile-variables nil
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1790 byte-compile-depth 0
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1791 byte-compile-maxdepth 0
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1792 byte-compile-output nil))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1793
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1794 (defun byte-compile-file-form (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1795 (let ((byte-compile-current-form nil) ; close over this for warnings.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1796 handler)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1797 (cond
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1798 ((not (consp form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1799 (byte-compile-keep-pending form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1800 ((and (symbolp (car form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1801 (setq handler (get (car form) 'byte-hunk-handler)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1802 (cond ((setq form (funcall handler form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1803 (byte-compile-flush-pending)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1804 (byte-compile-output-file-form form))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1805 ((eq form (setq form (macroexpand form byte-compile-macro-environment)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1806 (byte-compile-keep-pending form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1807 (t
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1808 (byte-compile-file-form form)))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1809
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1810 ;; Functions and variables with doc strings must be output separately,
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1811 ;; so make-docfile can recognise them. Most other things can be output
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1812 ;; as byte-code.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1813
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1814 (put 'defsubst 'byte-hunk-handler 'byte-compile-file-form-defsubst)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1815 (defun byte-compile-file-form-defsubst (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1816 (cond ((assq (nth 1 form) byte-compile-unresolved-functions)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1817 (setq byte-compile-current-form (nth 1 form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1818 (byte-compile-warn "defsubst %s was used before it was defined"
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1819 (nth 1 form))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1820 (byte-compile-file-form
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1821 (macroexpand form byte-compile-macro-environment))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1822 ;; Return nil so the form is not output twice.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1823 nil)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1824
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1825 (put 'autoload 'byte-hunk-handler 'byte-compile-file-form-autoload)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1826 (defun byte-compile-file-form-autoload (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1827 (and (let ((form form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1828 (while (if (setq form (cdr form)) (byte-compile-constp (car form))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1829 (null form)) ;Constants only
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1830 (eval (nth 5 form)) ;Macro
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1831 (eval form)) ;Define the autoload.
28402
843e552813e3 Doc fixes.
Dave Love <fx@gnu.org>
parents: 28336
diff changeset
1832 ;; 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
1833 (if (and (consp (nth 1 form))
28402
843e552813e3 Doc fixes.
Dave Love <fx@gnu.org>
parents: 28336
diff changeset
1834 (eq (car (nth 1 form)) 'quote)
843e552813e3 Doc fixes.
Dave Love <fx@gnu.org>
parents: 28336
diff changeset
1835 (consp (cdr (nth 1 form)))
843e552813e3 Doc fixes.
Dave Love <fx@gnu.org>
parents: 28336
diff changeset
1836 (symbolp (nth 1 (nth 1 form))))
843e552813e3 Doc fixes.
Dave Love <fx@gnu.org>
parents: 28336
diff changeset
1837 (add-to-list 'byte-compile-function-environment
843e552813e3 Doc fixes.
Dave Love <fx@gnu.org>
parents: 28336
diff changeset
1838 (cons (nth 1 (nth 1 form))
37909
3d650ae7e609 (byte-compile-file-form-autoload): Use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35145
diff changeset
1839 (cons 'autoload (cdr (cdr form))))))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1840 (if (stringp (nth 3 form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1841 form
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1842 ;; No doc string, so we can compile this as a normal form.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1843 (byte-compile-keep-pending form 'byte-compile-normal-call)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1844
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1845 (put 'defvar 'byte-hunk-handler 'byte-compile-file-form-defvar)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1846 (put 'defconst 'byte-hunk-handler 'byte-compile-file-form-defvar)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1847 (defun byte-compile-file-form-defvar (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1848 (if (null (nth 3 form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1849 ;; Since there is no doc string, we can compile this as a normal form,
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1850 ;; and not do a file-boundary.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1851 (byte-compile-keep-pending form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1852 (if (memq 'free-vars byte-compile-warnings)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1853 (setq byte-compile-bound-variables
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1854 (cons (nth 1 form) byte-compile-bound-variables)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1855 (cond ((consp (nth 2 form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1856 (setq form (copy-sequence form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1857 (setcar (cdr (cdr form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1858 (byte-compile-top-level (nth 2 form) nil 'file))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1859 form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1860
17704
00ed998f90d3 (byte-compile-file-form-custom-declare-variable): New function.
Richard M. Stallman <rms@gnu.org>
parents: 17077
diff changeset
1861 (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
1862 '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
1863 (defun byte-compile-file-form-custom-declare-variable (form)
00ed998f90d3 (byte-compile-file-form-custom-declare-variable): New function.
Richard M. Stallman <rms@gnu.org>
parents: 17077
diff changeset
1864 (if (memq 'free-vars byte-compile-warnings)
00ed998f90d3 (byte-compile-file-form-custom-declare-variable): New function.
Richard M. Stallman <rms@gnu.org>
parents: 17077
diff changeset
1865 (setq byte-compile-bound-variables
00ed998f90d3 (byte-compile-file-form-custom-declare-variable): New function.
Richard M. Stallman <rms@gnu.org>
parents: 17077
diff changeset
1866 (cons (nth 1 (nth 1 form)) byte-compile-bound-variables)))
00ed998f90d3 (byte-compile-file-form-custom-declare-variable): New function.
Richard M. Stallman <rms@gnu.org>
parents: 17077
diff changeset
1867 form)
00ed998f90d3 (byte-compile-file-form-custom-declare-variable): New function.
Richard M. Stallman <rms@gnu.org>
parents: 17077
diff changeset
1868
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1869 (put 'require 'byte-hunk-handler 'byte-compile-file-form-eval-boundary)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1870 (defun byte-compile-file-form-eval-boundary (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1871 (eval form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1872 (byte-compile-keep-pending form 'byte-compile-normal-call))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1873
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1874 (put 'progn 'byte-hunk-handler 'byte-compile-file-form-progn)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1875 (put 'prog1 'byte-hunk-handler 'byte-compile-file-form-progn)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1876 (put 'prog2 'byte-hunk-handler 'byte-compile-file-form-progn)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1877 (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
1878 (mapc 'byte-compile-file-form (cdr form))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1879 ;; Return nil so the forms are not output twice.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1880 nil)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1881
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1882 ;; This handler is not necessary, but it makes the output from dont-compile
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1883 ;; and similar macros cleaner.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1884 (put 'eval 'byte-hunk-handler 'byte-compile-file-form-eval)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1885 (defun byte-compile-file-form-eval (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1886 (if (eq (car-safe (nth 1 form)) 'quote)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1887 (nth 1 (nth 1 form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1888 (byte-compile-keep-pending form)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1889
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1890 (put 'defun 'byte-hunk-handler 'byte-compile-file-form-defun)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1891 (defun byte-compile-file-form-defun (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1892 (byte-compile-file-form-defmumble form nil))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1893
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1894 (put 'defmacro 'byte-hunk-handler 'byte-compile-file-form-defmacro)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1895 (defun byte-compile-file-form-defmacro (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1896 (byte-compile-file-form-defmumble form t))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1897
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1898 (defun byte-compile-file-form-defmumble (form macrop)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1899 (let* ((name (car (cdr form)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1900 (this-kind (if macrop 'byte-compile-macro-environment
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1901 'byte-compile-function-environment))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1902 (that-kind (if macrop 'byte-compile-function-environment
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1903 'byte-compile-macro-environment))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1904 (this-one (assq name (symbol-value this-kind)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1905 (that-one (assq name (symbol-value that-kind)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1906 (byte-compile-free-references nil)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1907 (byte-compile-free-assignments nil))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1908
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1909 ;; When a function or macro is defined, add it to the call tree so that
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1910 ;; we can tell when functions are not used.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1911 (if byte-compile-generate-call-tree
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1912 (or (assq name byte-compile-call-tree)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1913 (setq byte-compile-call-tree
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1914 (cons (list name nil nil) byte-compile-call-tree))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1915
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1916 (setq byte-compile-current-form name) ; for warnings
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1917 (if (memq 'redefine byte-compile-warnings)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1918 (byte-compile-arglist-warn form macrop))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1919 (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
1920 (message "Compiling %s... (%s)" (or filename "") (nth 1 form)))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1921 (cond (that-one
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1922 (if (and (memq 'redefine byte-compile-warnings)
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
1923 ;; don't warn when compiling the stubs in byte-run...
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1924 (not (assq (nth 1 form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1925 byte-compile-initial-macro-environment)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1926 (byte-compile-warn
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1927 "%s defined multiple times, as both function and macro"
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1928 (nth 1 form)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1929 (setcdr that-one nil))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1930 (this-one
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1931 (if (and (memq 'redefine byte-compile-warnings)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1932 ;; hack: don't warn when compiling the magic internal
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
1933 ;; byte-compiler macros in byte-run.el...
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1934 (not (assq (nth 1 form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1935 byte-compile-initial-macro-environment)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1936 (byte-compile-warn "%s %s defined multiple times in this file"
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1937 (if macrop "macro" "function")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1938 (nth 1 form))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1939 ((and (fboundp name)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1940 (eq (car-safe (symbol-function name))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1941 (if macrop 'lambda 'macro)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1942 (if (memq 'redefine byte-compile-warnings)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1943 (byte-compile-warn "%s %s being redefined as a %s"
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1944 (if macrop "function" "macro")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1945 (nth 1 form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1946 (if macrop "macro" "function")))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1947 ;; shadow existing definition
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1948 (set this-kind
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1949 (cons (cons name nil) (symbol-value this-kind))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1950 )
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1951 (let ((body (nthcdr 3 form)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1952 (if (and (stringp (car body))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1953 (symbolp (car-safe (cdr-safe body)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1954 (car-safe (cdr-safe body))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1955 (stringp (car-safe (cdr-safe (cdr-safe body)))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1956 (byte-compile-warn "Probable `\"' without `\\' in doc string of %s"
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1957 (nth 1 form))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1958 (let* ((new-one (byte-compile-lambda (cons 'lambda (nthcdr 2 form))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1959 (code (byte-compile-byte-code-maker new-one)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1960 (if this-one
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1961 (setcdr this-one new-one)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1962 (set this-kind
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1963 (cons (cons name new-one) (symbol-value this-kind))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1964 (if (and (stringp (nth 3 form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1965 (eq 'quote (car-safe code))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1966 (eq 'lambda (car-safe (nth 1 code))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1967 (cons (car form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1968 (cons name (cdr (nth 1 code))))
10235
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1969 (byte-compile-flush-pending)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1970 (if (not (stringp (nth 3 form)))
10235
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1971 ;; 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
1972 ;; 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
1973 (byte-compile-output-docform
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1974 (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
1975 "\n(fset '" "\n(defalias '")
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1976 name
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1977 (cond ((atom code)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1978 (if macrop '(" '(macro . #[" -1 "])") '(" #[" -1 "]")))
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1979 ((eq (car code) 'quote)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1980 (setq code new-one)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1981 (if macrop '(" '(macro " -1 ")") '(" '(" -1 ")")))
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1982 ((if macrop '(" (cons 'macro (" -1 "))") '(" (" -1 ")"))))
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1983 (append code nil)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1984 (and (atom code) byte-compile-dynamic
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1985 1)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1986 nil)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1987 ;; 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
1988 ;; b-c-output-file-form analyze the defalias.
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1989 (byte-compile-output-docform
10235
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1990 (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
1991 "\n(fset '" "\n(defalias '")
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1992 name
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1993 (cond ((atom code)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1994 (if macrop '(" '(macro . #[" 4 "])") '(" #[" 4 "]")))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1995 ((eq (car code) 'quote)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1996 (setq code new-one)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1997 (if macrop '(" '(macro " 2 ")") '(" '(" 2 ")")))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1998 ((if macrop '(" (cons 'macro (" 5 "))") '(" (" 5 ")"))))
10235
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
1999 (append code nil)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2000 (and (atom code) byte-compile-dynamic
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2001 1)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2002 nil))
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2003 (princ ")" outbuffer)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2004 nil))))
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2005
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2006 ;; 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
2007 ;; 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
2008 ;; 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
2009 (defun byte-compile-output-as-comment (exp quoted)
23135
99ab9c46504a (byte-compile-output-as-comment):
Kenichi Handa <handa@m17n.org>
parents: 23054
diff changeset
2010 (let ((position (point)))
10235
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2011 (set-buffer
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2012 (prog1 (current-buffer)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2013 (set-buffer outbuffer)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2014
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2015 ;; Insert EXP, and make it a comment with #@LENGTH.
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2016 (insert " ")
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2017 (if quoted
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2018 (prin1 exp outbuffer)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2019 (princ exp outbuffer))
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2020 (goto-char position)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2021 ;; Quote certain special characters as needed.
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2022 ;; get_doc_string in doc.c does the unquoting.
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2023 (while (search-forward "\^A" nil t)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2024 (replace-match "\^A\^A" t t))
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2025 (goto-char position)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2026 (while (search-forward "\000" nil t)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2027 (replace-match "\^A0" t t))
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2028 (goto-char position)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2029 (while (search-forward "\037" nil t)
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2030 (replace-match "\^A_" t t))
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2031 (goto-char (point-max))
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2032 (insert "\037")
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2033 (goto-char position)
23135
99ab9c46504a (byte-compile-output-as-comment):
Kenichi Handa <handa@m17n.org>
parents: 23054
diff changeset
2034 (insert "#@" (format "%d" (- (position-bytes (point-max))
99ab9c46504a (byte-compile-output-as-comment):
Kenichi Handa <handa@m17n.org>
parents: 23054
diff changeset
2035 (position-bytes position))))
10235
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2036
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2037 ;; Save the file position of the object.
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2038 ;; Note we should add 1 to skip the space
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2039 ;; that we inserted before the actual doc string,
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2040 ;; and subtract 1 to convert from an 1-origin Emacs position
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2041 ;; to a file position; they cancel.
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2042 (setq position (point))
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2043 (goto-char (point-max))))
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2044 position))
ff7189e5e459 (byte-compile-dest-file): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9802
diff changeset
2045
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2046
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2047
819
5bbabfcef929 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 784
diff changeset
2048 ;;;###autoload
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2049 (defun byte-compile (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2050 "If FORM is a symbol, byte-compile its function definition.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2051 If FORM is a lambda or a macro, byte-compile it as a function."
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2052 (displaying-byte-compile-warnings
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2053 (byte-compile-close-variables
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2054 (let* ((fun (if (symbolp form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2055 (and (fboundp form) (symbol-function form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2056 form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2057 (macro (eq (car-safe fun) 'macro)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2058 (if macro
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2059 (setq fun (cdr fun)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2060 (cond ((eq (car-safe fun) 'lambda)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2061 (setq fun (if macro
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2062 (cons 'macro (byte-compile-lambda fun))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2063 (byte-compile-lambda fun)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2064 (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
2065 (defalias form fun)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2066 fun)))))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2067
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2068 (defun byte-compile-sexp (sexp)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2069 "Compile and return SEXP."
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2070 (displaying-byte-compile-warnings
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2071 (byte-compile-close-variables
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2072 (byte-compile-top-level sexp))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2073
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2074 ;; Given a function made by byte-compile-lambda, make a form which produces it.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2075 (defun byte-compile-byte-code-maker (fun)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2076 (cond
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
2077 ((byte-compile-version-cond byte-compile-compatibility)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2078 ;; Return (quote (lambda ...)).
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2079 (list 'quote (byte-compile-byte-code-unmake fun)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2080 ;; ## atom is faster than compiled-func-p.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2081 ((atom fun) ; compiled function.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2082 ;; generate-emacs19-bytecodes must be on, otherwise byte-compile-lambda
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2083 ;; would have produced a lambda.
16149
eb953f4baf7b (byte-compile-out-toplevel): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 15972
diff changeset
2084 fun)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2085 ;; 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
2086 ;; function, or this is Emacs 18, or generate-emacs19-bytecodes is off.
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2087 ((let (tmp)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2088 (if (and (setq tmp (assq 'byte-code (cdr-safe (cdr fun))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2089 (null (cdr (memq tmp fun))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2090 ;; Generate a make-byte-code call.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2091 (let* ((interactive (assq 'interactive (cdr (cdr fun)))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2092 (nconc (list 'make-byte-code
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2093 (list 'quote (nth 1 fun)) ;arglist
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2094 (nth 1 tmp) ;bytes
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2095 (nth 2 tmp) ;consts
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2096 (nth 3 tmp)) ;depth
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2097 (cond ((stringp (nth 2 fun))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2098 (list (nth 2 fun))) ;doc
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2099 (interactive
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2100 (list nil)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2101 (cond (interactive
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2102 (list (if (or (null (nth 1 interactive))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2103 (stringp (nth 1 interactive)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2104 (nth 1 interactive)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2105 ;; Interactive spec is a list or a variable
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2106 ;; (if it is correct).
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2107 (list 'quote (nth 1 interactive))))))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2108 ;; a non-compiled function (probably trivial)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2109 (list 'quote fun))))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2110
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2111 ;; Turn a function into an ordinary lambda. Needed for v18 files.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2112 (defun byte-compile-byte-code-unmake (function)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2113 (if (consp function)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2114 function;;It already is a lambda.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2115 (setq function (append function nil)) ; turn it into a list
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2116 (nconc (list 'lambda (nth 0 function))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2117 (and (nth 4 function) (list (nth 4 function)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2118 (if (nthcdr 5 function)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2119 (list (cons 'interactive (if (nth 5 function)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2120 (nthcdr 5 function)))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2121 (list (list 'byte-code
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2122 (nth 1 function) (nth 2 function)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2123 (nth 3 function))))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2124
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2125
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2126 ;; Byte-compile a lambda-expression and return a valid function.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2127 ;; The value is usually a compiled function but may be the original
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2128 ;; lambda-expression.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2129 (defun byte-compile-lambda (fun)
26922
6fdf1f6c23a0 (byte-compile-bound-variables): Doc fix.
Dave Love <fx@gnu.org>
parents: 25636
diff changeset
2130 (unless (eq 'lambda (car-safe fun))
6fdf1f6c23a0 (byte-compile-bound-variables): Doc fix.
Dave Love <fx@gnu.org>
parents: 25636
diff changeset
2131 (error "Not a lambda list: %S" fun))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2132 (let* ((arglist (nth 1 fun))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2133 (byte-compile-bound-variables
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2134 (nconc (and (memq 'free-vars byte-compile-warnings)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2135 (delq '&rest (delq '&optional (copy-sequence arglist))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2136 byte-compile-bound-variables))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2137 (body (cdr (cdr fun)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2138 (doc (if (stringp (car body))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2139 (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
2140 ;; 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
2141 ;; 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
2142 (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
2143 (setq body (cdr body))))))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2144 (int (assq 'interactive body)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2145 (cond (int
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2146 ;; Skip (interactive) if it is in front (the most usual location).
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2147 (if (eq int (car body))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2148 (setq body (cdr body)))
1532
50af75dfa70a (byte-compile-lambda):
Richard M. Stallman <rms@gnu.org>
parents: 1129
diff changeset
2149 (cond ((consp (cdr int))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2150 (if (cdr (cdr int))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2151 (byte-compile-warn "malformed interactive spec: %s"
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2152 (prin1-to-string int)))
1532
50af75dfa70a (byte-compile-lambda):
Richard M. Stallman <rms@gnu.org>
parents: 1129
diff changeset
2153 ;; If the interactive spec is a call to `list',
50af75dfa70a (byte-compile-lambda):
Richard M. Stallman <rms@gnu.org>
parents: 1129
diff changeset
2154 ;; don't compile it, because `call-interactively'
50af75dfa70a (byte-compile-lambda):
Richard M. Stallman <rms@gnu.org>
parents: 1129
diff changeset
2155 ;; looks at the args of `list'.
13474
3e7f6fdc234d (byte-compile-associative): Do operations left to right.
Richard M. Stallman <rms@gnu.org>
parents: 13403
diff changeset
2156 (let ((form (nth 1 int)))
3e7f6fdc234d (byte-compile-associative): Do operations left to right.
Richard M. Stallman <rms@gnu.org>
parents: 13403
diff changeset
2157 (while (or (eq (car-safe form) 'let)
3e7f6fdc234d (byte-compile-associative): Do operations left to right.
Richard M. Stallman <rms@gnu.org>
parents: 13403
diff changeset
2158 (eq (car-safe form) 'let*)
3e7f6fdc234d (byte-compile-associative): Do operations left to right.
Richard M. Stallman <rms@gnu.org>
parents: 13403
diff changeset
2159 (eq (car-safe form) 'save-excursion))
3e7f6fdc234d (byte-compile-associative): Do operations left to right.
Richard M. Stallman <rms@gnu.org>
parents: 13403
diff changeset
2160 (while (consp (cdr form))
3e7f6fdc234d (byte-compile-associative): Do operations left to right.
Richard M. Stallman <rms@gnu.org>
parents: 13403
diff changeset
2161 (setq form (cdr form)))
3e7f6fdc234d (byte-compile-associative): Do operations left to right.
Richard M. Stallman <rms@gnu.org>
parents: 13403
diff changeset
2162 (setq form (car form)))
3e7f6fdc234d (byte-compile-associative): Do operations left to right.
Richard M. Stallman <rms@gnu.org>
parents: 13403
diff changeset
2163 (or (eq (car-safe form) 'list)
3e7f6fdc234d (byte-compile-associative): Do operations left to right.
Richard M. Stallman <rms@gnu.org>
parents: 13403
diff changeset
2164 (setq int (list 'interactive
3e7f6fdc234d (byte-compile-associative): Do operations left to right.
Richard M. Stallman <rms@gnu.org>
parents: 13403
diff changeset
2165 (byte-compile-top-level (nth 1 int)))))))
1532
50af75dfa70a (byte-compile-lambda):
Richard M. Stallman <rms@gnu.org>
parents: 1129
diff changeset
2166 ((cdr int)
50af75dfa70a (byte-compile-lambda):
Richard M. Stallman <rms@gnu.org>
parents: 1129
diff changeset
2167 (byte-compile-warn "malformed interactive spec: %s"
50af75dfa70a (byte-compile-lambda):
Richard M. Stallman <rms@gnu.org>
parents: 1129
diff changeset
2168 (prin1-to-string int))))))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2169 (let ((compiled (byte-compile-top-level (cons 'progn body) nil 'lambda)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2170 (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
2171 (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
2172 byte-compile-compatibility)))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2173 (apply 'make-byte-code
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2174 (append (list arglist)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2175 ;; byte-string, constants-vector, stack depth
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2176 (cdr compiled)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2177 ;; optionally, the doc string.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2178 (if (or doc int)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2179 (list doc))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2180 ;; optionally, the interactive spec.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2181 (if int
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2182 (list (nth 1 int)))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2183 (setq compiled
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2184 (nconc (if int (list int))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2185 (cond ((eq (car-safe compiled) 'progn) (cdr compiled))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2186 (compiled (list compiled)))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2187 (nconc (list 'lambda arglist)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2188 (if (or doc (stringp (car compiled)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2189 (cons doc (cond (compiled)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2190 (body (list nil))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2191 compiled))))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2192
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2193 (defun byte-compile-constants-vector ()
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2194 ;; Builds the constants-vector from the current variables and constants.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2195 ;; This modifies the constants from (const . nil) to (const . offset).
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2196 ;; To keep the byte-codes to look up the vector as short as possible:
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2197 ;; First 6 elements are vars, as there are one-byte varref codes for those.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2198 ;; Next up to byte-constant-limit are constants, still with one-byte codes.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2199 ;; Next variables again, to get 2-byte codes for variable lookup.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2200 ;; The rest of the constants and variables need 3-byte byte-codes.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2201 (let* ((i -1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2202 (rest (nreverse byte-compile-variables)) ; nreverse because the first
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2203 (other (nreverse byte-compile-constants)) ; vars often are used most.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2204 ret tmp
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2205 (limits '(5 ; Use the 1-byte varref codes,
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2206 63 ; 1-constlim ; 1-byte byte-constant codes,
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2207 255 ; 2-byte varref codes,
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2208 65535)) ; 3-byte codes for the rest.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2209 limit)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2210 (while (or rest other)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2211 (setq limit (car limits))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2212 (while (and rest (not (eq i limit)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2213 (if (setq tmp (assq (car (car rest)) ret))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2214 (setcdr (car rest) (cdr tmp))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2215 (setcdr (car rest) (setq i (1+ i)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2216 (setq ret (cons (car rest) ret)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2217 (setq rest (cdr rest)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2218 (setq limits (cdr limits)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2219 rest (prog1 other
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2220 (setq other rest))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2221 (apply 'vector (nreverse (mapcar 'car ret)))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2222
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2223 ;; Given an expression FORM, compile it and return an equivalent byte-code
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2224 ;; expression (a call to the function byte-code).
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2225 (defun byte-compile-top-level (form &optional for-effect output-type)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2226 ;; OUTPUT-TYPE advises about how form is expected to be used:
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2227 ;; 'eval or nil -> a single form,
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2228 ;; 'progn or t -> a list of forms,
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2229 ;; 'lambda -> body of a lambda,
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2230 ;; 'file -> used at file-level.
8446
0199ece40d91 (byte-compile-protect-from-advice): Macro deleted.
Richard M. Stallman <rms@gnu.org>
parents: 8115
diff changeset
2231 (let ((byte-compile-constants nil)
0199ece40d91 (byte-compile-protect-from-advice): Macro deleted.
Richard M. Stallman <rms@gnu.org>
parents: 8115
diff changeset
2232 (byte-compile-variables nil)
0199ece40d91 (byte-compile-protect-from-advice): Macro deleted.
Richard M. Stallman <rms@gnu.org>
parents: 8115
diff changeset
2233 (byte-compile-tag-number 0)
0199ece40d91 (byte-compile-protect-from-advice): Macro deleted.
Richard M. Stallman <rms@gnu.org>
parents: 8115
diff changeset
2234 (byte-compile-depth 0)
0199ece40d91 (byte-compile-protect-from-advice): Macro deleted.
Richard M. Stallman <rms@gnu.org>
parents: 8115
diff changeset
2235 (byte-compile-maxdepth 0)
0199ece40d91 (byte-compile-protect-from-advice): Macro deleted.
Richard M. Stallman <rms@gnu.org>
parents: 8115
diff changeset
2236 (byte-compile-output nil))
6081
65adb7b035fd (byte-compile-protect-from-advice): New macro that
Richard M. Stallman <rms@gnu.org>
parents: 6043
diff changeset
2237 (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
2238 (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
2239 (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
2240 (setq form (nth 1 form)))
65adb7b035fd (byte-compile-protect-from-advice): New macro that
Richard M. Stallman <rms@gnu.org>
parents: 6043
diff changeset
2241 (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
2242 (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
2243 (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
2244 (natnump (nth 3 form)))
65adb7b035fd (byte-compile-protect-from-advice): New macro that
Richard M. Stallman <rms@gnu.org>
parents: 6043
diff changeset
2245 form
65adb7b035fd (byte-compile-protect-from-advice): New macro that
Richard M. Stallman <rms@gnu.org>
parents: 6043
diff changeset
2246 (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
2247 (byte-compile-out-toplevel for-effect output-type))))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2248
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2249 (defun byte-compile-out-toplevel (&optional for-effect output-type)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2250 (if for-effect
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2251 ;; The stack is empty. Push a value to be returned from (byte-code ..).
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2252 (if (eq (car (car byte-compile-output)) 'byte-discard)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2253 (setq byte-compile-output (cdr byte-compile-output))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2254 (byte-compile-push-constant
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2255 ;; Push any constant - preferably one which already is used, and
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2256 ;; a number or symbol - ie not some big sequence. The return value
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2257 ;; isn't returned, but it would be a shame if some textually large
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2258 ;; constant was not optimized away because we chose to return it.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2259 (and (not (assq nil byte-compile-constants)) ; Nil is often there.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2260 (let ((tmp (reverse byte-compile-constants)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2261 (while (and tmp (not (or (symbolp (car (car tmp)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2262 (numberp (car (car tmp))))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2263 (setq tmp (cdr tmp)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2264 (car (car tmp)))))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2265 (byte-compile-out 'byte-return 0)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2266 (setq byte-compile-output (nreverse byte-compile-output))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2267 (if (memq byte-optimize '(t byte))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2268 (setq byte-compile-output
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2269 (byte-optimize-lapcode byte-compile-output for-effect)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2270
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2271 ;; Decompile trivial functions:
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2272 ;; only constants and variables, or a single funcall except in lambdas.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2273 ;; Except for Lisp_Compiled objects, forms like (foo "hi")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2274 ;; are still quicker than (byte-code "..." [foo "hi"] 2).
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2275 ;; Note that even (quote foo) must be parsed just as any subr by the
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2276 ;; interpreter, so quote should be compiled into byte-code in some contexts.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2277 ;; 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
2278 ;; 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
2279 ;; 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
2280 ;; 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
2281 ;; the Lisp_Compiled type, the compiled form is faster.
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2282 ;; eval -> atom, quote or (function atom atom atom)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2283 ;; progn -> as <<same-as-eval>> or (progn <<same-as-eval>> atom)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2284 ;; file -> as progn, but takes both quotes and atoms, and longer forms.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2285 (let (rest
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2286 (maycall (not (eq output-type 'lambda))) ; t if we may make a funcall.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2287 tmp body)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2288 (cond
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2289 ;; #### 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
2290 ((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
2291 (nthcdr (if (eq output-type 'file) 50 8) byte-compile-output)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2292 (assq 'TAG byte-compile-output) ; Not necessary, but speeds up a bit.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2293 (not (setq tmp (assq 'byte-return byte-compile-output)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2294 (progn
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2295 (setq rest (nreverse
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2296 (cdr (memq tmp (reverse byte-compile-output)))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2297 (while (cond
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2298 ((memq (car (car rest)) '(byte-varref byte-constant))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2299 (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
2300 (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
2301 (or (consp tmp)
eb953f4baf7b (byte-compile-out-toplevel): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 15972
diff changeset
2302 (and (symbolp tmp)
27824
52c0cae80495 Change old backquote syntax.
Dave Love <fx@gnu.org>
parents: 27584
diff changeset
2303 (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
2304 (if maycall
eb953f4baf7b (byte-compile-out-toplevel): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 15972
diff changeset
2305 (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
2306 (setq body (cons tmp body))))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2307 ((and maycall
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2308 ;; Allow a funcall if at most one atom follows it.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2309 (null (nthcdr 3 rest))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2310 (setq tmp (get (car (car rest)) 'byte-opcode-invert))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2311 (or (null (cdr rest))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2312 (and (memq output-type '(file progn t))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2313 (cdr (cdr rest))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2314 (eq (car (nth 1 rest)) 'byte-discard)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2315 (progn (setq rest (cdr rest)) t))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2316 (setq maycall nil) ; Only allow one real function call.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2317 (setq body (nreverse body))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2318 (setq body (list
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2319 (if (and (eq tmp 'funcall)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2320 (eq (car-safe (car body)) 'quote))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2321 (cons (nth 1 (car body)) (cdr body))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2322 (cons tmp body))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2323 (or (eq output-type 'file)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2324 (not (delq nil (mapcar 'consp (cdr (car body))))))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2325 (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
2326 rest))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2327 (let ((byte-compile-vector (byte-compile-constants-vector)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2328 (list 'byte-code (byte-compile-lapcode byte-compile-output)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2329 byte-compile-vector byte-compile-maxdepth)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2330 ;; it's a trivial function
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2331 ((cdr body) (cons 'progn (nreverse body)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2332 ((car body)))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2333
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2334 ;; Given BODY, compile it and return a new body.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2335 (defun byte-compile-top-level-body (body &optional for-effect)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2336 (setq body (byte-compile-top-level (cons 'progn body) for-effect t))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2337 (cond ((eq (car-safe body) 'progn)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2338 (cdr body))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2339 (body
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2340 (list body))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2341
28402
843e552813e3 Doc fixes.
Dave Love <fx@gnu.org>
parents: 28336
diff changeset
2342 ;; This is the recursive entry point for compiling each subform of an
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2343 ;; expression.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2344 ;; If for-effect is non-nil, byte-compile-form will output a byte-discard
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2345 ;; before terminating (ie no value will be left on the stack).
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2346 ;; A byte-compile handler may, when for-effect is non-nil, choose output code
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2347 ;; which does not leave a value on the stack, and then set for-effect to nil
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2348 ;; (to prevent byte-compile-form from outputting the byte-discard).
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2349 ;; If a handler wants to call another handler, it should do so via
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2350 ;; byte-compile-form, or take extreme care to handle for-effect correctly.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2351 ;; (Use byte-compile-form-do-effect to reset the for-effect flag too.)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2352 ;;
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2353 (defun byte-compile-form (form &optional for-effect)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2354 (setq form (macroexpand form byte-compile-macro-environment))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2355 (cond ((not (consp form))
27824
52c0cae80495 Change old backquote syntax.
Dave Love <fx@gnu.org>
parents: 27584
diff changeset
2356 (cond ((or (not (symbolp form)) (byte-compile-const-symbol-p form))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2357 (byte-compile-constant form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2358 ((and for-effect byte-compile-delete-errors)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2359 (setq for-effect nil))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2360 (t (byte-compile-variable-ref 'byte-varref form))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2361 ((symbolp (car form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2362 (let* ((fn (car form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2363 (handler (get fn 'byte-compile)))
27824
52c0cae80495 Change old backquote syntax.
Dave Love <fx@gnu.org>
parents: 27584
diff changeset
2364 (if (byte-compile-const-symbol-p fn)
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
2365 (byte-compile-warn "%s called as a function" fn))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2366 (if (and handler
3653
974055b516d9 * bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents: 3591
diff changeset
2367 (or (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
2368 byte-compile-compatibility))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2369 (not (get (get fn 'byte-opcode) 'emacs19-opcode))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2370 (funcall handler form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2371 (if (memq 'callargs byte-compile-warnings)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2372 (byte-compile-callargs-warn form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2373 (byte-compile-normal-call form))))
1819
df06a60f3362 * disass.el (disassemble): Add autoload cookie for this.
Jim Blandy <jimb@redhat.com>
parents: 1604
diff changeset
2374 ((and (or (byte-code-function-p (car form))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2375 (eq (car-safe (car form)) 'lambda))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2376 ;; if the form comes out the same way it went in, that's
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2377 ;; because it was malformed, and we couldn't unfold it.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2378 (not (eq form (setq form (byte-compile-unfold-lambda form)))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2379 (byte-compile-form form for-effect)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2380 (setq for-effect nil))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2381 ((byte-compile-normal-call form)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2382 (if for-effect
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2383 (byte-compile-discard)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2384
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2385 (defun byte-compile-normal-call (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2386 (if byte-compile-generate-call-tree
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2387 (byte-compile-annotate-call-tree form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2388 (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
2389 (mapc 'byte-compile-form (cdr form)) ; wasteful, but faster.
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2390 (byte-compile-out 'byte-call (length (cdr form))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2391
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2392 (defun byte-compile-variable-ref (base-op var)
27824
52c0cae80495 Change old backquote syntax.
Dave Love <fx@gnu.org>
parents: 27584
diff changeset
2393 (if (or (not (symbolp var)) (byte-compile-const-symbol-p var))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2394 (byte-compile-warn (if (eq base-op 'byte-varbind)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2395 "Attempt to let-bind %s %s"
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2396 "Variable reference to %s %s")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2397 (if (symbolp var) "constant" "nonvariable")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2398 (prin1-to-string var))
10256
83d56dd99a40 (byte-compile-warning-types): Add obsolete.
Richard M. Stallman <rms@gnu.org>
parents: 10235
diff changeset
2399 (if (and (get var 'byte-obsolete-variable)
83d56dd99a40 (byte-compile-warning-types): Add obsolete.
Richard M. Stallman <rms@gnu.org>
parents: 10235
diff changeset
2400 (memq 'obsolete byte-compile-warnings))
29352
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
2401 (let* ((ob (get var 'byte-obsolete-variable))
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
2402 (when (cdr ob)))
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
2403 (byte-compile-warn "%s is an obsolete variable%s; %s" var
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
2404 (if when (concat " since " when) "")
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
2405 (if (stringp (car ob))
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
2406 (car ob)
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
2407 (format "use %s instead." (car ob))))))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2408 (if (memq 'free-vars byte-compile-warnings)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2409 (if (eq base-op 'byte-varbind)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2410 (setq byte-compile-bound-variables
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2411 (cons var byte-compile-bound-variables))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2412 (or (boundp var)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2413 (memq var byte-compile-bound-variables)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2414 (if (eq base-op 'byte-varset)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2415 (or (memq var byte-compile-free-assignments)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2416 (progn
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2417 (byte-compile-warn "assignment to free variable %s" var)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2418 (setq byte-compile-free-assignments
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2419 (cons var byte-compile-free-assignments))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2420 (or (memq var byte-compile-free-references)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2421 (progn
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2422 (byte-compile-warn "reference to free variable %s" var)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2423 (setq byte-compile-free-references
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2424 (cons var byte-compile-free-references)))))))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2425 (let ((tmp (assq var byte-compile-variables)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2426 (or tmp
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2427 (setq tmp (list var)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2428 byte-compile-variables (cons tmp byte-compile-variables)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2429 (byte-compile-out base-op tmp)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2430
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2431 (defmacro byte-compile-get-constant (const)
27824
52c0cae80495 Change old backquote syntax.
Dave Love <fx@gnu.org>
parents: 27584
diff changeset
2432 `(or (if (stringp ,const)
52c0cae80495 Change old backquote syntax.
Dave Love <fx@gnu.org>
parents: 27584
diff changeset
2433 (assoc ,const byte-compile-constants)
52c0cae80495 Change old backquote syntax.
Dave Love <fx@gnu.org>
parents: 27584
diff changeset
2434 (assq ,const byte-compile-constants))
52c0cae80495 Change old backquote syntax.
Dave Love <fx@gnu.org>
parents: 27584
diff changeset
2435 (car (setq byte-compile-constants
52c0cae80495 Change old backquote syntax.
Dave Love <fx@gnu.org>
parents: 27584
diff changeset
2436 (cons (list ,const) byte-compile-constants)))))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2437
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2438 ;; Use this when the value of a form is a constant. This obeys for-effect.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2439 (defun byte-compile-constant (const)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2440 (if for-effect
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2441 (setq for-effect nil)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2442 (byte-compile-out 'byte-constant (byte-compile-get-constant const))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2443
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2444 ;; Use this for a constant that is not the value of its containing form.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2445 ;; This ignores for-effect.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2446 (defun byte-compile-push-constant (const)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2447 (let ((for-effect nil))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2448 (inline (byte-compile-constant const))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2449
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2450
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2451 ;; Compile those primitive ordinary functions
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2452 ;; which have special byte codes just for speed.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2453
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2454 (defmacro byte-defop-compiler (function &optional compile-handler)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2455 ;; add a compiler-form for FUNCTION.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2456 ;; If function is a symbol, then the variable "byte-SYMBOL" must name
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2457 ;; the opcode to be used. If function is a list, the first element
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2458 ;; is the function and the second element is the bytecode-symbol.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2459 ;; COMPILE-HANDLER is the function to use to compile this byte-op, or
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2460 ;; may be the abbreviations 0, 1, 2, 3, 0-1, or 1-2.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2461 ;; If it is nil, then the handler is "byte-compile-SYMBOL."
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2462 (let (opcode)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2463 (if (symbolp function)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2464 (setq opcode (intern (concat "byte-" (symbol-name function))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2465 (setq opcode (car (cdr function))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2466 function (car function)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2467 (let ((fnform
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2468 (list 'put (list 'quote function) ''byte-compile
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2469 (list 'quote
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2470 (or (cdr (assq compile-handler
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2471 '((0 . byte-compile-no-args)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2472 (1 . byte-compile-one-arg)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2473 (2 . byte-compile-two-args)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2474 (3 . byte-compile-three-args)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2475 (0-1 . byte-compile-zero-or-one-arg)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2476 (1-2 . byte-compile-one-or-two-args)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2477 (2-3 . byte-compile-two-or-three-args)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2478 )))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2479 compile-handler
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2480 (intern (concat "byte-compile-"
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2481 (symbol-name function))))))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2482 (if opcode
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2483 (list 'progn fnform
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2484 (list 'put (list 'quote function)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2485 ''byte-opcode (list 'quote opcode))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2486 (list 'put (list 'quote opcode)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2487 ''byte-opcode-invert (list 'quote function)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2488 fnform))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2489
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2490 (defmacro byte-defop-compiler19 (function &optional compile-handler)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2491 ;; 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
2492 ;; be used when byte-compile-compatibility is false.
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2493 (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
2494 byte-compile-compatibility)
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
2495 ;; #### instead of doing nothing, this should do some remprops,
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
2496 ;; #### to protect against the case where a single-version compiler
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
2497 ;; #### is loaded into a world that has contained a multi-version one.
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2498 nil
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2499 (list 'progn
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2500 (list 'put
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2501 (list 'quote
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2502 (or (car (cdr-safe function))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2503 (intern (concat "byte-"
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2504 (symbol-name (or (car-safe function) function))))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2505 ''emacs19-opcode t)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2506 (list 'byte-defop-compiler function compile-handler))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2507
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2508 (defmacro byte-defop-compiler-1 (function &optional compile-handler)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2509 (list 'byte-defop-compiler (list function nil) compile-handler))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2510
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2511
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2512 (put 'byte-call 'byte-opcode-invert 'funcall)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2513 (put 'byte-list1 'byte-opcode-invert 'list)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2514 (put 'byte-list2 'byte-opcode-invert 'list)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2515 (put 'byte-list3 'byte-opcode-invert 'list)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2516 (put 'byte-list4 'byte-opcode-invert 'list)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2517 (put 'byte-listN 'byte-opcode-invert 'list)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2518 (put 'byte-concat2 'byte-opcode-invert 'concat)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2519 (put 'byte-concat3 'byte-opcode-invert 'concat)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2520 (put 'byte-concat4 'byte-opcode-invert 'concat)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2521 (put 'byte-concatN 'byte-opcode-invert 'concat)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2522 (put 'byte-insertN 'byte-opcode-invert 'insert)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2523
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2524 (byte-defop-compiler (dot byte-point) 0)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2525 (byte-defop-compiler (dot-max byte-point-max) 0)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2526 (byte-defop-compiler (dot-min byte-point-min) 0)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2527 (byte-defop-compiler point 0)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2528 ;;(byte-defop-compiler mark 0) ;; obsolete
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2529 (byte-defop-compiler point-max 0)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2530 (byte-defop-compiler point-min 0)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2531 (byte-defop-compiler following-char 0)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2532 (byte-defop-compiler preceding-char 0)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2533 (byte-defop-compiler current-column 0)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2534 (byte-defop-compiler eolp 0)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2535 (byte-defop-compiler eobp 0)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2536 (byte-defop-compiler bolp 0)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2537 (byte-defop-compiler bobp 0)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2538 (byte-defop-compiler current-buffer 0)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2539 ;;(byte-defop-compiler read-char 0) ;; obsolete
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2540 (byte-defop-compiler interactive-p 0)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2541 (byte-defop-compiler19 widen 0)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2542 (byte-defop-compiler19 end-of-line 0-1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2543 (byte-defop-compiler19 forward-char 0-1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2544 (byte-defop-compiler19 forward-line 0-1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2545 (byte-defop-compiler symbolp 1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2546 (byte-defop-compiler consp 1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2547 (byte-defop-compiler stringp 1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2548 (byte-defop-compiler listp 1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2549 (byte-defop-compiler not 1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2550 (byte-defop-compiler (null byte-not) 1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2551 (byte-defop-compiler car 1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2552 (byte-defop-compiler cdr 1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2553 (byte-defop-compiler length 1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2554 (byte-defop-compiler symbol-value 1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2555 (byte-defop-compiler symbol-function 1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2556 (byte-defop-compiler (1+ byte-add1) 1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2557 (byte-defop-compiler (1- byte-sub1) 1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2558 (byte-defop-compiler goto-char 1)
18722
3905119ebc75 (char-after): Allow 0 args.
Richard M. Stallman <rms@gnu.org>
parents: 18391
diff changeset
2559 (byte-defop-compiler char-after 0-1)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2560 (byte-defop-compiler set-buffer 1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2561 ;;(byte-defop-compiler set-mark 1) ;; obsolete
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2562 (byte-defop-compiler19 forward-word 1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2563 (byte-defop-compiler19 char-syntax 1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2564 (byte-defop-compiler19 nreverse 1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2565 (byte-defop-compiler19 car-safe 1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2566 (byte-defop-compiler19 cdr-safe 1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2567 (byte-defop-compiler19 numberp 1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2568 (byte-defop-compiler19 integerp 1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2569 (byte-defop-compiler19 skip-chars-forward 1-2)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2570 (byte-defop-compiler19 skip-chars-backward 1-2)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2571 (byte-defop-compiler eq 2)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2572 (byte-defop-compiler memq 2)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2573 (byte-defop-compiler cons 2)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2574 (byte-defop-compiler aref 2)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2575 (byte-defop-compiler set 2)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2576 (byte-defop-compiler (= byte-eqlsign) 2)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2577 (byte-defop-compiler (< byte-lss) 2)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2578 (byte-defop-compiler (> byte-gtr) 2)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2579 (byte-defop-compiler (<= byte-leq) 2)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2580 (byte-defop-compiler (>= byte-geq) 2)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2581 (byte-defop-compiler get 2)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2582 (byte-defop-compiler nth 2)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2583 (byte-defop-compiler substring 2-3)
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
2584 (byte-defop-compiler19 (move-marker byte-set-marker) 2-3)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2585 (byte-defop-compiler19 set-marker 2-3)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2586 (byte-defop-compiler19 match-beginning 1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2587 (byte-defop-compiler19 match-end 1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2588 (byte-defop-compiler19 upcase 1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2589 (byte-defop-compiler19 downcase 1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2590 (byte-defop-compiler19 string= 2)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2591 (byte-defop-compiler19 string< 2)
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
2592 (byte-defop-compiler19 (string-equal byte-string=) 2)
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
2593 (byte-defop-compiler19 (string-lessp byte-string<) 2)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2594 (byte-defop-compiler19 equal 2)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2595 (byte-defop-compiler19 nthcdr 2)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2596 (byte-defop-compiler19 elt 2)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2597 (byte-defop-compiler19 member 2)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2598 (byte-defop-compiler19 assq 2)
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
2599 (byte-defop-compiler19 (rplaca byte-setcar) 2)
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
2600 (byte-defop-compiler19 (rplacd byte-setcdr) 2)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2601 (byte-defop-compiler19 setcar 2)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2602 (byte-defop-compiler19 setcdr 2)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2603 (byte-defop-compiler19 buffer-substring 2)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2604 (byte-defop-compiler19 delete-region 2)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2605 (byte-defop-compiler19 narrow-to-region 2)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2606 (byte-defop-compiler19 (% byte-rem) 2)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2607 (byte-defop-compiler aset 3)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2608
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2609 (byte-defop-compiler max byte-compile-associative)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2610 (byte-defop-compiler min byte-compile-associative)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2611 (byte-defop-compiler (+ byte-plus) byte-compile-associative)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2612 (byte-defop-compiler19 (* byte-mult) byte-compile-associative)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2613
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2614 ;;####(byte-defop-compiler19 move-to-column 1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2615 (byte-defop-compiler-1 interactive byte-compile-noop)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2616
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2617
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2618 (defun byte-compile-subr-wrong-args (form n)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2619 (byte-compile-warn "%s called with %d arg%s, but requires %s"
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2620 (car form) (length (cdr form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2621 (if (= 1 (length (cdr form))) "" "s") n)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2622 ;; get run-time wrong-number-of-args error.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2623 (byte-compile-normal-call form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2624
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2625 (defun byte-compile-no-args (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2626 (if (not (= (length form) 1))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2627 (byte-compile-subr-wrong-args form "none")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2628 (byte-compile-out (get (car form) 'byte-opcode) 0)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2629
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2630 (defun byte-compile-one-arg (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2631 (if (not (= (length form) 2))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2632 (byte-compile-subr-wrong-args form 1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2633 (byte-compile-form (car (cdr form))) ;; Push the argument
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2634 (byte-compile-out (get (car form) 'byte-opcode) 0)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2635
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2636 (defun byte-compile-two-args (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2637 (if (not (= (length form) 3))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2638 (byte-compile-subr-wrong-args form 2)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2639 (byte-compile-form (car (cdr form))) ;; Push the arguments
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2640 (byte-compile-form (nth 2 form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2641 (byte-compile-out (get (car form) 'byte-opcode) 0)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2642
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2643 (defun byte-compile-three-args (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2644 (if (not (= (length form) 4))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2645 (byte-compile-subr-wrong-args form 3)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2646 (byte-compile-form (car (cdr form))) ;; Push the arguments
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2647 (byte-compile-form (nth 2 form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2648 (byte-compile-form (nth 3 form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2649 (byte-compile-out (get (car form) 'byte-opcode) 0)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2650
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2651 (defun byte-compile-zero-or-one-arg (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2652 (let ((len (length form)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2653 (cond ((= len 1) (byte-compile-one-arg (append form '(nil))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2654 ((= len 2) (byte-compile-one-arg form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2655 (t (byte-compile-subr-wrong-args form "0-1")))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2656
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2657 (defun byte-compile-one-or-two-args (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2658 (let ((len (length form)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2659 (cond ((= len 2) (byte-compile-two-args (append form '(nil))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2660 ((= len 3) (byte-compile-two-args form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2661 (t (byte-compile-subr-wrong-args form "1-2")))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2662
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2663 (defun byte-compile-two-or-three-args (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2664 (let ((len (length form)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2665 (cond ((= len 3) (byte-compile-three-args (append form '(nil))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2666 ((= len 4) (byte-compile-three-args form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2667 (t (byte-compile-subr-wrong-args form "2-3")))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2668
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2669 (defun byte-compile-noop (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2670 (byte-compile-constant nil))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2671
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2672 (defun byte-compile-discard ()
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2673 (byte-compile-out 'byte-discard 0))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2674
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2675
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2676 ;; 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
2677 ;; 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
2678 ;; 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
2679 ;; 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
2680 ;; in order to convert markers to numbers, and trigger expected errors.
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2681 (defun byte-compile-associative (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2682 (if (cdr form)
13474
3e7f6fdc234d (byte-compile-associative): Do operations left to right.
Richard M. Stallman <rms@gnu.org>
parents: 13403
diff changeset
2683 (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
2684 (args (copy-sequence (cdr form))))
3e7f6fdc234d (byte-compile-associative): Do operations left to right.
Richard M. Stallman <rms@gnu.org>
parents: 13403
diff changeset
2685 (byte-compile-form (car args))
3e7f6fdc234d (byte-compile-associative): Do operations left to right.
Richard M. Stallman <rms@gnu.org>
parents: 13403
diff changeset
2686 (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
2687 (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
2688 opcode (get '+ 'byte-opcode)))
13474
3e7f6fdc234d (byte-compile-associative): Do operations left to right.
Richard M. Stallman <rms@gnu.org>
parents: 13403
diff changeset
2689 (while args
3e7f6fdc234d (byte-compile-associative): Do operations left to right.
Richard M. Stallman <rms@gnu.org>
parents: 13403
diff changeset
2690 (byte-compile-form (car args))
3e7f6fdc234d (byte-compile-associative): Do operations left to right.
Richard M. Stallman <rms@gnu.org>
parents: 13403
diff changeset
2691 (byte-compile-out opcode 0)
3e7f6fdc234d (byte-compile-associative): Do operations left to right.
Richard M. Stallman <rms@gnu.org>
parents: 13403
diff changeset
2692 (setq args (cdr args))))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2693 (byte-compile-constant (eval form))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2694
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2695
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2696 ;; more complicated compiler macros
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2697
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2698 (byte-defop-compiler list)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2699 (byte-defop-compiler concat)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2700 (byte-defop-compiler fset)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2701 (byte-defop-compiler (indent-to-column byte-indent-to) byte-compile-indent-to)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2702 (byte-defop-compiler indent-to)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2703 (byte-defop-compiler insert)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2704 (byte-defop-compiler-1 function byte-compile-function-form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2705 (byte-defop-compiler-1 - byte-compile-minus)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2706 (byte-defop-compiler19 (/ byte-quo) byte-compile-quo)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2707 (byte-defop-compiler19 nconc)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2708
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2709 (defun byte-compile-list (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2710 (let ((count (length (cdr form))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2711 (cond ((= count 0)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2712 (byte-compile-constant nil))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2713 ((< count 5)
29239
86949998e6fd (byte-compile-callargs-warn): Use subr-arity to check primitives.
Dave Love <fx@gnu.org>
parents: 28441
diff changeset
2714 (mapc 'byte-compile-form (cdr form))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2715 (byte-compile-out
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2716 (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
2717 ((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
2718 byte-compile-compatibility)))
29239
86949998e6fd (byte-compile-callargs-warn): Use subr-arity to check primitives.
Dave Love <fx@gnu.org>
parents: 28441
diff changeset
2719 (mapc 'byte-compile-form (cdr form))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2720 (byte-compile-out 'byte-listN count))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2721 (t (byte-compile-normal-call form)))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2722
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2723 (defun byte-compile-concat (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2724 (let ((count (length (cdr form))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2725 (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
2726 (mapc 'byte-compile-form (cdr form))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2727 (byte-compile-out
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2728 (aref [byte-concat2 byte-concat3 byte-concat4] (- count 2))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2729 0))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2730 ;; Concat of one arg is not a no-op if arg is not a string.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2731 ((= count 0)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2732 (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
2733 ((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
2734 byte-compile-compatibility)))
29239
86949998e6fd (byte-compile-callargs-warn): Use subr-arity to check primitives.
Dave Love <fx@gnu.org>
parents: 28441
diff changeset
2735 (mapc 'byte-compile-form (cdr form))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2736 (byte-compile-out 'byte-concatN count))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2737 ((byte-compile-normal-call form)))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2738
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2739 (defun byte-compile-minus (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2740 (if (null (setq form (cdr form)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2741 (byte-compile-constant 0)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2742 (byte-compile-form (car form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2743 (if (cdr form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2744 (while (setq form (cdr form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2745 (byte-compile-form (car form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2746 (byte-compile-out 'byte-diff 0))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2747 (byte-compile-out 'byte-negate 0))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2748
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2749 (defun byte-compile-quo (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2750 (let ((len (length form)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2751 (cond ((<= len 2)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2752 (byte-compile-subr-wrong-args form "2 or more"))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2753 (t
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2754 (byte-compile-form (car (setq form (cdr form))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2755 (while (setq form (cdr form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2756 (byte-compile-form (car form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2757 (byte-compile-out 'byte-quo 0))))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2758
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2759 (defun byte-compile-nconc (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2760 (let ((len (length form)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2761 (cond ((= len 1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2762 (byte-compile-constant nil))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2763 ((= len 2)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2764 ;; nconc of one arg is a noop, even if that arg isn't a list.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2765 (byte-compile-form (nth 1 form)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2766 (t
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2767 (byte-compile-form (car (setq form (cdr form))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2768 (while (setq form (cdr form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2769 (byte-compile-form (car form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2770 (byte-compile-out 'byte-nconc 0))))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2771
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2772 (defun byte-compile-fset (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2773 ;; warn about forms like (fset 'foo '(lambda () ...))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2774 ;; (where the lambda expression is non-trivial...)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2775 (let ((fn (nth 2 form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2776 body)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2777 (if (and (eq (car-safe fn) 'quote)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2778 (eq (car-safe (setq fn (nth 1 fn))) 'lambda))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2779 (progn
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2780 (setq body (cdr (cdr fn)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2781 (if (stringp (car body)) (setq body (cdr body)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2782 (if (eq 'interactive (car-safe (car body))) (setq body (cdr body)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2783 (if (and (consp (car body))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2784 (not (eq 'byte-code (car (car body)))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2785 (byte-compile-warn
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2786 "A quoted lambda form is the second argument of fset. This is probably
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2787 not what you want, as that lambda cannot be compiled. Consider using
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2788 the syntax (function (lambda (...) ...)) instead.")))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2789 (byte-compile-two-args form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2790
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2791 (defun byte-compile-funarg (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2792 ;; (mapcar '(lambda (x) ..) ..) ==> (mapcar (function (lambda (x) ..)) ..)
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 3455
diff changeset
2793 ;; for cases where it's guaranteed that first arg will be used as a lambda.
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2794 (byte-compile-normal-call
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2795 (let ((fn (nth 1 form)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2796 (if (and (eq (car-safe fn) 'quote)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2797 (eq (car-safe (nth 1 fn)) 'lambda))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2798 (cons (car form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2799 (cons (cons 'function (cdr fn))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2800 (cdr (cdr form))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2801 form))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2802
15953
38a50022d610 (byte-compile-funarg-2): New function,
Richard M. Stallman <rms@gnu.org>
parents: 15930
diff changeset
2803 (defun byte-compile-funarg-2 (form)
38a50022d610 (byte-compile-funarg-2): New function,
Richard M. Stallman <rms@gnu.org>
parents: 15930
diff changeset
2804 ;; (sort ... '(lambda (x) ..)) ==> (sort ... (function (lambda (x) ..)))
38a50022d610 (byte-compile-funarg-2): New function,
Richard M. Stallman <rms@gnu.org>
parents: 15930
diff changeset
2805 ;; 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
2806 (byte-compile-normal-call
38a50022d610 (byte-compile-funarg-2): New function,
Richard M. Stallman <rms@gnu.org>
parents: 15930
diff changeset
2807 (let ((fn (nth 2 form)))
38a50022d610 (byte-compile-funarg-2): New function,
Richard M. Stallman <rms@gnu.org>
parents: 15930
diff changeset
2808 (if (and (eq (car-safe fn) 'quote)
38a50022d610 (byte-compile-funarg-2): New function,
Richard M. Stallman <rms@gnu.org>
parents: 15930
diff changeset
2809 (eq (car-safe (nth 1 fn)) 'lambda))
38a50022d610 (byte-compile-funarg-2): New function,
Richard M. Stallman <rms@gnu.org>
parents: 15930
diff changeset
2810 (cons (car form)
38a50022d610 (byte-compile-funarg-2): New function,
Richard M. Stallman <rms@gnu.org>
parents: 15930
diff changeset
2811 (cons (nth 1 form)
38a50022d610 (byte-compile-funarg-2): New function,
Richard M. Stallman <rms@gnu.org>
parents: 15930
diff changeset
2812 (cons (cons 'function (cdr fn))
38a50022d610 (byte-compile-funarg-2): New function,
Richard M. Stallman <rms@gnu.org>
parents: 15930
diff changeset
2813 (cdr (cdr (cdr form))))))
38a50022d610 (byte-compile-funarg-2): New function,
Richard M. Stallman <rms@gnu.org>
parents: 15930
diff changeset
2814 form))))
38a50022d610 (byte-compile-funarg-2): New function,
Richard M. Stallman <rms@gnu.org>
parents: 15930
diff changeset
2815
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2816 ;; (function foo) must compile like 'foo, not like (symbol-function 'foo).
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2817 ;; Otherwise it will be incompatible with the interpreter,
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2818 ;; and (funcall (function foo)) will lose with autoloads.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2819
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2820 (defun byte-compile-function-form (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2821 (byte-compile-constant
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2822 (cond ((symbolp (nth 1 form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2823 (nth 1 form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2824 ;; If we're not allowed to use #[] syntax, then output a form like
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2825 ;; '(lambda (..) (byte-code ..)) instead of a call to make-byte-code.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2826 ;; In this situation, calling make-byte-code at run-time will usually
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2827 ;; 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
2828 ((byte-compile-version-cond byte-compile-compatibility)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2829 (byte-compile-byte-code-unmake (byte-compile-lambda (nth 1 form))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2830 ((byte-compile-lambda (nth 1 form))))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2831
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2832 (defun byte-compile-indent-to (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2833 (let ((len (length form)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2834 (cond ((= len 2)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2835 (byte-compile-form (car (cdr form)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2836 (byte-compile-out 'byte-indent-to 0))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2837 ((= len 3)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2838 ;; no opcode for 2-arg case.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2839 (byte-compile-normal-call form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2840 (t
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2841 (byte-compile-subr-wrong-args form "1-2")))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2842
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2843 (defun byte-compile-insert (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2844 (cond ((null (cdr form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2845 (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
2846 ((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
2847 byte-compile-compatibility))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2848 (<= (length form) 256))
29239
86949998e6fd (byte-compile-callargs-warn): Use subr-arity to check primitives.
Dave Love <fx@gnu.org>
parents: 28441
diff changeset
2849 (mapc 'byte-compile-form (cdr form))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2850 (if (cdr (cdr form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2851 (byte-compile-out 'byte-insertN (length (cdr form)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2852 (byte-compile-out 'byte-insert 0)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2853 ((memq t (mapcar 'consp (cdr (cdr form))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2854 (byte-compile-normal-call form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2855 ;; We can split it; there is no function call after inserting 1st arg.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2856 (t
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2857 (while (setq form (cdr form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2858 (byte-compile-form (car form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2859 (byte-compile-out 'byte-insert 0)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2860 (if (cdr form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2861 (byte-compile-discard))))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2862
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2863
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2864 (byte-defop-compiler-1 setq)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2865 (byte-defop-compiler-1 setq-default)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2866 (byte-defop-compiler-1 quote)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2867 (byte-defop-compiler-1 quote-form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2868
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2869 (defun byte-compile-setq (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2870 (let ((args (cdr form)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2871 (if args
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2872 (while args
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2873 (byte-compile-form (car (cdr args)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2874 (or for-effect (cdr (cdr args))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2875 (byte-compile-out 'byte-dup 0))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2876 (byte-compile-variable-ref 'byte-varset (car args))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2877 (setq args (cdr (cdr args))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2878 ;; (setq), with no arguments.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2879 (byte-compile-form nil for-effect))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2880 (setq for-effect nil)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2881
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2882 (defun byte-compile-setq-default (form)
4049
7908fc6e4fb9 (byte-compile-setq-default):
Richard M. Stallman <rms@gnu.org>
parents: 4013
diff changeset
2883 (let ((args (cdr form))
7908fc6e4fb9 (byte-compile-setq-default):
Richard M. Stallman <rms@gnu.org>
parents: 4013
diff changeset
2884 setters)
7908fc6e4fb9 (byte-compile-setq-default):
Richard M. Stallman <rms@gnu.org>
parents: 4013
diff changeset
2885 (while args
7908fc6e4fb9 (byte-compile-setq-default):
Richard M. Stallman <rms@gnu.org>
parents: 4013
diff changeset
2886 (setq setters
7908fc6e4fb9 (byte-compile-setq-default):
Richard M. Stallman <rms@gnu.org>
parents: 4013
diff changeset
2887 (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
2888 setters))
7908fc6e4fb9 (byte-compile-setq-default):
Richard M. Stallman <rms@gnu.org>
parents: 4013
diff changeset
2889 (setq args (cdr (cdr args))))
7908fc6e4fb9 (byte-compile-setq-default):
Richard M. Stallman <rms@gnu.org>
parents: 4013
diff changeset
2890 (byte-compile-form (cons 'progn (nreverse setters)))))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2891
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2892 (defun byte-compile-quote (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2893 (byte-compile-constant (car (cdr form))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2894
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2895 (defun byte-compile-quote-form (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2896 (byte-compile-constant (byte-compile-top-level (nth 1 form))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2897
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2898
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2899 ;;; control structures
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2900
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2901 (defun byte-compile-body (body &optional for-effect)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2902 (while (cdr body)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2903 (byte-compile-form (car body) t)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2904 (setq body (cdr body)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2905 (byte-compile-form (car body) for-effect))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2906
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
2907 (defsubst byte-compile-body-do-effect (body)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2908 (byte-compile-body body for-effect)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2909 (setq for-effect nil))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2910
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
2911 (defsubst byte-compile-form-do-effect (form)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2912 (byte-compile-form form for-effect)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2913 (setq for-effect nil))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2914
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2915 (byte-defop-compiler-1 inline byte-compile-progn)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2916 (byte-defop-compiler-1 progn)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2917 (byte-defop-compiler-1 prog1)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2918 (byte-defop-compiler-1 prog2)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2919 (byte-defop-compiler-1 if)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2920 (byte-defop-compiler-1 cond)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2921 (byte-defop-compiler-1 and)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2922 (byte-defop-compiler-1 or)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2923 (byte-defop-compiler-1 while)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2924 (byte-defop-compiler-1 funcall)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2925 (byte-defop-compiler-1 apply byte-compile-funarg)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2926 (byte-defop-compiler-1 mapcar byte-compile-funarg)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2927 (byte-defop-compiler-1 mapatoms byte-compile-funarg)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2928 (byte-defop-compiler-1 mapconcat byte-compile-funarg)
31211
a5b9dbab7b2f (mapc): Use byte-compile-funarg.
Dave Love <fx@gnu.org>
parents: 30957
diff changeset
2929 (byte-defop-compiler-1 mapc byte-compile-funarg)
15953
38a50022d610 (byte-compile-funarg-2): New function,
Richard M. Stallman <rms@gnu.org>
parents: 15930
diff changeset
2930 (byte-defop-compiler-1 sort byte-compile-funarg-2)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2931 (byte-defop-compiler-1 let)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2932 (byte-defop-compiler-1 let*)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2933
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2934 (defun byte-compile-progn (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2935 (byte-compile-body-do-effect (cdr form)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2936
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2937 (defun byte-compile-prog1 (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2938 (byte-compile-form-do-effect (car (cdr form)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2939 (byte-compile-body (cdr (cdr form)) t))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2940
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2941 (defun byte-compile-prog2 (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2942 (byte-compile-form (nth 1 form) t)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2943 (byte-compile-form-do-effect (nth 2 form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2944 (byte-compile-body (cdr (cdr (cdr form))) t))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2945
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2946 (defmacro byte-compile-goto-if (cond discard tag)
27824
52c0cae80495 Change old backquote syntax.
Dave Love <fx@gnu.org>
parents: 27584
diff changeset
2947 `(byte-compile-goto
52c0cae80495 Change old backquote syntax.
Dave Love <fx@gnu.org>
parents: 27584
diff changeset
2948 (if ,cond
52c0cae80495 Change old backquote syntax.
Dave Love <fx@gnu.org>
parents: 27584
diff changeset
2949 (if ,discard 'byte-goto-if-not-nil 'byte-goto-if-not-nil-else-pop)
52c0cae80495 Change old backquote syntax.
Dave Love <fx@gnu.org>
parents: 27584
diff changeset
2950 (if ,discard 'byte-goto-if-nil 'byte-goto-if-nil-else-pop))
52c0cae80495 Change old backquote syntax.
Dave Love <fx@gnu.org>
parents: 27584
diff changeset
2951 ,tag))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2952
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2953 (defun byte-compile-if (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2954 (byte-compile-form (car (cdr form)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2955 (if (null (nthcdr 3 form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2956 ;; No else-forms
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2957 (let ((donetag (byte-compile-make-tag)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2958 (byte-compile-goto-if nil for-effect donetag)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2959 (byte-compile-form (nth 2 form) for-effect)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2960 (byte-compile-out-tag donetag))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2961 (let ((donetag (byte-compile-make-tag)) (elsetag (byte-compile-make-tag)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2962 (byte-compile-goto 'byte-goto-if-nil elsetag)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2963 (byte-compile-form (nth 2 form) for-effect)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2964 (byte-compile-goto 'byte-goto donetag)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2965 (byte-compile-out-tag elsetag)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2966 (byte-compile-body (cdr (cdr (cdr form))) for-effect)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2967 (byte-compile-out-tag donetag)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2968 (setq for-effect nil))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2969
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2970 (defun byte-compile-cond (clauses)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2971 (let ((donetag (byte-compile-make-tag))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2972 nexttag clause)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2973 (while (setq clauses (cdr clauses))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2974 (setq clause (car clauses))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2975 (cond ((or (eq (car clause) t)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2976 (and (eq (car-safe (car clause)) 'quote)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2977 (car-safe (cdr-safe (car clause)))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2978 ;; Unconditional clause
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2979 (setq clause (cons t clause)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2980 clauses nil))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2981 ((cdr clauses)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2982 (byte-compile-form (car clause))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2983 (if (null (cdr clause))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2984 ;; First clause is a singleton.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2985 (byte-compile-goto-if t for-effect donetag)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2986 (setq nexttag (byte-compile-make-tag))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2987 (byte-compile-goto 'byte-goto-if-nil nexttag)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2988 (byte-compile-body (cdr clause) for-effect)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2989 (byte-compile-goto 'byte-goto donetag)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2990 (byte-compile-out-tag nexttag)))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2991 ;; Last clause
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2992 (and (cdr clause) (not (eq (car clause) t))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2993 (progn (byte-compile-form (car clause))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2994 (byte-compile-goto-if nil for-effect donetag)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2995 (setq clause (cdr clause))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2996 (byte-compile-body-do-effect clause)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2997 (byte-compile-out-tag donetag)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2998
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2999 (defun byte-compile-and (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3000 (let ((failtag (byte-compile-make-tag))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3001 (args (cdr form)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3002 (if (null args)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3003 (byte-compile-form-do-effect t)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3004 (while (cdr args)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3005 (byte-compile-form (car args))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3006 (byte-compile-goto-if nil for-effect failtag)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3007 (setq args (cdr args)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3008 (byte-compile-form-do-effect (car args))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3009 (byte-compile-out-tag failtag))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3010
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3011 (defun byte-compile-or (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3012 (let ((wintag (byte-compile-make-tag))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3013 (args (cdr form)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3014 (if (null args)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3015 (byte-compile-form-do-effect nil)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3016 (while (cdr args)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3017 (byte-compile-form (car args))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3018 (byte-compile-goto-if t for-effect wintag)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3019 (setq args (cdr args)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3020 (byte-compile-form-do-effect (car args))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3021 (byte-compile-out-tag wintag))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3022
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3023 (defun byte-compile-while (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3024 (let ((endtag (byte-compile-make-tag))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3025 (looptag (byte-compile-make-tag)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3026 (byte-compile-out-tag looptag)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3027 (byte-compile-form (car (cdr form)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3028 (byte-compile-goto-if nil for-effect endtag)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3029 (byte-compile-body (cdr (cdr form)) t)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3030 (byte-compile-goto 'byte-goto looptag)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3031 (byte-compile-out-tag endtag)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3032 (setq for-effect nil)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3033
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3034 (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
3035 (mapc 'byte-compile-form (cdr form))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3036 (byte-compile-out 'byte-call (length (cdr (cdr form)))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3037
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3038
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3039 (defun byte-compile-let (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3040 ;; First compute the binding values in the old scope.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3041 (let ((varlist (car (cdr form))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3042 (while varlist
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3043 (if (consp (car varlist))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3044 (byte-compile-form (car (cdr (car varlist))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3045 (byte-compile-push-constant nil))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3046 (setq varlist (cdr varlist))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3047 (let ((byte-compile-bound-variables byte-compile-bound-variables) ;new scope
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3048 (varlist (reverse (car (cdr form)))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3049 (while varlist
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3050 (byte-compile-variable-ref 'byte-varbind (if (consp (car varlist))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3051 (car (car varlist))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3052 (car varlist)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3053 (setq varlist (cdr varlist)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3054 (byte-compile-body-do-effect (cdr (cdr form)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3055 (byte-compile-out 'byte-unbind (length (car (cdr form))))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3056
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3057 (defun byte-compile-let* (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3058 (let ((byte-compile-bound-variables byte-compile-bound-variables) ;new scope
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3059 (varlist (copy-sequence (car (cdr form)))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3060 (while varlist
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3061 (if (atom (car varlist))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3062 (byte-compile-push-constant nil)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3063 (byte-compile-form (car (cdr (car varlist))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3064 (setcar varlist (car (car varlist))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3065 (byte-compile-variable-ref 'byte-varbind (car varlist))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3066 (setq varlist (cdr varlist)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3067 (byte-compile-body-do-effect (cdr (cdr form)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3068 (byte-compile-out 'byte-unbind (length (car (cdr form))))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3069
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3070
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3071 (byte-defop-compiler-1 /= byte-compile-negated)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3072 (byte-defop-compiler-1 atom byte-compile-negated)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3073 (byte-defop-compiler-1 nlistp byte-compile-negated)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3074
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3075 (put '/= 'byte-compile-negated-op '=)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3076 (put 'atom 'byte-compile-negated-op 'consp)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3077 (put 'nlistp 'byte-compile-negated-op 'listp)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3078
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3079 (defun byte-compile-negated (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3080 (byte-compile-form-do-effect (byte-compile-negation-optimizer form)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3081
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3082 ;; Even when optimization is off, /= is optimized to (not (= ...)).
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3083 (defun byte-compile-negation-optimizer (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3084 ;; an optimizer for forms where <form1> is less efficient than (not <form2>)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3085 (list 'not
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3086 (cons (or (get (car form) 'byte-compile-negated-op)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3087 (error
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3088 "Compiler error: `%s' has no `byte-compile-negated-op' property"
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3089 (car form)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3090 (cdr form))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3091
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3092 ;;; other tricky macro-like special-forms
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3093
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3094 (byte-defop-compiler-1 catch)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3095 (byte-defop-compiler-1 unwind-protect)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3096 (byte-defop-compiler-1 condition-case)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3097 (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
3098 (byte-defop-compiler-1 save-current-buffer)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3099 (byte-defop-compiler-1 save-restriction)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3100 (byte-defop-compiler-1 save-window-excursion)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3101 (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
3102 (byte-defop-compiler-1 track-mouse)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3103
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3104 (defun byte-compile-catch (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3105 (byte-compile-form (car (cdr form)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3106 (byte-compile-push-constant
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3107 (byte-compile-top-level (cons 'progn (cdr (cdr form))) for-effect))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3108 (byte-compile-out 'byte-catch 0))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3109
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3110 (defun byte-compile-unwind-protect (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3111 (byte-compile-push-constant
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3112 (byte-compile-top-level-body (cdr (cdr form)) t))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3113 (byte-compile-out 'byte-unwind-protect 0)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3114 (byte-compile-form-do-effect (car (cdr form)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3115 (byte-compile-out 'byte-unbind 1))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3116
2798
e2f296263868 (byte-compile-track-mouse): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2735
diff changeset
3117 (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
3118 (byte-compile-form
649c8a929063 (byte-compile-track-mouse): Undo previous change,
Richard M. Stallman <rms@gnu.org>
parents: 6217
diff changeset
3119 (list
649c8a929063 (byte-compile-track-mouse): Undo previous change,
Richard M. Stallman <rms@gnu.org>
parents: 6217
diff changeset
3120 'funcall
649c8a929063 (byte-compile-track-mouse): Undo previous change,
Richard M. Stallman <rms@gnu.org>
parents: 6217
diff changeset
3121 (list 'quote
649c8a929063 (byte-compile-track-mouse): Undo previous change,
Richard M. Stallman <rms@gnu.org>
parents: 6217
diff changeset
3122 (list 'lambda nil
649c8a929063 (byte-compile-track-mouse): Undo previous change,
Richard M. Stallman <rms@gnu.org>
parents: 6217
diff changeset
3123 (cons 'track-mouse
649c8a929063 (byte-compile-track-mouse): Undo previous change,
Richard M. Stallman <rms@gnu.org>
parents: 6217
diff changeset
3124 (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
3125
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3126 (defun byte-compile-condition-case (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3127 (let* ((var (nth 1 form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3128 (byte-compile-bound-variables
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3129 (if var (cons var byte-compile-bound-variables)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3130 byte-compile-bound-variables)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3131 (or (symbolp var)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3132 (byte-compile-warn
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3133 "%s is not a variable-name or nil (in condition-case)" var))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3134 (byte-compile-push-constant var)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3135 (byte-compile-push-constant (byte-compile-top-level
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3136 (nth 2 form) for-effect))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3137 (let ((clauses (cdr (cdr (cdr form))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3138 compiled-clauses)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3139 (while clauses
3653
974055b516d9 * bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents: 3591
diff changeset
3140 (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
3141 (condition (car clause)))
5562
2b3d2ea74ce1 (byte-compile-condition-case): Disable warning about
Richard M. Stallman <rms@gnu.org>
parents: 5454
diff changeset
3142 (cond ((not (or (symbolp condition)
2b3d2ea74ce1 (byte-compile-condition-case): Disable warning about
Richard M. Stallman <rms@gnu.org>
parents: 5454
diff changeset
3143 (and (listp condition)
2b3d2ea74ce1 (byte-compile-condition-case): Disable warning about
Richard M. Stallman <rms@gnu.org>
parents: 5454
diff changeset
3144 (let ((syms condition) (ok t))
2b3d2ea74ce1 (byte-compile-condition-case): Disable warning about
Richard M. Stallman <rms@gnu.org>
parents: 5454
diff changeset
3145 (while syms
2b3d2ea74ce1 (byte-compile-condition-case): Disable warning about
Richard M. Stallman <rms@gnu.org>
parents: 5454
diff changeset
3146 (if (not (symbolp (car syms)))
2b3d2ea74ce1 (byte-compile-condition-case): Disable warning about
Richard M. Stallman <rms@gnu.org>
parents: 5454
diff changeset
3147 (setq ok nil))
2b3d2ea74ce1 (byte-compile-condition-case): Disable warning about
Richard M. Stallman <rms@gnu.org>
parents: 5454
diff changeset
3148 (setq syms (cdr syms)))
2b3d2ea74ce1 (byte-compile-condition-case): Disable warning about
Richard M. Stallman <rms@gnu.org>
parents: 5454
diff changeset
3149 ok))))
3653
974055b516d9 * bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents: 3591
diff changeset
3150 (byte-compile-warn
5562
2b3d2ea74ce1 (byte-compile-condition-case): Disable warning about
Richard M. Stallman <rms@gnu.org>
parents: 5454
diff changeset
3151 "%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
3152 (prin1-to-string condition)))
5562
2b3d2ea74ce1 (byte-compile-condition-case): Disable warning about
Richard M. Stallman <rms@gnu.org>
parents: 5454
diff changeset
3153 ;; ((not (or (eq condition 't)
2b3d2ea74ce1 (byte-compile-condition-case): Disable warning about
Richard M. Stallman <rms@gnu.org>
parents: 5454
diff changeset
3154 ;; (and (stringp (get condition 'error-message))
2b3d2ea74ce1 (byte-compile-condition-case): Disable warning about
Richard M. Stallman <rms@gnu.org>
parents: 5454
diff changeset
3155 ;; (consp (get condition 'error-conditions)))))
2b3d2ea74ce1 (byte-compile-condition-case): Disable warning about
Richard M. Stallman <rms@gnu.org>
parents: 5454
diff changeset
3156 ;; (byte-compile-warn
28402
843e552813e3 Doc fixes.
Dave Love <fx@gnu.org>
parents: 28336
diff changeset
3157 ;; "%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
3158 ;; condition))
2b3d2ea74ce1 (byte-compile-condition-case): Disable warning about
Richard M. Stallman <rms@gnu.org>
parents: 5454
diff changeset
3159 )
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3160 (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
3161 (cons (cons condition
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3162 (byte-compile-top-level-body
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3163 (cdr clause) for-effect))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3164 compiled-clauses)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3165 (setq clauses (cdr clauses)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3166 (byte-compile-push-constant (nreverse compiled-clauses)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3167 (byte-compile-out 'byte-condition-case 0)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3168
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3169
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3170 (defun byte-compile-save-excursion (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3171 (byte-compile-out 'byte-save-excursion 0)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3172 (byte-compile-body-do-effect (cdr form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3173 (byte-compile-out 'byte-unbind 1))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3174
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3175 (defun byte-compile-save-restriction (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3176 (byte-compile-out 'byte-save-restriction 0)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3177 (byte-compile-body-do-effect (cdr form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3178 (byte-compile-out 'byte-unbind 1))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3179
16274
e9819849c533 (save-current-buffer): Compile it like save-excursion.
Richard M. Stallman <rms@gnu.org>
parents: 16232
diff changeset
3180 (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
3181 (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
3182 (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
3183 (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
3184
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3185 (defun byte-compile-save-window-excursion (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3186 (byte-compile-push-constant
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3187 (byte-compile-top-level-body (cdr form) for-effect))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3188 (byte-compile-out 'byte-save-window-excursion 0))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3189
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3190 (defun byte-compile-with-output-to-temp-buffer (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3191 (byte-compile-form (car (cdr form)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3192 (byte-compile-out 'byte-temp-output-buffer-setup 0)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3193 (byte-compile-body (cdr (cdr form)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3194 (byte-compile-out 'byte-temp-output-buffer-show 0))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3195
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3196
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3197 ;;; top-level forms elsewhere
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3198
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3199 (byte-defop-compiler-1 defun)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3200 (byte-defop-compiler-1 defmacro)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3201 (byte-defop-compiler-1 defvar)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3202 (byte-defop-compiler-1 defconst byte-compile-defvar)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3203 (byte-defop-compiler-1 autoload)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3204 (byte-defop-compiler-1 lambda byte-compile-lambda-form)
8086
9f6348616e4d (byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents: 7298
diff changeset
3205 (byte-defop-compiler-1 defalias)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3206
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3207 (defun byte-compile-defun (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3208 ;; This is not used for file-level defuns with doc strings.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3209 (byte-compile-two-args ; Use this to avoid byte-compile-fset's warning.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3210 (list 'fset (list 'quote (nth 1 form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3211 (byte-compile-byte-code-maker
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3212 (byte-compile-lambda (cons 'lambda (cdr (cdr form)))))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3213 (byte-compile-discard)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3214 (byte-compile-constant (nth 1 form)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3215
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3216 (defun byte-compile-defmacro (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3217 ;; This is not used for file-level defmacros with doc strings.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3218 (byte-compile-body-do-effect
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3219 (list (list 'fset (list 'quote (nth 1 form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3220 (let ((code (byte-compile-byte-code-maker
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3221 (byte-compile-lambda
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3222 (cons 'lambda (cdr (cdr form)))))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3223 (if (eq (car-safe code) 'make-byte-code)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3224 (list 'cons ''macro code)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3225 (list 'quote (cons 'macro (eval code))))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3226 (list 'quote (nth 1 form)))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3227
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3228 (defun byte-compile-defvar (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3229 ;; 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
3230 (let ((fun (nth 0 form))
02bf229fa2be (byte-compile-defvar-or-defconst): Only cons onto
Gerd Moellmann <gerd@gnu.org>
parents: 31552
diff changeset
3231 (var (nth 1 form))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3232 (value (nth 2 form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3233 (string (nth 3 form)))
31882
02bf229fa2be (byte-compile-defvar-or-defconst): Only cons onto
Gerd Moellmann <gerd@gnu.org>
parents: 31552
diff changeset
3234 (when (> (length form) 4)
02bf229fa2be (byte-compile-defvar-or-defconst): Only cons onto
Gerd Moellmann <gerd@gnu.org>
parents: 31552
diff changeset
3235 (byte-compile-warn
02bf229fa2be (byte-compile-defvar-or-defconst): Only cons onto
Gerd Moellmann <gerd@gnu.org>
parents: 31552
diff changeset
3236 "%s %s called with %d arguments, but accepts only %s"
02bf229fa2be (byte-compile-defvar-or-defconst): Only cons onto
Gerd Moellmann <gerd@gnu.org>
parents: 31552
diff changeset
3237 fun var (length (cdr form)) 3))
02bf229fa2be (byte-compile-defvar-or-defconst): Only cons onto
Gerd Moellmann <gerd@gnu.org>
parents: 31552
diff changeset
3238 (when (memq 'free-vars byte-compile-warnings)
02bf229fa2be (byte-compile-defvar-or-defconst): Only cons onto
Gerd Moellmann <gerd@gnu.org>
parents: 31552
diff changeset
3239 (setq byte-compile-bound-variables
02bf229fa2be (byte-compile-defvar-or-defconst): Only cons onto
Gerd Moellmann <gerd@gnu.org>
parents: 31552
diff changeset
3240 (cons var byte-compile-bound-variables)))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3241 (byte-compile-body-do-effect
31882
02bf229fa2be (byte-compile-defvar-or-defconst): Only cons onto
Gerd Moellmann <gerd@gnu.org>
parents: 31552
diff changeset
3242 (list
02bf229fa2be (byte-compile-defvar-or-defconst): Only cons onto
Gerd Moellmann <gerd@gnu.org>
parents: 31552
diff changeset
3243 ;; 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
3244 ;; just as a real defvar would, but only in top-level forms.
02bf229fa2be (byte-compile-defvar-or-defconst): Only cons onto
Gerd Moellmann <gerd@gnu.org>
parents: 31552
diff changeset
3245 (when (null byte-compile-current-form)
02bf229fa2be (byte-compile-defvar-or-defconst): Only cons onto
Gerd Moellmann <gerd@gnu.org>
parents: 31552
diff changeset
3246 `(push ',var current-load-list))
02bf229fa2be (byte-compile-defvar-or-defconst): Only cons onto
Gerd Moellmann <gerd@gnu.org>
parents: 31552
diff changeset
3247 (when (> (length form) 3)
02bf229fa2be (byte-compile-defvar-or-defconst): Only cons onto
Gerd Moellmann <gerd@gnu.org>
parents: 31552
diff changeset
3248 (when (and string (not (stringp string)))
02bf229fa2be (byte-compile-defvar-or-defconst): Only cons onto
Gerd Moellmann <gerd@gnu.org>
parents: 31552
diff changeset
3249 (byte-compile-warn "Third arg to %s %s is not a string: %s"
02bf229fa2be (byte-compile-defvar-or-defconst): Only cons onto
Gerd Moellmann <gerd@gnu.org>
parents: 31552
diff changeset
3250 fun var string))
02bf229fa2be (byte-compile-defvar-or-defconst): Only cons onto
Gerd Moellmann <gerd@gnu.org>
parents: 31552
diff changeset
3251 `(put ',var 'variable-documentation ,string))
02bf229fa2be (byte-compile-defvar-or-defconst): Only cons onto
Gerd Moellmann <gerd@gnu.org>
parents: 31552
diff changeset
3252 (if (cdr (cdr form)) ; `value' provided
02bf229fa2be (byte-compile-defvar-or-defconst): Only cons onto
Gerd Moellmann <gerd@gnu.org>
parents: 31552
diff changeset
3253 (if (eq fun 'defconst)
02bf229fa2be (byte-compile-defvar-or-defconst): Only cons onto
Gerd Moellmann <gerd@gnu.org>
parents: 31552
diff changeset
3254 ;; `defconst' sets `var' unconditionally.
02bf229fa2be (byte-compile-defvar-or-defconst): Only cons onto
Gerd Moellmann <gerd@gnu.org>
parents: 31552
diff changeset
3255 `(setq ,var ,value)
02bf229fa2be (byte-compile-defvar-or-defconst): Only cons onto
Gerd Moellmann <gerd@gnu.org>
parents: 31552
diff changeset
3256 ;; `defvar' sets `var' only when unbound.
02bf229fa2be (byte-compile-defvar-or-defconst): Only cons onto
Gerd Moellmann <gerd@gnu.org>
parents: 31552
diff changeset
3257 `(if (not (boundp ',var)) (setq ,var ,value))))
02bf229fa2be (byte-compile-defvar-or-defconst): Only cons onto
Gerd Moellmann <gerd@gnu.org>
parents: 31552
diff changeset
3258 `',var))))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3259
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3260 (defun byte-compile-autoload (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3261 (and (byte-compile-constp (nth 1 form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3262 (byte-compile-constp (nth 5 form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3263 (eval (nth 5 form)) ; macro-p
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3264 (not (fboundp (eval (nth 1 form))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3265 (byte-compile-warn
28402
843e552813e3 Doc fixes.
Dave Love <fx@gnu.org>
parents: 28336
diff changeset
3266 "The compiler ignores `autoload' except at top level. You should
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3267 probably put the autoload of the macro `%s' at top-level."
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3268 (eval (nth 1 form))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3269 (byte-compile-normal-call form))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3270
28402
843e552813e3 Doc fixes.
Dave Love <fx@gnu.org>
parents: 28336
diff changeset
3271 ;; Lambdas in valid places are handled as special cases by various code.
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3272 ;; The ones that remain are errors.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3273 (defun byte-compile-lambda-form (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3274 (error "`lambda' used as function name is invalid"))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3275
8086
9f6348616e4d (byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents: 7298
diff changeset
3276 ;; Compile normally, but deal with warnings for the function being defined.
9f6348616e4d (byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents: 7298
diff changeset
3277 (defun byte-compile-defalias (form)
9f6348616e4d (byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents: 7298
diff changeset
3278 (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
3279 (eq (car (nth 1 form)) 'quote)
9f6348616e4d (byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents: 7298
diff changeset
3280 (consp (cdr (nth 1 form)))
9f6348616e4d (byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents: 7298
diff changeset
3281 (symbolp (nth 1 (nth 1 form)))
9f6348616e4d (byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents: 7298
diff changeset
3282 (consp (nthcdr 2 form))
9f6348616e4d (byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents: 7298
diff changeset
3283 (consp (nth 2 form))
9f6348616e4d (byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents: 7298
diff changeset
3284 (eq (car (nth 2 form)) 'quote)
9f6348616e4d (byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents: 7298
diff changeset
3285 (consp (cdr (nth 2 form)))
9f6348616e4d (byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents: 7298
diff changeset
3286 (symbolp (nth 1 (nth 2 form))))
9f6348616e4d (byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents: 7298
diff changeset
3287 (progn
9f6348616e4d (byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents: 7298
diff changeset
3288 (byte-compile-defalias-warn (nth 1 (nth 1 form))
9f6348616e4d (byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents: 7298
diff changeset
3289 (nth 1 (nth 2 form)))
9f6348616e4d (byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents: 7298
diff changeset
3290 (setq byte-compile-function-environment
9f6348616e4d (byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents: 7298
diff changeset
3291 (cons (cons (nth 1 (nth 1 form))
9f6348616e4d (byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents: 7298
diff changeset
3292 (nth 1 (nth 2 form)))
9f6348616e4d (byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents: 7298
diff changeset
3293 byte-compile-function-environment))))
8115
e45d541e55cf (byte-compile-defalias): Fix typo in prev change.
Richard M. Stallman <rms@gnu.org>
parents: 8086
diff changeset
3294 (byte-compile-normal-call form))
8086
9f6348616e4d (byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents: 7298
diff changeset
3295
9f6348616e4d (byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents: 7298
diff changeset
3296 ;; 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
3297 ;; 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
3298 ;; the function it is being aliased to.
9f6348616e4d (byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents: 7298
diff changeset
3299 (defun byte-compile-defalias-warn (new alias)
9f6348616e4d (byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents: 7298
diff changeset
3300 (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
3301 (if calls
9f6348616e4d (byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents: 7298
diff changeset
3302 (setq byte-compile-unresolved-functions
9f6348616e4d (byte-compile-callargs-warn): Handle function defnition
Richard M. Stallman <rms@gnu.org>
parents: 7298
diff changeset
3303 (delq calls byte-compile-unresolved-functions)))))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3304
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3305 ;;; tags
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3306
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3307 ;; Note: Most operations will strip off the 'TAG, but it speeds up
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3308 ;; optimization to have the 'TAG as a part of the tag.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3309 ;; Tags will be (TAG . (tag-number . stack-depth)).
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3310 (defun byte-compile-make-tag ()
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3311 (list 'TAG (setq byte-compile-tag-number (1+ byte-compile-tag-number))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3312
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3313
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3314 (defun byte-compile-out-tag (tag)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3315 (setq byte-compile-output (cons tag byte-compile-output))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3316 (if (cdr (cdr tag))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3317 (progn
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3318 ;; ## remove this someday
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3319 (and byte-compile-depth
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3320 (not (= (cdr (cdr tag)) byte-compile-depth))
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3321 (error "Compiler bug: depth conflict at tag %d" (car (cdr tag))))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3322 (setq byte-compile-depth (cdr (cdr tag))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3323 (setcdr (cdr tag) byte-compile-depth)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3324
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3325 (defun byte-compile-goto (opcode tag)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3326 (setq byte-compile-output (cons (cons opcode tag) byte-compile-output))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3327 (setcdr (cdr tag) (if (memq opcode byte-goto-always-pop-ops)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3328 (1- byte-compile-depth)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3329 byte-compile-depth))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3330 (setq byte-compile-depth (and (not (eq opcode 'byte-goto))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3331 (1- byte-compile-depth))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3332
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3333 (defun byte-compile-out (opcode offset)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3334 (setq byte-compile-output (cons (cons opcode offset) byte-compile-output))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3335 (cond ((eq opcode 'byte-call)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3336 (setq byte-compile-depth (- byte-compile-depth offset)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3337 ((eq opcode 'byte-return)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3338 ;; This is actually an unnecessary case, because there should be
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3339 ;; no more opcodes behind byte-return.
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3340 (setq byte-compile-depth nil))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3341 (t
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3342 (setq byte-compile-depth (+ byte-compile-depth
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3343 (or (aref byte-stack+-info
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3344 (symbol-value opcode))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3345 (- (1- offset))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3346 byte-compile-maxdepth (max byte-compile-depth
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3347 byte-compile-maxdepth))))
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3348 ;;(if (< byte-compile-depth 0) (error "Compiler error: stack underflow"))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3349 )
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3350
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3351
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3352 ;;; call tree stuff
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3353
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3354 (defun byte-compile-annotate-call-tree (form)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3355 (let (entry)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3356 ;; annotate the current call
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3357 (if (setq entry (assq (car form) byte-compile-call-tree))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3358 (or (memq byte-compile-current-form (nth 1 entry)) ;callers
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3359 (setcar (cdr entry)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3360 (cons byte-compile-current-form (nth 1 entry))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3361 (setq byte-compile-call-tree
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3362 (cons (list (car form) (list byte-compile-current-form) nil)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3363 byte-compile-call-tree)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3364 ;; annotate the current function
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3365 (if (setq entry (assq byte-compile-current-form byte-compile-call-tree))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3366 (or (memq (car form) (nth 2 entry)) ;called
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3367 (setcar (cdr (cdr entry))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3368 (cons (car form) (nth 2 entry))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3369 (setq byte-compile-call-tree
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3370 (cons (list byte-compile-current-form nil (list (car form)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3371 byte-compile-call-tree)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3372 ))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3373
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3374 ;; Renamed from byte-compile-report-call-tree
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3375 ;; to avoid interfering with completion of byte-compile-file.
819
5bbabfcef929 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 784
diff changeset
3376 ;;;###autoload
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3377 (defun display-call-tree (&optional filename)
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3378 "Display a call graph of a specified file.
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3379 This lists which functions have been called, what functions called
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3380 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
3381 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
3382 all functions called by those functions.
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3383
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3384 The call graph does not include macros, inline functions, or
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3385 primitives that the byte-code interpreter knows about directly \(eq,
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3386 cons, etc.\).
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3387
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3388 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
3389 \(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
3390 invoked interactively."
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3391 (interactive)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3392 (message "Generating call tree...")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3393 (with-output-to-temp-buffer "*Call-Tree*"
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3394 (set-buffer "*Call-Tree*")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3395 (erase-buffer)
10687
1bd70186f894 (byte-compile-file-form-defmumble, display-call-tree): Print ellipsis earlier,
Karl Heuer <kwzh@gnu.org>
parents: 10514
diff changeset
3396 (message "Generating call tree... (sorting on %s)"
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3397 byte-compile-call-tree-sort)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3398 (insert "Call tree for "
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3399 (cond ((null byte-compile-current-file) (or filename "???"))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3400 ((stringp byte-compile-current-file)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3401 byte-compile-current-file)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3402 (t (buffer-name byte-compile-current-file)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3403 " sorted on "
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3404 (prin1-to-string byte-compile-call-tree-sort)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3405 ":\n\n")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3406 (if byte-compile-call-tree-sort
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3407 (setq byte-compile-call-tree
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3408 (sort byte-compile-call-tree
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3409 (cond ((eq byte-compile-call-tree-sort 'callers)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3410 (function (lambda (x y) (< (length (nth 1 x))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3411 (length (nth 1 y))))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3412 ((eq byte-compile-call-tree-sort 'calls)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3413 (function (lambda (x y) (< (length (nth 2 x))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3414 (length (nth 2 y))))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3415 ((eq byte-compile-call-tree-sort 'calls+callers)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3416 (function (lambda (x y) (< (+ (length (nth 1 x))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3417 (length (nth 2 x)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3418 (+ (length (nth 1 y))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3419 (length (nth 2 y)))))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3420 ((eq byte-compile-call-tree-sort 'name)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3421 (function (lambda (x y) (string< (car x)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3422 (car y)))))
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3423 (t (error "`byte-compile-call-tree-sort': `%s' - unknown sort mode"
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3424 byte-compile-call-tree-sort))))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3425 (message "Generating call tree...")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3426 (let ((rest byte-compile-call-tree)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3427 (b (current-buffer))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3428 f p
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3429 callers calls)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3430 (while rest
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3431 (prin1 (car (car rest)) b)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3432 (setq callers (nth 1 (car rest))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3433 calls (nth 2 (car rest)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3434 (insert "\t"
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3435 (cond ((not (fboundp (setq f (car (car rest)))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3436 (if (null f)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3437 " <top level>";; shouldn't insert nil then, actually -sk
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3438 " <not defined>"))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3439 ((subrp (setq f (symbol-function f)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3440 " <subr>")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3441 ((symbolp f)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3442 (format " ==> %s" f))
1819
df06a60f3362 * disass.el (disassemble): Add autoload cookie for this.
Jim Blandy <jimb@redhat.com>
parents: 1604
diff changeset
3443 ((byte-code-function-p f)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3444 "<compiled function>")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3445 ((not (consp f))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3446 "<malformed function>")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3447 ((eq 'macro (car f))
1819
df06a60f3362 * disass.el (disassemble): Add autoload cookie for this.
Jim Blandy <jimb@redhat.com>
parents: 1604
diff changeset
3448 (if (or (byte-code-function-p (cdr f))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3449 (assq 'byte-code (cdr (cdr (cdr f)))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3450 " <compiled macro>"
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3451 " <macro>"))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3452 ((assq 'byte-code (cdr (cdr f)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3453 "<compiled lambda>")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3454 ((eq 'lambda (car f))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3455 "<function>")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3456 (t "???"))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3457 (format " (%d callers + %d calls = %d)"
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3458 ;; Does the optimizer eliminate common subexpressions?-sk
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3459 (length callers)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3460 (length calls)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3461 (+ (length callers) (length calls)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3462 "\n")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3463 (if callers
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3464 (progn
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3465 (insert " called by:\n")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3466 (setq p (point))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3467 (insert " " (if (car callers)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3468 (mapconcat 'symbol-name callers ", ")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3469 "<top level>"))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3470 (let ((fill-prefix " "))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3471 (fill-region-as-paragraph p (point)))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3472 (if calls
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3473 (progn
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3474 (insert " calls:\n")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3475 (setq p (point))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3476 (insert " " (mapconcat 'symbol-name calls ", "))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3477 (let ((fill-prefix " "))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3478 (fill-region-as-paragraph p (point)))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3479 (insert "\n")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3480 (setq rest (cdr rest)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3481
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3482 (message "Generating call tree...(finding uncalled functions...)")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3483 (setq rest byte-compile-call-tree)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3484 (let ((uncalled nil))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3485 (while rest
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3486 (or (nth 1 (car rest))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3487 (null (setq f (car (car rest))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3488 (byte-compile-fdefinition f t)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3489 (commandp (byte-compile-fdefinition f nil))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3490 (setq uncalled (cons f uncalled)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3491 (setq rest (cdr rest)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3492 (if uncalled
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3493 (let ((fill-prefix " "))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3494 (insert "Noninteractive functions not known to be called:\n ")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3495 (setq p (point))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3496 (insert (mapconcat 'symbol-name (nreverse uncalled) ", "))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3497 (fill-region-as-paragraph p (point)))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3498 )
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3499 (message "Generating call tree...done.")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3500 ))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3501
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3502
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3503 ;;; by crl@newton.purdue.edu
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3504 ;;; Only works noninteractively.
819
5bbabfcef929 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 784
diff changeset
3505 ;;;###autoload
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3506 (defun batch-byte-compile ()
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3507 "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
3508 Use this from the command line, with `-batch';
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3509 it won't work in an interactive Emacs.
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3510 Each file is processed even if an error occurred previously.
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3511 For example, invoke \"emacs -batch -f batch-byte-compile $emacs/ ~/*.el\""
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3512 ;; command-line-args-left is what is left of the command line (from startup.el)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3513 (defvar command-line-args-left) ;Avoid 'free variable' warning
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3514 (if (not noninteractive)
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3515 (error "`batch-byte-compile' is to be used only with -batch"))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3516 (let ((error nil))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3517 (while command-line-args-left
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3518 (if (file-directory-p (expand-file-name (car command-line-args-left)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3519 (let ((files (directory-files (car command-line-args-left)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3520 source dest)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3521 (while files
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3522 (if (and (string-match emacs-lisp-file-regexp (car files))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3523 (not (auto-save-file-name-p (car files)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3524 (setq source (expand-file-name (car files)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3525 (car command-line-args-left)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3526 (setq dest (byte-compile-dest-file source))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3527 (file-exists-p dest)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3528 (file-newer-than-file-p source dest))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3529 (if (null (batch-byte-compile-file source))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3530 (setq error t)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3531 (setq files (cdr files))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3532 (if (null (batch-byte-compile-file (car command-line-args-left)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3533 (setq error t)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3534 (setq command-line-args-left (cdr command-line-args-left)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3535 (message "Done")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3536 (kill-emacs (if error 1 0))))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3537
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3538 (defun batch-byte-compile-file (file)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3539 (condition-case err
18391
1ff0bfd40508 (byte-compile-file): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 18266
diff changeset
3540 (byte-compile-file file)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3541 (error
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3542 (message (if (cdr err)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3543 ">>Error occurred processing %s: %s (%s)"
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3544 ">>Error occurred processing %s: %s")
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3545 file
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3546 (get (car err) 'error-message)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3547 (prin1-to-string (cdr err)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3548 nil)))
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3549
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
3550 ;;;###autoload
3653
974055b516d9 * bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents: 3591
diff changeset
3551 (defun batch-byte-recompile-directory ()
974055b516d9 * bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents: 3591
diff changeset
3552 "Runs `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
3553 Must be used only with `-batch', and kills Emacs on completion.
37a8a7489fc5 (byte-compile-file): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 3653
diff changeset
3554 For example, invoke `emacs -batch -f batch-byte-recompile-directory .'."
3653
974055b516d9 * bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents: 3591
diff changeset
3555 ;; 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
3556 (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
3557 (if (not noninteractive)
974055b516d9 * bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents: 3591
diff changeset
3558 (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
3559 (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
3560 (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
3561 (while 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
3562 (byte-recompile-directory (car 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
3563 (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
3564 (kill-emacs 0))
974055b516d9 * bytecomp.el: Bring it up to version 2.10 of the
Jim Blandy <jimb@redhat.com>
parents: 3591
diff changeset
3565
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3566
29352
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
3567 (make-obsolete 'dot 'point "before 19.15")
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
3568 (make-obsolete 'dot-max 'point-max "before 19.15")
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
3569 (make-obsolete 'dot-min 'point-min "before 19.15")
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
3570 (make-obsolete 'dot-marker 'point-marker "before 19.15")
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
3571
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
3572 (make-obsolete 'buffer-flush-undo 'buffer-disable-undo "before 19.15")
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
3573 (make-obsolete 'baud-rate "use the baud-rate variable instead" "before 19.15")
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
3574 (make-obsolete 'compiled-function-p 'byte-code-function-p "before 19.15")
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
3575 (make-obsolete 'define-function 'defalias "20.1")
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
3576 (make-obsolete-variable 'auto-fill-hook 'auto-fill-function "before 19.15")
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
3577 (make-obsolete-variable 'blink-paren-hook 'blink-paren-function "before 19.15")
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
3578 (make-obsolete-variable 'lisp-indent-hook 'lisp-indent-function "before 19.15")
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 938
diff changeset
3579 (make-obsolete-variable 'inhibit-local-variables
29352
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
3580 "use enable-local-variables (with the reversed sense)."
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
3581 "before 19.15")
1604
25173c1db5a6 * bytecomp.el: Declare unread-command-char an obsolete variable.
Jim Blandy <jimb@redhat.com>
parents: 1532
diff changeset
3582 (make-obsolete-variable 'unread-command-char
29352
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
3583 "use unread-command-events instead. That variable is a list of events to reread, so it now uses nil to mean `no event', instead of -1."
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
3584 "before 19.15")
1819
df06a60f3362 * disass.el (disassemble): Add autoload cookie for this.
Jim Blandy <jimb@redhat.com>
parents: 1604
diff changeset
3585 (make-obsolete-variable 'unread-command-event
29352
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
3586 "use unread-command-events; which is a list of events rather than a single event."
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
3587 "before 19.15")
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
3588 (make-obsolete-variable 'suspend-hooks 'suspend-hook "before 19.15")
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
3589 (make-obsolete-variable 'comment-indent-hook 'comment-indent-function "before 19.15")
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
3590 (make-obsolete-variable 'meta-flag "Use the set-input-mode function instead." "before 19.34")
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
3591 (make-obsolete-variable 'executing-macro 'executing-kbd-macro "before 19.34")
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
3592 (make-obsolete-variable 'before-change-function
29352
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
3593 "use before-change-functions; which is a list of functions rather than a single function."
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
3594 "before 19.34")
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
3595 (make-obsolete-variable 'after-change-function
29352
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
3596 "use after-change-functions; which is a list of functions rather than a single function."
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
3597 "before 19.34")
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
3598 (make-obsolete-variable 'font-lock-doc-string-face 'font-lock-string-face "before 19.34")
14766
aaaef422311b (post-command-idle-hook, post-command-idle-delay): Mark obsolete.
Richard M. Stallman <rms@gnu.org>
parents: 14412
diff changeset
3599 (make-obsolete-variable 'post-command-idle-hook
29352
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
3600 "use timers instead, with `run-with-idle-timer'." "before 19.34")
14766
aaaef422311b (post-command-idle-hook, post-command-idle-delay): Mark obsolete.
Richard M. Stallman <rms@gnu.org>
parents: 14412
diff changeset
3601 (make-obsolete-variable 'post-command-idle-delay
29352
fa490904bee0 * byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29239
diff changeset
3602 "use timers instead, with `run-with-idle-timer'." "before 19.34")
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3603
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3604 (provide 'byte-compile)
5341
2f4fab6070b8 Provide bytecomp as well as byte-compile.
Richard M. Stallman <rms@gnu.org>
parents: 5283
diff changeset
3605 (provide 'bytecomp)
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3606
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3607
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3608 ;;; report metering (see the hacks in bytecode.c)
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3609
784
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3610 (defun byte-compile-report-ops ()
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3611 (defvar byte-code-meter)
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3612 (with-output-to-temp-buffer "*Meter*"
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3613 (set-buffer "*Meter*")
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3614 (let ((i 0) n op off)
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3615 (while (< i 256)
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3616 (setq n (aref (aref byte-code-meter 0) i)
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3617 off nil)
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3618 (if t ;(not (zerop n))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3619 (progn
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3620 (setq op i)
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3621 (setq off nil)
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3622 (cond ((< op byte-nth)
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3623 (setq off (logand op 7))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3624 (setq op (logand op 248)))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3625 ((>= op byte-constant)
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3626 (setq off (- op byte-constant)
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3627 op byte-constant)))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3628 (setq op (aref byte-code-vector op))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3629 (insert (format "%-4d" i))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3630 (insert (symbol-name op))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3631 (if off (insert " [" (int-to-string off) "]"))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3632 (indent-to 40)
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3633 (insert (int-to-string n) "\n")))
6d993c174c62 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 757
diff changeset
3634 (setq i (1+ i))))))
757
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3635
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3636 ;; To avoid "lisp nesting exceeds max-lisp-eval-depth" when bytecomp compiles
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3637 ;; itself, compile some of its most used recursive functions (at load time).
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3638 ;;
745b7fc3a3d3 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3639 (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
3640 (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
3641 (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
3642 (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
3643 (byte-compile-warnings nil))
37909
3d650ae7e609 (byte-compile-file-form-autoload): Use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35145
diff changeset
3644 (mapcar (lambda (x)
3d650ae7e609 (byte-compile-file-form-autoload): Use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35145
diff changeset
3645 (or noninteractive (message "compiling %s..." x))
3d650ae7e609 (byte-compile-file-form-autoload): Use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35145
diff changeset
3646 (byte-compile x)
3d650ae7e609 (byte-compile-file-form-autoload): Use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35145
diff changeset
3647 (or noninteractive (message "compiling %s...done" x)))
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
3648 '(byte-compile-normal-call
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
3649 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
3650 byte-compile-body
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
3651 ;; Inserted some more than necessary, to speed it up.
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
3652 byte-compile-top-level
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
3653 byte-compile-out-toplevel
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
3654 byte-compile-constant
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
3655 byte-compile-variable-ref))))
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
3656 nil)
819
5bbabfcef929 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 784
diff changeset
3657
27584
2f7978218574 Run bytecomp-load-hook.
Dave Love <fx@gnu.org>
parents: 27230
diff changeset
3658 (run-hooks 'bytecomp-load-hook)
2f7978218574 Run bytecomp-load-hook.
Dave Love <fx@gnu.org>
parents: 27230
diff changeset
3659
819
5bbabfcef929 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 784
diff changeset
3660 ;;; bytecomp.el ends here