aboutsummaryrefslogtreecommitdiffstats
path: root/lisp/ChangeLog
blob: 65d422a80ea1d1d900923c1caf6d365f26701d92 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
2010-06-18  Stefan Monnier  <monnier@iro.umontreal.ca>

	* emacs-lisp/byte-lexbind.el (byte-compile-compute-lforminfo):
	specialp -> special-variable-p.

2010-06-15  Stefan Monnier  <monnier@iro.umontreal.ca>

	* emacs-lisp/bytecomp.el (byte-compile-initial-macro-environment):
	Don't macroexpand before evaluating in eval-and-compile, in case
	`body's macro expansion uses macros and functions defined in itself.

2010-06-14  Stefan Monnier  <monnier@iro.umontreal.ca>

	* emacs-lisp/bytecomp.el (byte-compile-check-variable):
	Update byte-compile-not-obsolete-var to byte-compile-not-obsolete-vars.

	* Makefile.in (.el.elc): Increase max-lisp-eval-depth.

2006-12-04  Miles Bader  <miles@gnu.org>

	* Makefile.in (COMPILE_FIRST_STACK_DEPTH): New variable.
	(compile, compile-always): Use it.

2005-10-24  Miles Bader  <miles@gnu.org>

	* subr.el (functionp): Re-remove.

	* emacs-lisp/bytecomp.el (byte-compile-closure): Add optional
	ADD-LAMBDA argument, which we just pass to `byte-compile-lambda'.
	(byte-compile-defun): Use ADD-LAMBDA arg to `byte-compile-closure'
	instead of adding lambda ourselves.

2004-08-09  Miles Bader  <miles@gnu.org>

	Changes from merging the funvec patch:

	* emacs-lisp/bytecomp.el (byte-compile-make-closure): Use `curry'
	instead of `vector' to create compiled closures.

	Merge funvec patch.

2004-04-29  Miles Bader  <miles@gnu.org>

	* emacs-lisp/bytecomp.el (byte-compile-top-level): Add new entries
	to `byte-compile-lexical-environment' at the start, not end.
	(byte-compile-delay-out): Correctly default STACK-ADJUST to zero.

	* emacs-lisp/byte-opt.el (byte-opt-update-stack-params):
	Don't crash on no-op lapcode entries (car is nil).

	* emacs-lisp/byte-lexbind.el (byte-compile-make-lambda-lexenv):
	Push a lexvar onto lexenv, not a vinfo!

2004-04-11  Miles Bader  <miles@gnu.org>

	* emacs-lisp/bytecomp.el (byte-compile-top-level):
	Correctly analyze lexically-bound arguments.

	* emacs-lisp/byte-lexbind.el (byte-compile-lforminfo-analyze):
	Use `append' instead of `nconc'.

	* emacs-lisp/byte-lexbind.el (byte-compile-make-lvarinfo):
	Don't use backquote to make a mutable data-structure.
	(byte-compile-lvarinfo-num-refs, byte-compile-lvarinfo-num-sets):
	Rename to use `num-' instead of `num'.
	(byte-compile-make-lambda-lexenv): Adjust accordingly.

2004-04-10  Miles Bader  <miles@gnu.org>

	* emacs-lisp/byte-lexbind.el (byte-compile-compute-lforminfo):
	Look at variable's global specialp state too.

2004-04-09  Miles Bader  <miles@gnu.org>

	* emacs-lisp/byte-opt.el (byte-optimize-lapcode):
	Default initial-stack-depth to 0.
	(byte-optimize-lapcode): Discard the right number of values in
	the stack-set+discard-->discard optimization.

2004-04-02  Miles Bader  <miles@gnu.org>

	* emacs-lisp/lisp-mode.el (eval-last-sexp-1): Setup the lexical
	environment if lexical-binding is enabled.

2003-10-14  Miles Bader  <miles@gnu.org>

	* emacs-lisp/macroexp.el (macroexpand-all-1): Special-case
	`backquote-list*' to avoid stack overflows.

2003-04-04  Miles Bader  <miles@gnu.org>

	* help-fns.el (help-function-arglist): Handle interpreted closures.

2002-11-20  Miles Bader  <miles@gnu.org>

	* emacs-lisp/bytecomp.el (byte-compile-stack-adjustment):
	Correctly handle discardN* operators.
	* emacs-lisp/byte-opt.el (byte-optimize-lapcode): Fix stack-depth
	tracking errors.

2002-08-26  Miles Bader  <miles@gnu.org>

	* international/mule.el (make-char): Macroexpand call to
	charset-id constructed by `byte-compile' hook.

	* emacs-lisp/macroexp.el (macroexpand-all-1): Expand defconst value.

	* emacs-lisp/byte-opt.el (byte-opt-update-stack-params): New macro.
	(byte-optimize-lapcode): Keep track of stack-depth in final pass too.
	Add more optimizations for lexical binding.
	(byte-compile-inline-expand): Macroexpand result of inlining.

	* emacs-lisp/bytecomp.el (byte-compile-lambda): Update call to
	byte-compile-closure-initial-lexenv-p.
	(byte-discardN-preserve-tos): Alias to byte-discardN.
	(byte-compile-push-binding-init): Don't push unused variables on
	init-lexenv.
	(byte-compile-push-binding-init): Don't use LFORMINFO if it's nil.
	(byte-compile-lambda): Don't look at lexical environment unless
	we're using lexical binding.
	(byte-compile-defmacro): Correctly generate macros.

	* emacs-lisp/byte-lexbind.el (byte-compile-unbind): Optimize the
	dynamic-bindings-only case.
	(byte-compile-bind): Don't special-case unused lexical variables.

	* emacs-lisp/disass.el (disassemble-1): Print arg for discardN ops.

2002-08-19  Miles Bader  <miles@gnu.org>

	* emacs-lisp/byte-opt.el (byte-decompile-bytecode-1):
	Handle `byte-discardN-preserve-tos' pseudo-op.
	(byte-compile-side-effect-and-error-free-ops): Add `byte-stack-ref'.
	(byte-compile-side-effect-free-ops): Add `byte-vec-ref'.
	(byte-optimize-lapcode): Add some cases for stack-set/ref ops.
	Add tracking of stack-depth.  Unfinished code to collapse
	lexical-unbinding sequences.

	* emacs-lisp/bytecomp.el (byte-compile-lapcode):
	Handle `byte-discardN-preserve-tos' pseudo-op.
	(byte-compile-top-level): If there are lexical args, output a TAG
	op to record the initial stack-depth for the optimizer.

2002-08-17  Miles Bader  <miles@gnu.org>

	* emacs-lisp/bytecomp.el (byte-discardN): Add byte-defop.
	(byte-compile-lapcode): Include byte-discardN.
	(byte-compile-lambda): Fixup closure detection.
	(byte-compile-top-level): Handle arguments for a lexical lambda.
	(byte-compile-lexical-variable-ref, byte-compile-variable-ref)
	(byte-compile-variable-set): Use byte-compile-stack-set/ref.
	(byte-compile-discard): Add new parameters NUM and PRESERVE-TOS.
	(byte-compile-stack-ref, byte-compile-stack-set): New functions.
	(byte-compile-push-binding-init): Get the variable list properly
	from LFORMINFO.

	* emacs-lisp/byte-lexbind.el (byte-compile-lforminfo-analyze):
	Ignore setq'd variables we're not interested in.
	(byte-compile-make-lambda-lexenv): Add assertion that closed-over
	variables be heap allocated.
	(byte-compile-closure-initial-lexenv-p): Rename from
	byte-compile-closure-lexenv-p.
	(byte-compile-non-stack-bindings-p): Get the variable list
	properly from LFORMINFO.
	(byte-compile-maybe-push-heap-environment): Handle the
	no-closed-over-variables case correctly.
	(byte-compile-bind): Use byte-compile-stack-set/ref.
	Don't bother modifying INIT-LEXENV as no one will see the changes.
	(byte-compile-unbind): Call `byte-compile-discard' to handle
	unbinding lexical bindings.

	* emacs-lisp/disass.el (disassemble-internal): Handle closures.
	(disassemble-1): Handle new bytecodes.
	* emacs-lisp/byte-opt.el (disassemble-offset): Handle new bytecodes.

2002-06-16  Miles Bader  <miles@gnu.org>

	* emacs-lisp/macroexp.el (macroexp-accumulate): New macro.
	(macroexpand-all-forms, macroexpand-all-clauses): Use it.
	* Makefile.in (compile): Undo previous change.

2002-06-14  Miles Bader  <miles@gnu.org>

	* Makefile.in (COMPILE_FIRST): Add `emacs-lisp/macroexp.el'.
	(compile): Add a special case that compiles `emacs-lisp/macroexp.el'
	with an increased max-lisp-eval-depth.

	* emacs-lisp/bytecomp.el: Provide `bytecomp-preload', at the
	beginning of the file.  Require `byte-lexbind' at compile time.
	Add a few doc string.
	(byte-compile-push-bytecodes)
	(byte-compile-push-bytecode-const2): New macros.
	(byte-compile-lapcode): Use them.  Do general code cleanup.
	(byte-compile-initial-macro-environment): Expand macros in
	byte-compile-eval before passing to byte-compile-top-level.
	(byte-compile): Use the `byte-compile-initial-macro-environment'.

	* emacs-lisp/byte-lexbind.el: Require `bytecomp-preload' instead of
	`bytecomp'.
	(byte-compile-bind): Use `byte-compile-dynamic-variable-bind' to bind
	dynamic variables.
	(byte-compile-maybe-push-heap-environment): Fix function name typo.

2002-06-13  Miles Bader  <miles@gnu.org>

	Byte compiler lexical binding support (not finished yet):
	* emacs-lisp/bytecomp.el: Require `macroexp'.
	(byte-compile-lexical-environment)
	(byte-compile-current-heap-environment)
	(byte-compile-current-num-closures): New variables.
	(0, 178, 179, 180, 181): New byte-opcodes.
	(byte-compile-lapcode): Handle stack-ref/set opcodes.  Signal an
	error if a delay-output placeholder is not filled in yet.
	(byte-compile-file-form, byte-compile): Expand all macros with
	`macroexpand-all'.
	(byte-compile-file-form-defsubst, byte-compile-form): Don't expand
	macros here.
	(byte-compile-make-lambda-lexenv): Autoload.
	(byte-compile-lambda): Initial code for handling lexically-bound
	arguments and closures; doesn't work yet.
	(byte-compile-closure-code-p, byte-compile-make-closure)
	(byte-compile-closure): New functions.
	(byte-compile-check-variable, byte-compile-dynamic-variable-op)
	(byte-compile-dynamic-variable-bind)
	(byte-compile-lexical-variable-ref, byte-compile-variable-set):
	New functions.
	(byte-compile-variable-ref): Remove second argument.  Now only
	handles real variable references (not setting or binding).
	(byte-compile-push-unknown-constant)
	(byte-compile-resolve-unknown-constant): New functions.
	(byte-compile-funarg, byte-compile-funarg-2): Functions removed.
	(byte-compile-function-form): Use either `byte-compile-constant'
	or `byte-compile-closure'.
	(byte-compile-setq): Use `byte-compile-variable-set' instead of
	`byte-compile-variable-ref'.
	(apply, mapcar, mapatoms, mapconcat, mapc, sort):
	`byte-defop-compiler-1's removed.
	(byte-compile-while): Make sure lexically-bound variables inside
	the loop don't get stored in an environment outside the loop.
	(byte-compile-compute-lforminfo): Autoload.
	(byte-compile-push-binding-init): New function.
	(byte-compile-let, byte-compile-let*): Handle lexical binding.
	(byte-compile-defun): Use `byte-compile-closure' to do the work.
	(byte-compile-defmacro): Use `byte-compile-make-closure'.
	(byte-compile-defvar): Expand the generated call to `push' since
	we're past macroexpansion already.
	(byte-compile-stack-adjustment): New function.
	(byte-compile-out): Make second arg optional.  Rewrite for clarity.
	(byte-compile-delay-out, byte-compile-delayed-out): New functions.

	* emacs-lisp/byte-opt.el (byte-optimize-form-code-walker):
	Don't expand macros here.

	* emacs-lisp/macroexp.el (macroexpand-all-1): Expand defmacro forms.

	* emacs-lisp/byte-lexbind.el (byte-compile-make-lvarinfo)
	(byte-compile-lforminfo-add-var)
	(byte-compile-lforminfo-note-closure)
	(byte-compile-compute-lforminfo)
	(byte-compile-lforminfo-from-lambda)
	(byte-compile-lforminfo-analyze)
	(byte-compile-heapenv-add-accessible-env)
	(byte-compile-heapenv-ensure-access)
	(byte-compile-rearrange-let-clauses, byte-compile-bind)
	(byte-compile-unbind): Fix a bunch of typos.

2002-06-12  Miles Bader  <miles@gnu.org>

	* emacs-lisp/byte-lexbind.el, emacs-lisp/macroexp.el: New files.

	* subr.el (functionp): Function removed (now a subr).
	* help-fns.el (describe-function-1): Handle interpreted closures.

;; arch-tag: bd1b5b8b-fdb2-425d-9ac2-20689fb0ee70