Mercurial > emacs
annotate lisp/byte-run.el @ 29473:80835e075d87
(display_line): Set row's and iterator's
starts_in_middle_of_char_p and ends_in_middle_of_char_p flags.
Set cursor even if row ends in the middle of a character.
(dump_glyph_row): Print values of new flags.
(redisplay_window) <cursor movement in unchanged window>: When
point has been moved forward, and PT is at the end of the cursor
row, don't place the cursor in the next row if the cursor row ends
in the middle of a character or at ZV.
author | Gerd Moellmann <gerd@gnu.org> |
---|---|
date | Tue, 06 Jun 2000 20:02:39 +0000 |
parents | fa490904bee0 |
children | 37645a051842 |
rev | line source |
---|---|
2229
bd3c525fa6fc
Added standard library headers.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
957
diff
changeset
|
1 ;;; byte-run.el --- byte-compiler support for inlining |
757 | 2 |
846
20674ae6bf52
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
811
diff
changeset
|
3 ;; Copyright (C) 1992 Free Software Foundation, Inc. |
20674ae6bf52
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
811
diff
changeset
|
4 |
811
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
5 ;; Author: Jamie Zawinski <jwz@lucid.com> |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
6 ;; Hallvard Furuseth <hbf@ulrik.uio.no> |
21045 | 7 ;; Maintainer: FSF |
811
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
8 ;; Keywords: internal |
757 | 9 |
10 ;; This file is part of GNU Emacs. | |
11 | |
12 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
13 ;; it under the terms of the GNU General Public License as published by | |
811
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
14 ;; the Free Software Foundation; either version 2, or (at your option) |
757 | 15 ;; any later version. |
16 | |
17 ;; GNU Emacs is distributed in the hope that it will be useful, | |
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
20 ;; GNU General Public License for more details. | |
21 | |
22 ;; You should have received a copy of the GNU General Public License | |
14169 | 23 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
25 ;; Boston, MA 02111-1307, USA. | |
757 | 26 |
811
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
27 ;;; Commentary: |
757 | 28 |
14169 | 29 ;; interface to selectively inlining functions. |
30 ;; This only happens when source-code optimization is turned on. | |
757 | 31 |
811
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
32 ;;; Code: |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
33 |
757 | 34 ;; Redefined in byte-optimize.el. |
811
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
35 ;; This is not documented--it's not clear that we should promote it. |
757 | 36 (fset 'inline 'progn) |
37 (put 'inline 'lisp-indent-hook 0) | |
38 | |
39 | |
40 ;;; Interface to inline functions. | |
41 | |
811
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
42 ;; (defmacro proclaim-inline (&rest fns) |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
43 ;; "Cause the named functions to be open-coded when called from compiled code. |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
44 ;; They will only be compiled open-coded when byte-compile-optimize is true." |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
45 ;; (cons 'eval-and-compile |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
46 ;; (mapcar '(lambda (x) |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
47 ;; (or (memq (get x 'byte-optimizer) |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
48 ;; '(nil byte-compile-inline-expand)) |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
49 ;; (error |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
50 ;; "%s already has a byte-optimizer, can't make it inline" |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
51 ;; x)) |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
52 ;; (list 'put (list 'quote x) |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
53 ;; ''byte-optimizer ''byte-compile-inline-expand)) |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
54 ;; fns))) |
757 | 55 |
811
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
56 ;; (defmacro proclaim-notinline (&rest fns) |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
57 ;; "Cause the named functions to no longer be open-coded." |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
58 ;; (cons 'eval-and-compile |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
59 ;; (mapcar '(lambda (x) |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
60 ;; (if (eq (get x 'byte-optimizer) 'byte-compile-inline-expand) |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
61 ;; (put x 'byte-optimizer nil)) |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
62 ;; (list 'if (list 'eq (list 'get (list 'quote x) ''byte-optimizer) |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
63 ;; ''byte-compile-inline-expand) |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
64 ;; (list 'put x ''byte-optimizer nil))) |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
65 ;; fns))) |
757 | 66 |
67 ;; This has a special byte-hunk-handler in bytecomp.el. | |
68 (defmacro defsubst (name arglist &rest body) | |
811
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
69 "Define an inline function. The syntax is just like that of `defun'." |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
70 (or (memq (get name 'byte-optimizer) |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
71 '(nil byte-compile-inline-expand)) |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
72 (error "`%s' is a primitive" name)) |
757 | 73 (list 'prog1 |
74 (cons 'defun (cons name (cons arglist body))) | |
811
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
75 (list 'eval-and-compile |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
76 (list 'put (list 'quote name) |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
77 ''byte-optimizer ''byte-compile-inline-expand)))) |
757 | 78 |
29352
fa490904bee0
* byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
21045
diff
changeset
|
79 (defun make-obsolete (fn new &optional when) |
811
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
80 "Make the byte-compiler warn that FUNCTION is obsolete. |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
81 The warning will say that NEW should be used instead. |
29352
fa490904bee0
* byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
21045
diff
changeset
|
82 If NEW is a string, that is the `use instead' message. |
fa490904bee0
* byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
21045
diff
changeset
|
83 If provided, WHEN should be a string indicating when the function |
fa490904bee0
* byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
21045
diff
changeset
|
84 was first made obsolete, for example a date or a release number." |
757 | 85 (interactive "aMake function obsolete: \nxObsoletion replacement: ") |
86 (let ((handler (get fn 'byte-compile))) | |
87 (if (eq 'byte-compile-obsolete handler) | |
29352
fa490904bee0
* byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
21045
diff
changeset
|
88 (setq handler (nth 1 (get fn 'byte-obsolete-info))) |
fa490904bee0
* byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
21045
diff
changeset
|
89 (put fn 'byte-compile 'byte-compile-obsolete)) |
fa490904bee0
* byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
21045
diff
changeset
|
90 (put fn 'byte-obsolete-info (list new handler when))) |
757 | 91 fn) |
92 | |
29352
fa490904bee0
* byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
21045
diff
changeset
|
93 (defun make-obsolete-variable (var new &optional when) |
957 | 94 "Make the byte-compiler warn that VARIABLE is obsolete, |
95 and NEW should be used instead. If NEW is a string, then that is the | |
29352
fa490904bee0
* byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
21045
diff
changeset
|
96 `use instead' message. |
fa490904bee0
* byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
21045
diff
changeset
|
97 If provided, WHEN should be a string indicating when the variable |
fa490904bee0
* byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
21045
diff
changeset
|
98 was first made obsolete, for example a date or a release number." |
957 | 99 (interactive |
100 (list | |
101 (let ((str (completing-read "Make variable obsolete: " obarray 'boundp t))) | |
102 (if (equal str "") (error "")) | |
103 (intern str)) | |
104 (car (read-from-string (read-string "Obsoletion replacement: "))))) | |
29352
fa490904bee0
* byte-run.el (make-obsolete, make-obsolete-variable):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
21045
diff
changeset
|
105 (put var 'byte-obsolete-variable (cons new when)) |
957 | 106 var) |
107 | |
757 | 108 (put 'dont-compile 'lisp-indent-hook 0) |
109 (defmacro dont-compile (&rest body) | |
957 | 110 "Like `progn', but the body always runs interpreted (not compiled). |
111 If you think you need this, you're probably making a mistake somewhere." | |
757 | 112 (list 'eval (list 'quote (if (cdr body) (cons 'progn body) (car body))))) |
113 | |
114 | |
115 ;;; interface to evaluating things at compile time and/or load time | |
116 ;;; these macro must come after any uses of them in this file, as their | |
117 ;;; definition in the file overrides the magic definitions on the | |
118 ;;; byte-compile-macro-environment. | |
119 | |
120 (put 'eval-when-compile 'lisp-indent-hook 0) | |
121 (defmacro eval-when-compile (&rest body) | |
811
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
122 "Like `progn', but evaluates the body at compile time. |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
123 The result of the body appears to the compiler as a quoted constant." |
757 | 124 ;; Not necessary because we have it in b-c-initial-macro-environment |
125 ;; (list 'quote (eval (cons 'progn body))) | |
126 (cons 'progn body)) | |
127 | |
128 (put 'eval-and-compile 'lisp-indent-hook 0) | |
129 (defmacro eval-and-compile (&rest body) | |
811
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
130 "Like `progn', but evaluates the body at compile time and at load time." |
757 | 131 ;; Remember, it's magic. |
132 (cons 'progn body)) | |
133 | |
134 | |
811
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
135 ;;; I nuked this because it's not a good idea for users to think of using it. |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
136 ;;; These options are a matter of installation preference, and have nothing to |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
137 ;;; with particular source files; it's a mistake to suggest to users |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
138 ;;; they should associate these with particular source files. |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
139 ;;; There is hardly any reason to change these parameters, anyway. |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
140 ;;; --rms. |
757 | 141 |
811
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
142 ;; (put 'byte-compiler-options 'lisp-indent-hook 0) |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
143 ;; (defmacro byte-compiler-options (&rest args) |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
144 ;; "Set some compilation-parameters for this file. This will affect only the |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
145 ;; file in which it appears; this does nothing when evaluated, and when loaded |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
146 ;; from a .el file. |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
147 ;; |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
148 ;; Each argument to this macro must be a list of a key and a value. |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
149 ;; |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
150 ;; Keys: Values: Corresponding variable: |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
151 ;; |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
152 ;; verbose t, nil byte-compile-verbose |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
153 ;; optimize t, nil, source, byte byte-compile-optimize |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
154 ;; warnings list of warnings byte-compile-warnings |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
155 ;; Legal elements: (callargs redefine free-vars unresolved) |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
156 ;; file-format emacs18, emacs19 byte-compile-compatibility |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
157 ;; |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
158 ;; For example, this might appear at the top of a source file: |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
159 ;; |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
160 ;; (byte-compiler-options |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
161 ;; (optimize t) |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
162 ;; (warnings (- free-vars)) ; Don't warn about free variables |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
163 ;; (file-format emacs19))" |
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
164 ;; nil) |
757 | 165 |
811
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
757
diff
changeset
|
166 ;;; byte-run.el ends here |