From 89d3c0c61636378cbdaae555179e4b194c279299 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sun, 20 Jul 2008 00:56:25 -0500 Subject: [PATCH] Fix negative zero --- core/math/parser/parser-tests.factor | 6 ++---- core/math/parser/parser.factor | 15 ++++++++------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/core/math/parser/parser-tests.factor b/core/math/parser/parser-tests.factor index 15234ee310..0da0b8fb25 100755 --- a/core/math/parser/parser-tests.factor +++ b/core/math/parser/parser-tests.factor @@ -77,10 +77,6 @@ unit-test [ "-101.0e-2" string>number number>string ] unit-test -[ 5.0 ] -[ "10.0/2" string>number ] -unit-test - [ f ] [ "1e1/2" string>number ] unit-test @@ -104,3 +100,5 @@ unit-test [ "1.0/0.0" ] [ 1.0 0.0 / number>string ] unit-test [ "-1.0/0.0" ] [ -1.0 0.0 / number>string ] unit-test + +[ "-0.0" ] [ -0.0 number>string ] unit-test diff --git a/core/math/parser/parser.factor b/core/math/parser/parser.factor index 5d048f0b8e..718410d293 100755 --- a/core/math/parser/parser.factor +++ b/core/math/parser/parser.factor @@ -73,13 +73,14 @@ PRIVATE> : base> ( str radix -- n/f ) [ - "-" ?head dup negative? set >r - { - { [ CHAR: / over member? ] [ string>ratio ] } - { [ CHAR: . over member? ] [ string>float ] } - [ string>integer ] - } cond - r> [ dup [ neg ] when ] when + CHAR: . over member? [ + string>float + ] [ + "-" ?head dup negative? set >r + CHAR: / over member? + [ string>ratio ] [ string>integer ] if + r> [ dup [ neg ] when ] when + ] if ] with-radix ; : string>number ( str -- n/f ) 10 base> ;