aboutsummaryrefslogtreecommitdiff
path: root/py/parsenum.c
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2014-03-21 11:45:46 +0000
committerDamien George <damien.p.george@gmail.com>2014-03-21 11:45:46 +0000
commit6e48f7fa856e4acaf085dfc8876c4e3772d979c2 (patch)
tree46c65f64490eae2818fbf9bf334a558453be9e88 /py/parsenum.c
parentc06ea7abf249765bf93595fc42656eed585d7a47 (diff)
py: Allow 'complex()' to take a string as first argument.
Diffstat (limited to 'py/parsenum.c')
-rw-r--r--py/parsenum.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/py/parsenum.c b/py/parsenum.c
index b1a70c352..77f00957c 100644
--- a/py/parsenum.c
+++ b/py/parsenum.c
@@ -88,7 +88,7 @@ mp_obj_t mp_parse_num_integer(const char *restrict str, uint len, int base) {
#define PARSE_DEC_IN_FRAC (2)
#define PARSE_DEC_IN_EXP (3)
-mp_obj_t mp_parse_num_decimal(const char *str, uint len, bool allow_imag) {
+mp_obj_t mp_parse_num_decimal(const char *str, uint len, bool allow_imag, bool force_complex) {
#if MICROPY_ENABLE_FLOAT
const char *top = str + len;
mp_float_t dec_val = 0;
@@ -129,7 +129,7 @@ mp_obj_t mp_parse_num_decimal(const char *str, uint len, bool allow_imag) {
dec_val = MICROPY_FLOAT_C_FUN(nan)("");
}
} else {
- // parse the digits
+ // string should be a decimal number
int in = PARSE_DEC_IN_INTG;
bool exp_neg = false;
int exp_val = 0;
@@ -198,6 +198,8 @@ mp_obj_t mp_parse_num_decimal(const char *str, uint len, bool allow_imag) {
// return the object
if (imag) {
return mp_obj_new_complex(0, dec_val);
+ } else if (force_complex) {
+ return mp_obj_new_complex(dec_val, 0);
} else {
return mp_obj_new_float(dec_val);
}