diff options
| author | Damien George <damien@micropython.org> | 2022-06-21 23:45:27 +1000 |
|---|---|---|
| committer | Damien George <damien@micropython.org> | 2022-06-23 11:46:47 +1000 |
| commit | 61ce260ff73b1191a9190c8cac7a7a1bd5b2f274 (patch) | |
| tree | 10420f6c4f2bc59f24031d17de28690f41c40e38 /py/parsenum.c | |
| parent | 0172292762649db91f588107b2163ab6449dc7ca (diff) | |
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>
Diffstat (limited to 'py/parsenum.c')
| -rw-r--r-- | py/parsenum.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/py/parsenum.c b/py/parsenum.c index 848a7732d..b90dfaaaf 100644 --- a/py/parsenum.c +++ b/py/parsenum.c @@ -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; |
