From 4345045b520d612147b8dd428fc2ed5fd7f199cc Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Wed, 8 Aug 2012 15:58:28 -0600 Subject: [PATCH] fix parsing of complex numbers with special single flonums Closes PR 12839 --- collects/tests/racket/numstrs.rktl | 8 ++++++++ src/racket/src/numstr.c | 6 +++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/collects/tests/racket/numstrs.rktl b/collects/tests/racket/numstrs.rktl index 8349eb0bdf..88e0d55e0d 100644 --- a/collects/tests/racket/numstrs.rktl +++ b/collects/tests/racket/numstrs.rktl @@ -117,6 +117,14 @@ (500000000 "#e1/2#e10") (16140901064495857664-50176i "#e#x+e#s+e@-e#l-e") + (,(make-rectangular -inf.f 3.1415927f0) "-inf.f+3.1415927f0i") + (,(make-rectangular -inf.0 3.1415927) "-inf.f+3.1415927i") + (,(make-rectangular 3.1415927f0 -inf.f) "3.1415927f0-inf.fi") + (,(make-rectangular 3.1415927 -inf.0) "3.1415927-inf.fi") + (,(make-rectangular +inf.f -inf.f) "+inf.f-inf.fi") + (,(make-rectangular +inf.0 -inf.0) "+inf.0-inf.fi") + (,(make-rectangular +inf.0 -inf.0) "+inf.f-inf.0i") + (#f "d") (D "D") (#f "i") diff --git a/src/racket/src/numstr.c b/src/racket/src/numstr.c index 79e8150011..b7dc024f2f 100644 --- a/src/racket/src/numstr.c +++ b/src/racket/src/numstr.c @@ -500,7 +500,7 @@ Scheme_Object *scheme_read_number(const mzchar *str, intptr_t len, } /* look for +inf.0, etc: */ - if (len -delta == 6) { + if (len - delta == 6) { Scheme_Object *special; special = read_special_number(str, delta); if (special) { @@ -525,7 +525,7 @@ Scheme_Object *scheme_read_number(const mzchar *str, intptr_t len, s2 = (mzchar *)scheme_malloc_atomic((len - delta - 6 + 4 + 1) * sizeof(mzchar)); s2[0] = '+'; s2[1] = '0'; - s2[2] = '.'; + s2[2] = (SCHEME_DBLP(special) ? '.' : 's'); s2[3] = '0'; memcpy(s2 + 4, str + delta + 6, (len - delta - 5) * sizeof(mzchar)); } else { @@ -536,7 +536,7 @@ Scheme_Object *scheme_read_number(const mzchar *str, intptr_t len, memcpy(s2, str + delta, (len - delta - 7) * sizeof(mzchar)); s2[len - delta - 7] = '+'; s2[len - delta - 7 + 1] = '0'; - s2[len - delta - 7 + 2] = '.'; + s2[len - delta - 7 + 2] = (SCHEME_DBLP(special) ? '.' : 's'); s2[len - delta - 7 + 3] = '0'; s2[len - delta - 7 + 4] = 'i'; s2[len - delta - 7 + 5] = 0;