summaryrefslogtreecommitdiff
path: root/lisp/byte-run.el
diff options
context:
space:
mode:
authorEric S. Raymond <esr@snark.thyrsus.com>1992-07-17 08:15:29 +0000
committerEric S. Raymond <esr@snark.thyrsus.com>1992-07-17 08:15:29 +0000
commit08a975bd754a275912e0c06f281b823da1eac005 (patch)
tree606bab6e837e5b2866ea373ca18df470c857eff5 /lisp/byte-run.el
parentbddb4019090ccfe76b4d561485cd871ab52c6331 (diff)
downloademacs-08a975bd754a275912e0c06f281b823da1eac005.tar.gz
*** empty log message ***
Diffstat (limited to 'lisp/byte-run.el')
-rw-r--r--lisp/byte-run.el192
1 files changed, 83 insertions, 109 deletions
diff --git a/lisp/byte-run.el b/lisp/byte-run.el
index 05063058b1e..785a89b977d 100644
--- a/lisp/byte-run.el
+++ b/lisp/byte-run.el
@@ -1,29 +1,17 @@
-;;; -*- Mode:Emacs-Lisp -*-
-
-;; Runtime support for the new optimizing byte compiler.
-;; By Jamie Zawinski <jwz@lucid.com>.
-;; Last Modified: 27-jul-91.
-;;
-;; The code in this file should always be loaded, because it defines things
-;; like "defsubst" which should work interpreted as well. The code in
-;; bytecomp.el and byte-optimize.el can be loaded as needed.
-;;
-;; This should be loaded by loadup.el or startup.el. If you can't modify
-;; those files, load this from your .emacs file. But if you are using
-;; emacs18, this file must be loaded before any .elc files which were
-;; generated by the new compiler without emacs18 compatibility turned on.
-;; If this file is loaded, certain emacs19 binaries will run in emacs18.
-;; Meditate on the meanings of byte-compile-generate-emacs19-bytecodes and
-;; byte-compile-emacs18-compatibility.
-
-
-;; Copyright (C) 1985, 1986, 1987 Free Software Foundation, Inc.
+;; byte-run.el --- byte-compiler support for inlining
+
+;; Author: Jamie Zawinski <jwz@lucid.com>
+;; Hallvard Furuseth <hbf@ulrik.uio.no>
+;; Last-Modified: 13 Jul 1992
+;; Keywords: internal
+
+;; Copyright (C) 1992 Free Software Foundation, Inc.
;; This file is part of GNU Emacs.
;; GNU Emacs is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 1, or (at your option)
+;; the Free Software Foundation; either version 2, or (at your option)
;; any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
@@ -35,81 +23,62 @@
;; along with GNU Emacs; see the file COPYING. If not, write to
;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
-
-;; emacs-18 compatibility.
-
-(if (fboundp 'make-byte-code)
- nil
- ;;
- ;; To avoid compiler bootstrapping problems, this temporary uncompiled
- ;; make-byte-code is needed to load the compiled one. Ignore the warnings.
- (fset 'make-byte-code
- '(lambda (arglist bytestring constants stackdepth doc)
- (list 'lambda arglist doc
- (list 'byte-code bytestring constants stackdepth))))
- ;;
- ;; Now get a compiled version.
- (defun make-byte-code (arglist bytestring constants stackdepth
- &optional doc &rest interactive)
- "For compatibility with Emacs19 ``.elc'' files."
- (nconc (list 'lambda arglist)
- ;; #### Removed the (stringp doc) for speed. Because the V19
- ;; make-byte-code depends on the args being correct, it won't
- ;; help to make a smarter version for V18 alone.
- ;; Btw, it should have been (or (stringp doc) (natnump doc)).
- (if doc (list doc))
- (if interactive
- (list (cons 'interactive (if (car interactive) interactive))))
- (list (list 'byte-code bytestring constants stackdepth)))))
-
+;;; Commentary:
;;; interface to selectively inlining functions.
;;; This only happens when source-code optimization is turned on.
+;;; Code:
+
;; Redefined in byte-optimize.el.
+;; This is not documented--it's not clear that we should promote it.
(fset 'inline 'progn)
(put 'inline 'lisp-indent-hook 0)
;;; Interface to inline functions.
-(defmacro proclaim-inline (&rest fns)
- "Cause the named functions to be open-coded when called from compiled code.
-They will only be compiled open-coded when byte-compile-optimize is true."
- (cons 'eval-and-compile
- (mapcar '(lambda (x)
- (or (memq (get x 'byte-optimizer)
- '(nil byte-compile-inline-expand))
- (error
- "%s already has a byte-optimizer, can't make it inline"
- x))
- (list 'put (list 'quote x)
- ''byte-optimizer ''byte-compile-inline-expand))
- fns)))
-
-
-(defmacro proclaim-notinline (&rest fns)
- "Cause the named functions to no longer be open-coded."
- (cons 'eval-and-compile
- (mapcar '(lambda (x)
- (if (eq (get x 'byte-optimizer) 'byte-compile-inline-expand)
- (put x 'byte-optimizer nil))
- (list 'if (list 'eq (list 'get (list 'quote x) ''byte-optimizer)
- ''byte-compile-inline-expand)
- (list 'put x ''byte-optimizer nil)))
- fns)))
+;; (defmacro proclaim-inline (&rest fns)
+;; "Cause the named functions to be open-coded when called from compiled code.
+;; They will only be compiled open-coded when byte-compile-optimize is true."
+;; (cons 'eval-and-compile
+;; (mapcar '(lambda (x)
+;; (or (memq (get x 'byte-optimizer)
+;; '(nil byte-compile-inline-expand))
+;; (error
+;; "%s already has a byte-optimizer, can't make it inline"
+;; x))
+;; (list 'put (list 'quote x)
+;; ''byte-optimizer ''byte-compile-inline-expand))
+;; fns)))
+
+;; (defmacro proclaim-notinline (&rest fns)
+;; "Cause the named functions to no longer be open-coded."
+;; (cons 'eval-and-compile
+;; (mapcar '(lambda (x)
+;; (if (eq (get x 'byte-optimizer) 'byte-compile-inline-expand)
+;; (put x 'byte-optimizer nil))
+;; (list 'if (list 'eq (list 'get (list 'quote x) ''byte-optimizer)
+;; ''byte-compile-inline-expand)
+;; (list 'put x ''byte-optimizer nil)))
+;; fns)))
;; This has a special byte-hunk-handler in bytecomp.el.
(defmacro defsubst (name arglist &rest body)
- "Same syntax as defun, but the defined function will always be open-coded,
-so long as byte-compile-optimize is true."
+ "Define an inline function. The syntax is just like that of `defun'."
+ (or (memq (get name 'byte-optimizer)
+ '(nil byte-compile-inline-expand))
+ (error "`%s' is a primitive" name))
(list 'prog1
(cons 'defun (cons name (cons arglist body)))
- (list 'proclaim-inline name)))
+ (list 'eval-and-compile
+ (list 'put (list 'quote name)
+ ''byte-optimizer ''byte-compile-inline-expand))))
(defun make-obsolete (fn new)
- "Make the byte-compiler warn that FUNCTION is obsolete and NEW should be
-used instead. If NEW is a string, that is the `use instead' message."
+ "Make the byte-compiler warn that FUNCTION is obsolete.
+The warning will say that NEW should be used instead.
+If NEW is a string, that is the `use instead' message."
(interactive "aMake function obsolete: \nxObsoletion replacement: ")
(let ((handler (get fn 'byte-compile)))
(if (eq 'byte-compile-obsolete handler)
@@ -120,7 +89,7 @@ used instead. If NEW is a string, that is the `use instead' message."
(put 'dont-compile 'lisp-indent-hook 0)
(defmacro dont-compile (&rest body)
- "Like progn, but the body will always run interpreted (not compiled)."
+ "Like `progn', but the body always runs interpreted (not compiled)."
(list 'eval (list 'quote (if (cdr body) (cons 'progn body) (car body)))))
@@ -131,43 +100,48 @@ used instead. If NEW is a string, that is the `use instead' message."
(put 'eval-when-compile 'lisp-indent-hook 0)
(defmacro eval-when-compile (&rest body)
- "Like progn, but evaluates the body at compile-time. The result of the
-body appears to the compiler as a quoted constant."
+ "Like `progn', but evaluates the body at compile time.
+The result of the body appears to the compiler as a quoted constant."
;; Not necessary because we have it in b-c-initial-macro-environment
;; (list 'quote (eval (cons 'progn body)))
(cons 'progn body))
(put 'eval-and-compile 'lisp-indent-hook 0)
(defmacro eval-and-compile (&rest body)
- "Like progn, but evaluates the body at compile-time as well as at load-time."
+ "Like `progn', but evaluates the body at compile time and at load time."
;; Remember, it's magic.
(cons 'progn body))
-;;; Interface to file-local byte-compiler parameters.
-;;; Redefined in bytecomp.el.
-
-(put 'byte-compiler-options 'lisp-indent-hook 0)
-(defmacro byte-compiler-options (&rest args)
- "Set some compilation-parameters for this file. This will affect only the
-file in which it appears; this does nothing when evaluated, and when loaded
-from a .el file.
-
-Each argument to this macro must be a list of a key and a value.
-
- Keys: Values: Corresponding variable:
-
- verbose t, nil byte-compile-verbose
- optimize t, nil, source, byte byte-compile-optimize
- warnings list of warnings byte-compile-warnings
- Legal elements: (callargs redefine free-vars unresolved)
- file-format emacs18, emacs19 byte-compile-emacs18-compatibility
- new-bytecodes t, nil byte-compile-generate-emacs19-bytecodes
-
-For example, this might appear at the top of a source file:
-
- (byte-compiler-options
- (optimize t)
- (warnings (- free-vars)) ; Don't warn about free variables
- (file-format emacs19))"
- nil)
+;;; I nuked this because it's not a good idea for users to think of using it.
+;;; These options are a matter of installation preference, and have nothing to
+;;; with particular source files; it's a mistake to suggest to users
+;;; they should associate these with particular source files.
+;;; There is hardly any reason to change these parameters, anyway.
+;;; --rms.
+
+;; (put 'byte-compiler-options 'lisp-indent-hook 0)
+;; (defmacro byte-compiler-options (&rest args)
+;; "Set some compilation-parameters for this file. This will affect only the
+;; file in which it appears; this does nothing when evaluated, and when loaded
+;; from a .el file.
+;;
+;; Each argument to this macro must be a list of a key and a value.
+;;
+;; Keys: Values: Corresponding variable:
+;;
+;; verbose t, nil byte-compile-verbose
+;; optimize t, nil, source, byte byte-compile-optimize
+;; warnings list of warnings byte-compile-warnings
+;; Legal elements: (callargs redefine free-vars unresolved)
+;; file-format emacs18, emacs19 byte-compile-compatibility
+;;
+;; For example, this might appear at the top of a source file:
+;;
+;; (byte-compiler-options
+;; (optimize t)
+;; (warnings (- free-vars)) ; Don't warn about free variables
+;; (file-format emacs19))"
+;; nil)
+
+;;; byte-run.el ends here