* lisp/emacs-lisp/cconv.el (cconv-closure-convert-rec): Let the byte
[bpt/emacs.git] / src / ChangeLog
CommitLineData
3e21b6a7
SM
12011-02-21 Stefan Monnier <monnier@iro.umontreal.ca>
2
3 * bytecode.c (exec_byte_code): Change stack_ref and stack_set to use
4 offsets relative to top rather than to bottom.
5
6 * alloc.c (Fgarbage_collect): Don't mark the byte-stack redundantly.
7
e0f57e65
SM
82011-02-19 Stefan Monnier <monnier@iro.umontreal.ca>
9
10 * window.c (Fsave_window_excursion): Remove. Moved to Lisp.
11 (syms_of_window): Don't defsubr it.
12 * window.h (Fsave_window_excursion): Don't declare it.
13 * bytecode.c (exec_byte_code): Inline Fsave_window_excursion.
14
b38b1ec0
SM
152011-02-17 Stefan Monnier <monnier@iro.umontreal.ca>
16
17 * eval.c (Vinternal_interpreter_environment): Remove.
18 (syms_of_eval): Do declare Vinternal_interpreter_environment as
19 a global lisp var, but unintern it to hide it.
20 (Fcommandp):
21 * data.c (Finteractive_form): Understand `closure's.
22
23 * bytecode.c (exec_byte_code): Fix handling of &rest.
24
ce5b520a
SM
252011-02-12 Stefan Monnier <monnier@iro.umontreal.ca>
26
27 * bytecode.c (Bvec_ref, Bvec_set): Remove.
28 (exec_byte_code): Don't handle them.
29
590130fb
SM
302010-12-27 Stefan Monnier <monnier@iro.umontreal.ca>
31
32 * eval.c (Fdefvar): Record specialness before computing initial value.
33
a0ee6f27
SM
342010-12-15 Stefan Monnier <monnier@iro.umontreal.ca>
35
36 * eval.c (Feval): Add `lexical' argument. Adjust callers.
37 (Ffuncall, eval_sub): Avoid goto.
38
defb1411
SM
392010-12-14 Stefan Monnier <monnier@iro.umontreal.ca>
40
41 Try and be more careful about propagation of lexical environment.
42 * eval.c (apply_lambda, funcall_lambda): Remove lexenv arg.
43 (Feval): Always eval in the empty environment.
44 (eval_sub): New function. Use it for all calls to Feval that should
45 evaluate in the lexical environment of the caller.
46 Pass `closure's as is to apply_lambda.
47 (Ffuncall): Pass `closure's as is to funcall_lambda.
48 (funcall_lambda): Extract lexenv for `closure's, when applicable.
49 Also use lexical scoping for the &rest argument, if applicable.
50 * lisp.h (eval_sub): Declare.
51 * lread.c (readevalloop): Remove `evalfun' argument.
52 * print.c (Fwith_output_to_temp_buffer):
53 * data.c (Fsetq_default): Use eval_sub.
54
f07a954e
SM
552010-12-13 Stefan Monnier <monnier@iro.umontreal.ca>
56
57 Make the effect of (defvar foo) local.
58 * eval.c (apply_lambda): Make static. Remove eval_flag arg.
59 (Fsetq): Don't check declared_special.
60 (Fdefun, Fdefmacro): Use Ffunction.
61 (Fdefvar): Don't set declared_special for (defvar foo).
62 (FletX): Check locally-special vars. Only do specbind once.
63 (Flet): Check locally-special vars.
64 (Feval): Don't check declared_special.
65 (funcall_lambda): Check locally-special vars.
66 * lisp.h (apply_lambda): Remove extern declaration.
67 * lread.c (readevalloop): CSE.
68
0bfdb86f
AS
692010-07-23 Andreas Schwab <schwab@linux-m68k.org>
70
71 * eval.c (funcall_funvec): Replace bcopy by memcpy.
72
4a330052
SM
732010-06-18 Stefan Monnier <monnier@iro.umontreal.ca>
74
75 * eval.c (Fspecial_variable_p): Rename from `specialp'.
76
3c3ddb98
SM
772010-06-15 Stefan Monnier <monnier@iro.umontreal.ca>
78
79 * bytecode.c (exec_byte_code):
80 * eval.c (Ffunctionp): Fix up int/Lisp_Object confusions.
81
894e369d 822008-04-23 Miles Bader <miles@gnu.org>
6e6e5760 83
894e369d
SM
84 * eval.c (Ffunctionp): Return nil for special forms.
85 (Qunevalled): New variable.
aac0c6e3
MR
86 (syms_of_eval): Initialize it.
87
894e369d 882007-10-18 Miles Bader <miles@gnu.org>
aac0c6e3 89
894e369d
SM
90 * eval.c (FletX): Test the type of VARLIST rather than just !NILP.
91 (Flet): Use XCAR instead of Fcar.
aac0c6e3 92
894e369d 932007-10-16 Miles Bader <miles@gnu.org>
aac0c6e3 94
894e369d 95 * alloc.c (make_funvec, Fpurecopy): Set the pseudo-vector type.
aac0c6e3 96
894e369d 972006-02-10 Miles Bader <miles@gnu.org>
aac0c6e3 98
894e369d 99 * eval.c (Ffunctionp): Supply new 2nd arg to Findirect_function.
aac0c6e3 100
894e369d 1012005-03-04 Miles Bader <miles@gnu.org>
aac0c6e3 102
894e369d
SM
103 * eval.c (FletX): Update Vinterpreter_lexical_environment for each
104 variable we bind, instead of all at once like `let'.
aac0c6e3 105
894e369d 1062004-08-09 Miles Bader <miles@gnu.org>
aac0c6e3 107
894e369d 108 Changes from merging the funvec patch:
aac0c6e3 109
894e369d
SM
110 * eval.c (Feval, Ffuncall): Don't special-case vectors.
111 (funcall_lambda): Use FUNVEC_SIZE.
112 (Fcurry): Remove function.
aac0c6e3 113
894e369d 114 Merge funvec patch.
aac0c6e3 115
894e369d 1162004-04-10 Miles Bader <miles@gnu.org>
aac0c6e3 117
894e369d
SM
118 * eval.c (Fspecialp): New function.
119 (syms_of_eval): Initialize it.
aac0c6e3 120
894e369d 1212004-04-03 Miles Bader <miles@gnu.org>
aac0c6e3 122
894e369d
SM
123 * eval.c (Feval): If a variable isn't bound lexically, fall back
124 to looking it up dynamically even if it isn't declared special.
aac0c6e3 125
894e369d 1262002-08-26 Miles Bader <miles@gnu.org>
aac0c6e3 127
894e369d 128 * bytecode.c (Fbyte_code): Fsub1 can GC, so protect it.
aac0c6e3 129
894e369d 1302002-06-12 Miles Bader <miles@gnu.org>
aac0c6e3 131
894e369d 132 Lexical binding changes to the byte-code interpreter:
aac0c6e3 133
894e369d
SM
134 * bytecode.c (Bstack_ref, Bstack_set, Bstack_set2, Bvec_ref, Bvec_set)
135 (BdiscardN): New constants.
136 (exec_byte_code): Rename from `Fbyte_code'.
137 Implement above new bytecodes.
138 Add ARGS-TEMPLATE, NARGS and ARGS parameters, and optionally use
139 them push initial args on the stack.
140 (Fbyte_code): New function, just call `exec_byte_code'.
141 Add additional optional arguments for `exec_byte_code'.
142 (Qand_optional, Qand_rest): New extern declarations.
143 * eval.c (Fcurry, Ffunctionp): New functions.
144 (syms_of_eval): Initialize them.
145 (funcall_lambda): Call `exec_byte_code' instead of Fbyte_code.
146 If a compiled-function object has a `push-args' slot, call the
147 byte-code interpreter without binding any arguments.
148 (Ffuncall): Add support for curried functions.
149 * lisp.h (Fbyte_code): Declare max-args as MANY.
150 (exec_byte_code): New declaration.
aac0c6e3 151
894e369d 152 Lexical binding changes to the lisp interpreter:
aac0c6e3 153
894e369d
SM
154 * lisp.h (struct Lisp_Symbol): Add `declared_special' field.
155 (apply_lambda): Add new 3rd arg to decl.
156 * alloc.c (Fmake_symbol): Initialize `declared_special' field.
157 * eval.c (Vinterpreter_lexical_environment): New variable.
158 (syms_of_eval): Initialize it.
159 (Fsetq): Modify SYM's lexical binding if appropriate.
160 (Ffunction): Return a closure if within a lexical environment.
161 (Flet, FletX): Lexically bind non-defvar'd variables if inside a
162 lexical environment.
163 (Feval): Return lexical binding of variables, if they have one.
164 Pass current lexical environment to embedded lambdas. Handle closures.
165 (Ffuncall): Pass nil lexical environment to lambdas. Handle closures.
166 (funcall_lambda): Add new LEXENV argument, and lexically bind
167 arguments if it's non-nil. Bind `interpreter-lexenv' if it changed.
168 (apply_lambda): Add new LEXENV argument and pass it to funcall_lambda.
169 (Fdefvaralias, Fdefvar, Fdefconst): Mark the variable as special.
170 (Qinternal_interpreter_environment, Qclosure): New constants.
171 (syms_of_eval): Initialize them.
172 (Fdefun, Fdefmacro): Use a closure if lexical binding is active.
173 * lread.c (defvar_bool, defvar_lisp_nopro, defvar_per_buffer)
174 (defvar_kboard, defvar_int): Mark the variable as special.
175 (Vlexical_binding, Qlexical_binding): New variables.
176 (syms_of_lread): Initialize them.
177 (Fload): Bind `lexically-bound' to nil unless specified otherwise
178 in the file header.
179 (lisp_file_lexically_bound_p): New function.
180 (Qinternal_interpreter_environment): New variable.
181 * doc.c (Qclosure): New extern declaration.
182 (Fdocumentation, store_function_docstring): Handle interpreted
183 closures.
184
185;; arch-tag: 7cf884aa-6b48-40cb-bfca-265a1e99b3c5