diff --git a/ChangeLog b/ChangeLog index db9ecafbfe..aa046c18dc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Sun Nov 18 00:50:44 2012 Tadayoshi Funaba + + * complex.c (read_comp): fixed handling of polar form. + Sun Nov 18 00:14:46 2012 Tadayoshi Funaba * complex.c (string_to_c_strict, string_to_c): rewrote without regexp. diff --git a/complex.c b/complex.c index 5cebf96522..f887ebeda9 100644 --- a/complex.c +++ b/complex.c @@ -1668,16 +1668,24 @@ read_comp(const char **s, int strict, } if (**s == '@') { + int st; + (*s)++; bb = *b; - if (!read_rat(s, strict, b)) { - num = rb_complex_raw2(num, ZERO); + if (!(isdigit((unsigned char)**s) || + **s == '-' || **s == '+' || + **s == '.')) { + *ret = rb_complex_raw2(num, ZERO); return 0; /* e.g. "1@x" */ } + st = read_rat(s, strict, b); **b = '\0'; num2 = str2num(bb); *ret = rb_complex_polar(num, num2); - return 1; /* e.g. "1@2" */ + if (!st) + return 0; /* e.g. "1@2." */ + else + return 1; /* e.g. "1@2" */ } if (**s == '-' || **s == '+') {