That's a good catch, Klaus! I changed the ROM based routine to use a CMOS addressing mode, so no Y reg is used.
Code:
; increment and scan memory
LAB_IGBY
LAB_2CEE
INC Bpntrl ; increment BASIC execute pointer low byte
BNE LAB_GBYT ; branch if no carry, else
INC Bpntrh ; increment BASIC execute pointer high byte
; scan memory
LAB_GBYT
LDA (Bpntrl) ; get byte to scan (addr set by call routine)
CMP #TK_ELSE ; compare with the token for ELSE
BEQ LAB_2D05 ; exit if ELSE, not numeric, carry set
CMP #':' ; compare with ":"
BCS LAB_2D05 ; exit if >= ":", not numeric, carry set
CMP #' ' ; compare with " "
BEQ LAB_2CEE ; if " " go do next
SEC ; set carry for SBC
SBC #'0' ; subtract "0"
SEC ; set carry for SBC
SBC #$D0 ; subtract -"0"
; clear carry if byte = "0"-"9"
LAB_2D05
RTS
I've no idea how much testing has been done on the 2.23 version, so I stuck with your 2.22p3 version with changes to the page zero definitions, stack floor, etc.