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
|
2010-07-23 Andreas Schwab <schwab@linux-m68k.org>
* eval.c (funcall_funvec): Replace bcopy by memcpy.
2010-06-18 Stefan Monnier <monnier@iro.umontreal.ca>
* eval.c (Fspecial_variable_p): Rename from `specialp'.
2010-06-15 Stefan Monnier <monnier@iro.umontreal.ca>
* bytecode.c (exec_byte_code):
* eval.c (Ffunctionp): Fix up int/Lisp_Object confusions.
2008-04-23 Miles Bader <miles@gnu.org>
* eval.c (Ffunctionp): Return nil for special forms.
(Qunevalled): New variable.
(syms_of_eval): Initialize it.
2007-10-18 Miles Bader <miles@gnu.org>
* eval.c (FletX): Test the type of VARLIST rather than just !NILP.
(Flet): Use XCAR instead of Fcar.
2007-10-16 Miles Bader <miles@gnu.org>
* alloc.c (make_funvec, Fpurecopy): Set the pseudo-vector type.
2006-02-10 Miles Bader <miles@gnu.org>
* eval.c (Ffunctionp): Supply new 2nd arg to Findirect_function.
2005-03-04 Miles Bader <miles@gnu.org>
* eval.c (FletX): Update Vinterpreter_lexical_environment for each
variable we bind, instead of all at once like `let'.
2004-08-09 Miles Bader <miles@gnu.org>
Changes from merging the funvec patch:
* eval.c (Feval, Ffuncall): Don't special-case vectors.
(funcall_lambda): Use FUNVEC_SIZE.
(Fcurry): Remove function.
Merge funvec patch.
2004-04-10 Miles Bader <miles@gnu.org>
* eval.c (Fspecialp): New function.
(syms_of_eval): Initialize it.
2004-04-03 Miles Bader <miles@gnu.org>
* eval.c (Feval): If a variable isn't bound lexically, fall back
to looking it up dynamically even if it isn't declared special.
2002-08-26 Miles Bader <miles@gnu.org>
* bytecode.c (Fbyte_code): Fsub1 can GC, so protect it.
2002-06-12 Miles Bader <miles@gnu.org>
Lexical binding changes to the byte-code interpreter:
* bytecode.c (Bstack_ref, Bstack_set, Bstack_set2, Bvec_ref, Bvec_set)
(BdiscardN): New constants.
(exec_byte_code): Rename from `Fbyte_code'.
Implement above new bytecodes.
Add ARGS-TEMPLATE, NARGS and ARGS parameters, and optionally use
them push initial args on the stack.
(Fbyte_code): New function, just call `exec_byte_code'.
Add additional optional arguments for `exec_byte_code'.
(Qand_optional, Qand_rest): New extern declarations.
* eval.c (Fcurry, Ffunctionp): New functions.
(syms_of_eval): Initialize them.
(funcall_lambda): Call `exec_byte_code' instead of Fbyte_code.
If a compiled-function object has a `push-args' slot, call the
byte-code interpreter without binding any arguments.
(Ffuncall): Add support for curried functions.
* lisp.h (Fbyte_code): Declare max-args as MANY.
(exec_byte_code): New declaration.
Lexical binding changes to the lisp interpreter:
* lisp.h (struct Lisp_Symbol): Add `declared_special' field.
(apply_lambda): Add new 3rd arg to decl.
* alloc.c (Fmake_symbol): Initialize `declared_special' field.
* eval.c (Vinterpreter_lexical_environment): New variable.
(syms_of_eval): Initialize it.
(Fsetq): Modify SYM's lexical binding if appropriate.
(Ffunction): Return a closure if within a lexical environment.
(Flet, FletX): Lexically bind non-defvar'd variables if inside a
lexical environment.
(Feval): Return lexical binding of variables, if they have one.
Pass current lexical environment to embedded lambdas. Handle closures.
(Ffuncall): Pass nil lexical environment to lambdas. Handle closures.
(funcall_lambda): Add new LEXENV argument, and lexically bind
arguments if it's non-nil. Bind `interpreter-lexenv' if it changed.
(apply_lambda): Add new LEXENV argument and pass it to funcall_lambda.
(Fdefvaralias, Fdefvar, Fdefconst): Mark the variable as special.
(Qinternal_interpreter_environment, Qclosure): New constants.
(syms_of_eval): Initialize them.
(Fdefun, Fdefmacro): Use a closure if lexical binding is active.
* lread.c (defvar_bool, defvar_lisp_nopro, defvar_per_buffer)
(defvar_kboard, defvar_int): Mark the variable as special.
(Vlexical_binding, Qlexical_binding): New variables.
(syms_of_lread): Initialize them.
(Fload): Bind `lexically-bound' to nil unless specified otherwise
in the file header.
(lisp_file_lexically_bound_p): New function.
(Qinternal_interpreter_environment): New variable.
* doc.c (Qclosure): New extern declaration.
(Fdocumentation, store_function_docstring): Handle interpreted
closures.
;; arch-tag: 7cf884aa-6b48-40cb-bfca-265a1e99b3c5
|