'let' and 'let*' document that their first argument has to be a list,
but don't check for that; instead, they allow (and silently ignore)
other types. Introduce an explicit type check.
* src/eval.c (Flet, FletX): Check that the variable list is indeed a
list.
* test/src/eval-tests.el: Add unit tests.
lexenv = Vinternal_interpreter_environment;
varlist = XCAR (args);
+ CHECK_LIST (varlist);
while (CONSP (varlist))
{
QUIT;
USE_SAFE_ALLOCA;
varlist = XCAR (args);
+ CHECK_LIST (varlist);
/* Make space to hold the values to give the bound variables. */
elt = Flength (varlist);
(let ((byte-compile-debug t))
(should-error (eval `(byte-compile (lambda ,args)) t)))))
+
+(dolist (form '(let let*))
+ (dolist (arg '(1 "a" [a]))
+ (eval
+ `(ert-deftest ,(intern (format "eval-tests--%s--%s" form (type-of arg))) ()
+ ,(format "Check that the first argument of `%s' cannot be a %s"
+ form (type-of arg))
+ (should-error (,form ,arg) :type 'wrong-type-argument))
+ t)))
+
;;; eval-tests.el ends here