From f20375eedd22eeee5f1b273f891631bed8878cdc Mon Sep 17 00:00:00 2001 From: Damien George Date: Tue, 12 Aug 2014 19:57:52 +0100 Subject: [PATCH] py: Add .real and .imag attributes to complex numbers. --- py/objcomplex.c | 10 ++++++++++ py/qstrdefs.h | 4 ++++ 2 files changed, 14 insertions(+) diff --git a/py/objcomplex.c b/py/objcomplex.c index 20e7c97d37..0c58dee659 100644 --- a/py/objcomplex.c +++ b/py/objcomplex.c @@ -132,6 +132,15 @@ STATIC mp_obj_t complex_binary_op(int op, mp_obj_t lhs_in, mp_obj_t rhs_in) { return mp_obj_complex_binary_op(op, lhs->real, lhs->imag, rhs_in); } +STATIC void complex_load_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest) { + mp_obj_complex_t *self = self_in; + if (attr == MP_QSTR_real) { + dest[0] = mp_obj_new_float(self->real); + } else if (attr == MP_QSTR_imag) { + dest[0] = mp_obj_new_float(self->imag); + } +} + const mp_obj_type_t mp_type_complex = { { &mp_type_type }, .name = MP_QSTR_complex, @@ -139,6 +148,7 @@ const mp_obj_type_t mp_type_complex = { .make_new = complex_make_new, .unary_op = complex_unary_op, .binary_op = complex_binary_op, + .load_attr = complex_load_attr, }; mp_obj_t mp_obj_new_complex(mp_float_t real, mp_float_t imag) { diff --git a/py/qstrdefs.h b/py/qstrdefs.h index 9a6953d01f..16360e73e0 100644 --- a/py/qstrdefs.h +++ b/py/qstrdefs.h @@ -136,7 +136,11 @@ Q(calcsize) Q(chr) Q(classmethod) Q(_collections) +#if MICROPY_PY_BUILTINS_COMPLEX Q(complex) +Q(real) +Q(imag) +#endif Q(dict) Q(dir) Q(divmod)