Hi Emacs developers, Reading eval.c I realized that there is very similar code in both 'eval_sub' and 'funcall_subr', where they invoke the subroutine itself. I figured, since we have 'apply_lambda' (that gets called from 'eval_sub'), why not have an 'apply_subr' as well, to be used for subroutines? So I wrote a small patch (WIP) that adds 'apply_subr', which in turn calls 'funcall_subr'. I had to adapt 'funcall_subr' so that it accepts 'max_args=UNEVALLED' subroutines. I think the advantages of doing this are that 1) it should make making changes to the structure of subroutines slightly easier (less code to update!) and 2) makes 'eval_sub' much more readable. In fact, now the function-calling part of 'eval_sub' is relatively short (~45 lines), which makes understanding the general structure of the function much easier in my opinion. My concerns now are: 1) Could I have broken anything without realizing it, since this is such a central function in Lisp code evaluation? Everything seems to be compiling fine (without warnings) and so far I haven't had any crashes. 2) I removed a comment that made reference to Bug#21245, but it seems like it makes sense since the variable it refers to is no longer needed. 3) Have I maybe made Emacs slower by always using SAFE_ALLOCA_LISP for the subroutine arguments (instead of only for 'max_args=MANY')? Any feedback is appreciated, in order to decide if it makes sense to work further on this. Thanks!