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:
parent
0172292762
commit
61ce260ff7
|
@ -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;
|
||||
|
|
|
@ -4,14 +4,19 @@
|
|||
print(complex(1))
|
||||
print(complex(1.2))
|
||||
print(complex(1.2j))
|
||||
print(complex("j"))
|
||||
print(complex("J"))
|
||||
print(complex("1"))
|
||||
print(complex("1.2"))
|
||||
print(complex("1.2j"))
|
||||
print(complex("1+j"))
|
||||
print(complex("1+2j"))
|
||||
print(complex("-1-2j"))
|
||||
print(complex("+1-2j"))
|
||||
print(complex(" -1-2j "))
|
||||
print(complex(" +1-2j "))
|
||||
print(complex("nanj"))
|
||||
print(complex("nan-infj"))
|
||||
print(complex(1, 2))
|
||||
print(complex(1j, 2j))
|
||||
|
||||
|
|
Loading…
Reference in New Issue