Mercurial > emacs
diff lisp/emacs-lisp/byte-opt.el @ 767:02bfc9709961
*** empty log message ***
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Tue, 14 Jul 1992 02:11:50 +0000 |
parents | 745b7fc3a3d3 |
children | 58d3ed08f776 |
line wrap: on
line diff
--- a/lisp/emacs-lisp/byte-opt.el Mon Jul 13 20:56:17 1992 +0000 +++ b/lisp/emacs-lisp/byte-opt.el Tue Jul 14 02:11:50 1992 +0000 @@ -1,8 +1,6 @@ -;;; -*- Mode:Emacs-Lisp -*- ;;; The optimization passes of the emacs-lisp byte compiler. - +;;; Copyright (c) 1991 Free Software Foundation, Inc. ;; By Jamie Zawinski <jwz@lucid.com> and Hallvard Furuseth <hbf@ulrik.uio.no>. -;; last modified 29-oct-91. ;; This file is part of GNU Emacs. @@ -131,11 +129,6 @@ ;;; the code that relies on dynamic scope of non-defvarred variables. -(require 'byte-compile "bytecomp") - -(or (fboundp 'byte-compile-lapcode) - (error "loading bytecomp got the wrong version of the compiler.")) - (defun byte-compile-log-lap-1 (format &rest args) (if (aref byte-code-vector 0) (error "The old version of the disassembler is loaded. Reload new-bytecomp as well.")) @@ -196,11 +189,11 @@ (cdr form)))) +;; Splice the given lap code into the current instruction stream. +;; If it has any labels in it, you're responsible for making sure there +;; are no collisions, and that byte-compile-tag-number is reasonable +;; after this is spliced in. The provided list is destroyed. (defun byte-inline-lapcode (lap) - "splice the given lap code into the current instruction stream. -If it has any labels in it, you're responsible for making sure there -are no collisions, and that byte-compile-tag-number is reasonable -after this is spliced in. the provided list is destroyed." (setq byte-compile-output (nconc (nreverse lap) byte-compile-output))) @@ -528,10 +521,10 @@ ((not (symbolp (, form)))) ((eq (, form) t))))) +;; If the function is being called with constant numeric args, +;; evaluate as much as possible at compile-time. This optimizer +;; assumes that the function is associative, like + or *. (defun byte-optimize-associative-math (form) - "If the function is being called with constant numeric args, -evaluate as much as possible at compile-time. This optimizer -assumes that the function is associative, like + or *." (let ((args nil) (constants nil) (rest (cdr form))) @@ -550,10 +543,10 @@ (apply (car form) constants)) form))) +;; If the function is being called with constant numeric args, +;; evaluate as much as possible at compile-time. This optimizer +;; assumes that the function is nonassociative, like - or /. (defun byte-optimize-nonassociative-math (form) - "If the function is being called with constant numeric args, -evaluate as much as possible at compile-time. This optimizer -assumes that the function is nonassociative, like - or /." (if (or (not (numberp (car (cdr form)))) (not (numberp (car (cdr (cdr form)))))) form @@ -1052,11 +1045,11 @@ (byte-compile-tag-number 0)) (byte-decompile-bytecode-1 bytes constvec))) +;; As byte-decompile-bytecode, but updates +;; byte-compile-{constants, variables, tag-number}. +;; If the optional 3rd arg is true, then `return' opcodes are replaced +;; with `goto's destined for the end of the code. (defun byte-decompile-bytecode-1 (bytes constvec &optional make-splicable) - "As byte-decompile-bytecode, but updates -byte-compile-{constants, variables, tag-number}. -If the optional 3rd arg is true, then `return' opcodes are replaced -with `goto's destined for the end of the code." (let ((length (length bytes)) (ptr 0) optr tag tags op offset lap tmp