diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/eval.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/eval.c b/src/eval.c index de6784a81b6..6940b8dbada 100644 --- a/src/eval.c +++ b/src/eval.c | |||
| @@ -1946,13 +1946,15 @@ funcall_lambda (fun, nargs, arg_vector) | |||
| 1946 | { | 1946 | { |
| 1947 | QUIT; | 1947 | QUIT; |
| 1948 | next = Fcar (syms_left); | 1948 | next = Fcar (syms_left); |
| 1949 | while (XTYPE (next) != Lisp_Symbol) | ||
| 1950 | next = Fsignal (Qinvalid_function, Fcons (fun, Qnil)); | ||
| 1949 | if (EQ (next, Qand_rest)) | 1951 | if (EQ (next, Qand_rest)) |
| 1950 | rest = 1; | 1952 | rest = 1; |
| 1951 | else if (EQ (next, Qand_optional)) | 1953 | else if (EQ (next, Qand_optional)) |
| 1952 | optional = 1; | 1954 | optional = 1; |
| 1953 | else if (rest) | 1955 | else if (rest) |
| 1954 | { | 1956 | { |
| 1955 | specbind (Fcar (syms_left), Flist (nargs - i, &arg_vector[i])); | 1957 | specbind (next, Flist (nargs - i, &arg_vector[i])); |
| 1956 | i = nargs; | 1958 | i = nargs; |
| 1957 | } | 1959 | } |
| 1958 | else if (i < nargs) | 1960 | else if (i < nargs) |
| @@ -2007,6 +2009,8 @@ specbind (symbol, value) | |||
| 2007 | extern void store_symval_forwarding (); /* in eval.c */ | 2009 | extern void store_symval_forwarding (); /* in eval.c */ |
| 2008 | Lisp_Object ovalue; | 2010 | Lisp_Object ovalue; |
| 2009 | 2011 | ||
| 2012 | CHECK_SYMBOL (symbol, 0); | ||
| 2013 | |||
| 2010 | if (specpdl_ptr == specpdl + specpdl_size) | 2014 | if (specpdl_ptr == specpdl + specpdl_size) |
| 2011 | grow_specpdl (); | 2015 | grow_specpdl (); |
| 2012 | specpdl_ptr->symbol = symbol; | 2016 | specpdl_ptr->symbol = symbol; |