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

    <float-parse> [ @mantissa-digit ] require-next-digit ?make-float ; inline

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

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

    @split [ @num-digit ] require-next-digit ?add-ratio ;

: @pos-digit-or-punc ( i number-parse n char -- n/f )
    [ [ @pos-digit ] require-next-digit ] [
        {
            { CHAR: + [ ->numerator ] }
            { CHAR: / [ ->denominator ] }
            { CHAR: . [ ->mantissa ] }
            [ [ @pos-digit ] or-exponent ]
        } case
    ] if-skip ; inline

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