Here's an even newer version. In addition to the previous patch I sent today, this moves most of the handling of non-bytecode funvecs in eval.c into a separate `funcall_funvec' function, called from funcall_lambda; this makes the code easier to understand and more correct than before (for instance, function calls from Feval now properly handle funvecs):