Yeah, this was before we made a/the decision about whether to extend the "event" optimization to 3 args.

So:
the host.fire(name, facade) would take the fast path (no Array.split), and 
the fire(name, facade, opts) would take the slow path (Array.split, due to the arg count, even if undefined).

If we're OK with the other pull request, to extend the optimization to 3 args and this general approach, then we can collapse the if/else as you mention. However in that case, I'd probably change that pull request to check for 3 args before 2 args as the most common case.