math.parser: reject "0x" etc. without any digits

db4
Joe Groff 2011-11-24 12:27:40 -08:00
parent 0b45465722
commit 14efcc69ab
2 changed files with 23 additions and 7 deletions

View File

@ -239,6 +239,7 @@ unit-test
[ 0 ] [ "0" string>number ] unit-test
[ 0 ] [ "00" string>number ] unit-test
[ 0 ] [ "0,000" string>number ] unit-test
[ 0.0 ] [ "0." string>number ] unit-test
[ 0.0 ] [ "0.0" string>number ] unit-test
[ 0.0 ] [ "0x0.0p0" string>number ] unit-test
@ -256,4 +257,19 @@ unit-test
[ -8 ] [ "-0o10" string>number ] unit-test
[ -2 ] [ "-0b10" string>number ] unit-test
[ 0x7FFF,ABCD ] [ "0x7FFF,ABCD" string>number ] unit-test
[ 1.0 ] [ "0x1.0p0" string>number ] unit-test
[ f ] [ "0x" string>number ] unit-test
[ f ] [ "0b" string>number ] unit-test
[ f ] [ "0o" string>number ] unit-test
[ f ] [ "0x," string>number ] unit-test
[ f ] [ "0b," string>number ] unit-test
[ f ] [ "0o," string>number ] unit-test
[ f ] [ "0x,1" string>number ] unit-test
[ f ] [ "0b,1" string>number ] unit-test
[ f ] [ "0o,1" string>number ] unit-test
[ f ] [ "0x1," string>number ] unit-test
[ f ] [ "0b1," string>number ] unit-test
[ f ] [ "0o1," string>number ] unit-test

View File

@ -217,9 +217,9 @@ DEFER: @neg-digit
: with-radix-char ( i number-parse n radix-quot nonradix-quot -- n/f )
[
rot {
{ CHAR: b [ drop 2 ->radix next-digit ] }
{ CHAR: o [ drop 8 ->radix next-digit ] }
{ CHAR: x [ drop 16 ->radix next-digit ] }
{ CHAR: b [ drop 2 ->radix require-next-digit ] }
{ CHAR: o [ drop 8 ->radix require-next-digit ] }
{ CHAR: x [ drop 16 ->radix require-next-digit ] }
{ f [ 3drop 2drop 0 ] }
[ [ drop ] 2dip swap call ]
} case
@ -228,9 +228,9 @@ DEFER: @neg-digit
: @pos-first-digit ( i number-parse n char -- n/f )
{
{ CHAR: . [ ->required-mantissa ] }
{ CHAR: 0 [ [ @pos-digit ] [ @pos-digit-or-punc ] with-radix-char ] }
{ CHAR: 0 [ [ @pos-first-digit ] [ @pos-digit-or-punc ] with-radix-char ] }
[ @pos-digit ]
} case ; inline
} case ; inline recursive
: @neg-digit-or-punc ( i number-parse n char -- n/f )
{
@ -248,9 +248,9 @@ DEFER: @neg-digit
: @neg-first-digit ( i number-parse n char -- n/f )
{
{ CHAR: . [ ->required-mantissa ] }
{ CHAR: 0 [ [ @neg-digit ] [ @neg-digit-or-punc ] with-radix-char ] }
{ CHAR: 0 [ [ @neg-first-digit ] [ @neg-digit-or-punc ] with-radix-char ] }
[ @neg-digit ]
} case ; inline
} case ; inline recursive
: @first-char ( i number-parse n char -- n/f )
{