py/parsenum: Fix parsing of complex "j" and also "nanj", "infj".

Prior to this commit, complex("j") would return 0j, and complex("nanj")
would return nan+0j.  This commit makes sure "j" is tested for after
parsing the number (nan, inf or a decimal), and also supports the case of
"j" on its own.

Signed-off-by: Damien George <damien@micropython.org>
This commit is contained in:
Damien George
2022-06-21 23:45:27 +10:00
parent 0172292762
commit 61ce260ff7
2 changed files with 14 additions and 3 deletions

View File

@@ -291,9 +291,6 @@ parse_start:
if (str == top) {
goto value_error;
}
} else if (allow_imag && (dig | 0x20) == 'j') {
real_imag_state |= REAL_IMAG_STATE_HAVE_IMAG;
break;
} else if (dig == '_') {
continue;
} else {
@@ -327,6 +324,15 @@ parse_start:
}
}
if (allow_imag && str < top && (*str | 0x20) == 'j') {
if (str == str_val_start) {
// Convert "j" to "1j".
dec_val = 1;
}
++str;
real_imag_state |= REAL_IMAG_STATE_HAVE_IMAG;
}
// negate value if needed
if (dec_neg) {
dec_val = -dec_val;