There is a (small) benefit to prevent matching EOI with `cursorChar != EOI` rather than `cursor < input.length`.

1. `cursorChar` needs to be accessed anyway (for the 2nd comparison), so potentially loading it (if it is not yet in a register) is no overhead.
2. `cursor` and `input` don't need to be loaded.
3. `input.length` doesn't need to be loaded.
4. It is a bit more readable because it explicitly expresses what we want to prevent