 DEFER: @neg-digit
 
 : @exponent-digit-or-punc ( float-parse i number-parse n char -- float-parse n/f )
-    dup ",_" member-eq? [
-        drop [ @exponent-digit ] require-next-digit
-    ] [ @exponent-digit ] if ; inline
+    [ [ @exponent-digit ] require-next-digit ] [ @exponent-digit ] if-skip ; inline
 
 : @exponent-digit ( float-parse i number-parse n char -- float-parse n/f )
     { float-parse fixnum number-parse integer fixnum } declare

    @split [ @denom-first-digit ] require-next-digit ?make-ratio ;

: @num-digit-or-punc ( i number-parse n char -- n/f )
    dup ",_" member-eq? [
        drop [ @num-digit ] require-next-digit
    ] [
        {
            { CHAR: / [ ->denominator ] }
            [ @num-digit ]
        } case
    ] if ; inline

: @num-digit ( i number-parse n char -- n/f )
    { fixnum number-parse integer fixnum } declare

: <float-parse> ( i number-parse n -- float-parse i number-parse n )
     [ drop nip [ radix>> ] [ magnitude>> ] bi [ 0 f ] dip float-parse boa ] 3keep ; inline

: if-skip ( char true false -- )
    pick ",_" member-eq? [ drop nip call ] [ nip call ] if ; inline

DEFER: @exponent-digit
DEFER: @mantissa-digit
DEFER: @denom-digit
