Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
7
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
emacs
emacs
Commits
e27c3564
Commit
e27c3564
authored
Jun 11, 1993
by
Jim Blandy
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* bytecomp.el: Bring it up to version 2.10 of the
Zawinski-Furuseth compiler. Changes from David Gillespie.
parent
30c5ce9c
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
82 additions
and
33 deletions
+82
-33
lisp/emacs-lisp/bytecomp.el
lisp/emacs-lisp/bytecomp.el
+82
-33
No files found.
lisp/emacs-lisp/bytecomp.el
View file @
e27c3564
...
...
@@ -8,9 +8,9 @@
;; Subsequently modified by RMS.
;;; This version incorporates changes up to version 2.0
8
of the
;;; This version incorporates changes up to version 2.
1
0 of the
;;; Zawinski-Furuseth compiler.
(
defconst
byte-compile-version
"FSF 2.0
8
"
)
(
defconst
byte-compile-version
"FSF 2.
1
0"
)
;; This file is part of GNU Emacs.
...
...
@@ -38,8 +38,9 @@
;;; ========================================================================
;;; Entry points:
;;; byte-recompile-directory, byte-compile-file, batch-byte-compile,
;;; byte-compile, compile-defun
;;; byte-recompile-directory, byte-compile-file,
;;; batch-byte-compile, batch-byte-recompile-directory,
;;; byte-compile, compile-defun,
;;; display-call-tree
;;; (byte-compile-buffer and byte-compile-and-load-file were turned off
;;; because they are not terribly useful and get in the way of completion.)
...
...
@@ -101,16 +102,8 @@
;;; byte-compile-compatibility Whether the compiler should
;;; generate .elc files which can be loaded into
;;; generic emacs 18.
;;; byte-compile-single-version Normally the byte-compiler will consult the
;;; above two variables at runtime, but if this
;;; is true before the compiler itself is loaded/
;;; compiled, then the runtime checks will not be
;;; made, and compilation will be slightly faster.
;;; To use this, start up a fresh emacs, set this
;;; to t, reload the compiler's .el files, and
;;; recompile. Don't do this in an emacs that has
;;; already had the compiler loaded.
;;; byte-compile-overwrite-file If nil, delete old .elc files before saving.
;;; emacs-lisp-file-regexp Regexp for the extension of elisp source-files;
;;; see also the function byte-compile-dest-file.
;;; New Features:
;;;
...
...
@@ -151,12 +144,20 @@
;;; the whole form is evalled both at compile-time and at run-time.
;;;
;;; o The command Meta-X byte-compile-and-load-file does what you'd think.
;;; (This command has been discontinued.)
;;;
;;; o The command compile-defun is analogous to eval-defun.
;;;
;;; o If you run byte-compile-file on a filename which is visited in a
;;; buffer, and that buffer is modified, you are asked whether you want
;;; to save the buffer before compiling.
;;;
;;; o You can add this to /etc/magic to make file(1) recognise the files
;;; generated by this compiler:
;;;
;;; 0 string ;ELC GNU Emacs Lisp compiled file,
;;; >4 byte x version %d
;;;
(
require
'backquote
)
...
...
@@ -203,13 +204,15 @@
You may want to redefine `byte-compile-dest-file' if you change this."
)
(
or
(
fboundp
'byte-compile-dest-file
)
;; The user may want to redefine this,
;; The user may want to redefine this
along with emacs-lisp-file-regexp
,
;; so only define it if it is undefined.
(
defun
byte-compile-dest-file
(
filename
)
"Convert an Emacs Lisp source file name to a compiled file name."
(
setq
filename
(
file-name-sans-versions
filename
))
(
cond
((
eq
system-type
'vax-vms
)
(
concat
(
substring
filename
0
(
string-match
";"
filename
))
"c"
))
((
string-match
emacs-lisp-file-regexp
filename
)
(
concat
(
substring
filename
0
(
match-beginning
0
))
".elc"
))
(
t
(
concat
filename
"c"
)))))
;; This can be the 'byte-compile property of any symbol.
...
...
@@ -339,7 +342,7 @@ expanded by the compiler as when expanded by the interpreter.")
(
defvar
byte-compile-macro-environment
byte-compile-initial-macro-environment
"Alist of macros defined in the file being compiled.
Each element looks like (MACRONAME . DEFINITION). It is
\(MACRONAME . nil) when a
function
is redefined as a function."
)
\(MACRONAME . nil) when a
macro
is redefined as a function."
)
(
defvar
byte-compile-function-environment
nil
"Alist of functions defined in the file being compiled.
...
...
@@ -1067,8 +1070,10 @@ don't ask and compile the file anyway."
(
interactive
"DByte recompile directory: \nP"
)
(
if
arg
(
setq
arg
(
prefix-numeric-value
arg
)))
(
save-some-buffers
)
(
set-buffer-modified-p
(
buffer-modified-p
))
;Update the mode line.
(
if
noninteractive
nil
(
save-some-buffers
)
(
set-buffer-modified-p
(
buffer-modified-p
)))
;Update the mode line.
(
let
((
directories
(
list
(
expand-file-name
directory
)))
(
file-count
0
)
(
dir-count
0
)
...
...
@@ -1076,7 +1081,7 @@ don't ask and compile the file anyway."
(
displaying-byte-compile-warnings
(
while
directories
(
setq
directory
(
car
directories
))
(
message
"Checking %s..."
directory
)
(
or
noninteractive
(
message
"Checking %s..."
directory
)
)
(
let
((
files
(
directory-files
directory
))
source
dest
)
(
while
files
...
...
@@ -1096,7 +1101,9 @@ don't ask and compile the file anyway."
(
and
arg
(
or
(
eq
0
arg
)
(
y-or-n-p
(
concat
"Compile "
source
"? "
))))))
(
progn
(
byte-compile-file
source
)
(
progn
(
if
(
and
noninteractive
(
not
byte-compile-verbose
))
(
message
"Compiling %s..."
source
))
(
byte-compile-file
source
)
(
setq
file-count
(
1+
file-count
))
(
if
(
not
(
eq
last-dir
directory
))
(
setq
last-dir
directory
...
...
@@ -1126,7 +1133,7 @@ With prefix arg (noninteractively: 2nd arg), load the file after compiling."
(
list
(
read-file-name
(
if
current-prefix-arg
"Byte compile and load file: "
"Byte compile file: "
)
file-dir
file-name
nil
)
file-dir
nil
nil
file-name
)
current-prefix-arg
)))
;; Expand now so we get the current buffer's defaults
(
setq
filename
(
expand-file-name
filename
))
...
...
@@ -1309,6 +1316,22 @@ With argument, insert value in current buffer after the form."
(
save-excursion
(
set-buffer
outbuffer
)
(
goto-char
1
)
;;
;; The magic number of .elc files is ";ELC", or 0x3B454C43. After that is
;; the file-format version number (18 or 19) as a byte, followed by some
;; nulls. The primary motivation for doing this is to get some binary
;; characters up in the first line of the file so that `diff' will simply
;; say "Binary files differ" instead of actually doing a diff of two .elc
;; files. An extra benefit is that you can add this to /etc/magic:
;;
;; 0 string ;ELC GNU Emacs Lisp compiled file,
;; >4 byte x version %d
;;
(
insert
";ELC"
(
if
(
byte-compile-version-cond
byte-compile-compatibility
)
18
19
)
"\000\000\000\n"
)
(
insert
";;; compiled by "
(
user-login-name
)
"@"
(
system-name
)
" on "
(
current-time-string
)
"\n;;; from file "
filename
"\n"
)
(
insert
";;; emacs version "
emacs-version
".\n"
)
...
...
@@ -1893,8 +1916,8 @@ If FORM is a lambda or a macro, byte-compile it as a function."
(
if
(
memq
fn
'
(
t
nil
))
(
byte-compile-warn
"%s called as a function"
fn
))
(
if
(
and
handler
(
or
(
byte-compile-version-cond
byte-compile-compatibility
)
(
or
(
not
(
byte-compile-version-cond
byte-compile-compatibility
)
)
(
not
(
get
(
get
fn
'byte-opcode
)
'emacs19-opcode
))))
(
funcall
handler
form
)
(
if
(
memq
'callargs
byte-compile-warnings
)
...
...
@@ -2015,9 +2038,9 @@ If FORM is a lambda or a macro, byte-compile it as a function."
(
defmacro
byte-defop-compiler19
(
function
&optional
compile-handler
)
;; Just like byte-defop-compiler, but defines an opcode that will only
;; be used when byte-compile-compatibility is
tru
e.
;; be used when byte-compile-compatibility is
fals
e.
(
if
(
and
(
byte-compile-single-version
)
(
not
byte-compile-compatibility
)
)
byte-compile-compatibility
)
;; #### instead of doing nothing, this should do some remprops,
;; #### to protect against the case where a single-version compiler
;; #### is loaded into a world that has contained a multi-version one.
...
...
@@ -2234,8 +2257,8 @@ If FORM is a lambda or a macro, byte-compile it as a function."
(
mapcar
'byte-compile-form
(
cdr
form
))
(
byte-compile-out
(
aref
[byte-list1
byte-list2
byte-list3
byte-list4]
(
1-
count
))
0
))
((
and
(
<
count
256
)
(
byte-compile-version-cond
byte-compile-compatibility
))
((
and
(
<
count
256
)
(
not
(
byte-compile-version-cond
byte-compile-compatibility
))
)
(
mapcar
'byte-compile-form
(
cdr
form
))
(
byte-compile-out
'byte-listN
count
))
(
t
(
byte-compile-normal-call
form
)))))
...
...
@@ -2250,8 +2273,8 @@ If FORM is a lambda or a macro, byte-compile it as a function."
;; Concat of one arg is not a no-op if arg is not a string.
((
=
count
0
)
(
byte-compile-form
""
))
((
and
(
<
count
256
)
(
byte-compile-version-cond
byte-compile-compatibility
))
((
and
(
<
count
256
)
(
not
(
byte-compile-version-cond
byte-compile-compatibility
))
)
(
mapcar
'byte-compile-form
(
cdr
form
))
(
byte-compile-out
'byte-concatN
count
))
((
byte-compile-normal-call
form
)))))
...
...
@@ -2350,8 +2373,8 @@ If FORM is a lambda or a macro, byte-compile it as a function."
(
defun
byte-compile-insert
(
form
)
(
cond
((
null
(
cdr
form
))
(
byte-compile-constant
nil
))
((
and
(
byte-compile-version-cond
byte-compile-compatibility
)
((
and
(
not
(
byte-compile-version-cond
byte-compile-compatibility
)
)
(
<=
(
length
form
)
256
))
(
mapcar
'byte-compile-form
(
cdr
form
))
(
if
(
cdr
(
cdr
form
))
...
...
@@ -2649,9 +2672,20 @@ If FORM is a lambda or a macro, byte-compile it as a function."
(
let
((
clauses
(
cdr
(
cdr
(
cdr
form
))))
compiled-clauses
)
(
while
clauses
(
let
((
clause
(
car
clauses
)))
(
let*
((
clause
(
car
clauses
))
(
condition
(
car
clause
)))
(
cond
((
not
(
symbolp
condition
))
(
byte-compile-warn
"%s is not a symbol naming a condition (in condition-case)"
(
prin1-to-string
condition
)))
((
not
(
or
(
eq
condition
't
)
(
and
(
stringp
(
get
condition
'error-message
))
(
consp
(
get
condition
'error-conditions
)))))
(
byte-compile-warn
"%s is not a known condition name (in condition-case)"
condition
)))
(
setq
compiled-clauses
(
cons
(
cons
(
car
clause
)
(
cons
(
cons
condition
(
byte-compile-top-level-body
(
cdr
clause
)
for-effect
))
compiled-clauses
)))
...
...
@@ -2992,6 +3026,21 @@ For example, invoke \"emacs -batch -f batch-byte-compile $emacs/ ~/*.el\""
(
prin1-to-string
(
cdr
err
)))
nil
)))
(
defun
batch-byte-recompile-directory
()
"Runs `byte-recompile-directory' on the dirs remaining on the command line.
Must be used only with -batch, and kills emacs on completion.
For example, invoke \"emacs -batch -f batch-byte-recompile-directory .\""
;; command-line-args-left is what is left of the command line (startup.el)
(
defvar
command-line-args-left
)
;Avoid 'free variable' warning
(
if
(
not
noninteractive
)
(
error
"batch-byte-recompile-directory is to be used only with -batch"
))
(
or
command-line-args-left
(
setq
command-line-args-left
'
(
"."
)))
(
while
command-line-args-left
(
byte-recompile-directory
(
car
command-line-args-left
))
(
setq
command-line-args-left
(
cdr
command-line-args-left
)))
(
kill-emacs
0
))
(
make-obsolete
'mod
'%
)
(
make-obsolete
'dot
'point
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment