fix parsing of complex numbers with special single flonums

Closes PR 12839
This commit is contained in:
Matthew Flatt 2012-08-08 15:58:28 -06:00
parent 9d6cb8e50e
commit 4345045b52
2 changed files with 11 additions and 3 deletions

View File

@ -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")

View File

@ -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;