Are the extra stack frames worth it here? It might seem like a micro optimisation, but I know from previous profiling work eliminating 100's of function calls per request adds up.