diff options
author | Eric S. Raymond <esr@snark.thyrsus.com> | 1992-07-17 08:15:29 +0000 |
---|---|---|
committer | Eric S. Raymond <esr@snark.thyrsus.com> | 1992-07-17 08:15:29 +0000 |
commit | fd7fa35a05844aaa716dc8c8511947bed03ca989 (patch) | |
tree | 8747e7a749aa323b18104554a827b2cd16105e30 /lisp/byte-run.el | |
parent | f961a17c4405b36847ac8739bd4a4028747a67ce (diff) | |
download | emacs-fd7fa35a05844aaa716dc8c8511947bed03ca989.tar.gz |
*** empty log message ***
Diffstat (limited to 'lisp/byte-run.el')
-rw-r--r-- | lisp/byte-run.el | 192 |
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 |