summaryrefslogtreecommitdiff
path: root/py/runtime.c
diff options
context:
space:
mode:
Diffstat (limited to 'py/runtime.c')
-rw-r--r--py/runtime.c190
1 files changed, 102 insertions, 88 deletions
diff --git a/py/runtime.c b/py/runtime.c
index a3acb954a..28ecddd78 100644
--- a/py/runtime.c
+++ b/py/runtime.c
@@ -60,7 +60,7 @@
const mp_obj_module_t mp_module___main__ = {
.base = { &mp_type_module },
- .globals = (mp_obj_dict_t*)&MP_STATE_VM(dict_main),
+ .globals = (mp_obj_dict_t *)&MP_STATE_VM(dict_main),
};
void mp_init(void) {
@@ -73,9 +73,9 @@ void mp_init(void) {
MP_STATE_VM(sched_sp) = 0;
#endif
-#if MICROPY_ENABLE_EMERGENCY_EXCEPTION_BUF
+ #if MICROPY_ENABLE_EMERGENCY_EXCEPTION_BUF
mp_init_emergency_exception_buf();
-#endif
+ #endif
#if MICROPY_KBD_EXCEPTION
// initialise the exception object for raising KeyboardInterrupt
@@ -83,19 +83,19 @@ void mp_init(void) {
MP_STATE_VM(mp_kbd_exception).traceback_alloc = 0;
MP_STATE_VM(mp_kbd_exception).traceback_len = 0;
MP_STATE_VM(mp_kbd_exception).traceback_data = NULL;
- MP_STATE_VM(mp_kbd_exception).args = (mp_obj_tuple_t*)&mp_const_empty_tuple_obj;
+ MP_STATE_VM(mp_kbd_exception).args = (mp_obj_tuple_t *)&mp_const_empty_tuple_obj;
#endif
MP_STATE_VM(mp_reload_exception).base.type = &mp_type_ReloadException;
MP_STATE_VM(mp_reload_exception).traceback_alloc = 0;
MP_STATE_VM(mp_reload_exception).traceback_len = 0;
MP_STATE_VM(mp_reload_exception).traceback_data = NULL;
- MP_STATE_VM(mp_reload_exception).args = (mp_obj_tuple_t*)&mp_const_empty_tuple_obj;
+ MP_STATE_VM(mp_reload_exception).args = (mp_obj_tuple_t *)&mp_const_empty_tuple_obj;
// call port specific initialization if any
-#ifdef MICROPY_PORT_INIT_FUNC
+ #ifdef MICROPY_PORT_INIT_FUNC
MICROPY_PORT_INIT_FUNC;
-#endif
+ #endif
#if MICROPY_ENABLE_COMPILER
// optimization disabled by default
@@ -128,7 +128,7 @@ void mp_init(void) {
#ifdef MICROPY_FSUSERMOUNT
// zero out the pointers to the user-mounted devices
memset(MP_STATE_VM(fs_user_mount) + MICROPY_FATFS_NUM_PERSISTENT, 0,
- sizeof(MP_STATE_VM(fs_user_mount)) - MICROPY_FATFS_NUM_PERSISTENT);
+ sizeof(MP_STATE_VM(fs_user_mount)) - MICROPY_FATFS_NUM_PERSISTENT);
#endif
#if MICROPY_PY_THREAD_GIL
@@ -139,13 +139,13 @@ void mp_init(void) {
}
void mp_deinit(void) {
- //mp_obj_dict_free(&dict_main);
- //mp_map_deinit(&MP_STATE_VM(mp_loaded_modules_map));
+ // mp_obj_dict_free(&dict_main);
+ // mp_map_deinit(&MP_STATE_VM(mp_loaded_modules_map));
// call port specific deinitialization if any
-#ifdef MICROPY_PORT_INIT_FUNC
+ #ifdef MICROPY_PORT_INIT_FUNC
MICROPY_PORT_DEINIT_FUNC;
-#endif
+ #endif
}
mp_obj_t mp_load_name(qstr qst) {
@@ -175,13 +175,13 @@ mp_obj_t mp_load_global(qstr qst) {
}
}
#endif
- elem = mp_map_lookup((mp_map_t*)&mp_module_builtins_globals.map, MP_OBJ_NEW_QSTR(qst), MP_MAP_LOOKUP);
+ elem = mp_map_lookup((mp_map_t *)&mp_module_builtins_globals.map, MP_OBJ_NEW_QSTR(qst), MP_MAP_LOOKUP);
if (elem == NULL) {
#if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
- mp_raise_msg(&mp_type_NameError, translate("name not defined"));
+ mp_raise_msg(&mp_type_NameError, translate("name not defined"));
#else
- nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_NameError,
- translate("name '%q' is not defined"), qst));
+ nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_NameError,
+ translate("name '%q' is not defined"), qst));
#endif
}
}
@@ -276,11 +276,11 @@ mp_obj_t mp_unary_op(mp_unary_op_t op, mp_obj_t arg) {
}
}
#if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
- mp_raise_TypeError(translate("unsupported type for operator"));
+ mp_raise_TypeError(translate("unsupported type for operator"));
#else
- mp_raise_TypeError_varg(
- translate("unsupported type for %q: '%q'"),
- mp_unary_op_method_name[op], mp_obj_get_type_qstr(arg));
+ mp_raise_TypeError_varg(
+ translate("unsupported type for %q: '%q'"),
+ mp_unary_op_method_name[op], mp_obj_get_type_qstr(arg));
#endif
}
}
@@ -359,11 +359,17 @@ mp_obj_t PLACE_IN_ITCM(mp_binary_op)(mp_binary_op_t op, mp_obj_t lhs, mp_obj_t r
// << checked explicitly
switch (op) {
case MP_BINARY_OP_OR:
- case MP_BINARY_OP_INPLACE_OR: lhs_val |= rhs_val; break;
+ case MP_BINARY_OP_INPLACE_OR:
+ lhs_val |= rhs_val;
+ break;
case MP_BINARY_OP_XOR:
- case MP_BINARY_OP_INPLACE_XOR: lhs_val ^= rhs_val; break;
+ case MP_BINARY_OP_INPLACE_XOR:
+ lhs_val ^= rhs_val;
+ break;
case MP_BINARY_OP_AND:
- case MP_BINARY_OP_INPLACE_AND: lhs_val &= rhs_val; break;
+ case MP_BINARY_OP_INPLACE_AND:
+ lhs_val &= rhs_val;
+ break;
case MP_BINARY_OP_LSHIFT:
case MP_BINARY_OP_INPLACE_LSHIFT: {
if (rhs_val < 0) {
@@ -395,9 +401,13 @@ mp_obj_t PLACE_IN_ITCM(mp_binary_op)(mp_binary_op_t op, mp_obj_t lhs, mp_obj_t r
}
break;
case MP_BINARY_OP_ADD:
- case MP_BINARY_OP_INPLACE_ADD: lhs_val += rhs_val; break;
+ case MP_BINARY_OP_INPLACE_ADD:
+ lhs_val += rhs_val;
+ break;
case MP_BINARY_OP_SUBTRACT:
- case MP_BINARY_OP_INPLACE_SUBTRACT: lhs_val -= rhs_val; break;
+ case MP_BINARY_OP_INPLACE_SUBTRACT:
+ lhs_val -= rhs_val;
+ break;
case MP_BINARY_OP_MULTIPLY:
case MP_BINARY_OP_INPLACE_MULTIPLY: {
@@ -498,10 +508,14 @@ mp_obj_t PLACE_IN_ITCM(mp_binary_op)(mp_binary_op_t op, mp_obj_t lhs, mp_obj_t r
return MP_OBJ_FROM_PTR(tuple);
}
- case MP_BINARY_OP_LESS: return mp_obj_new_bool(lhs_val < rhs_val);
- case MP_BINARY_OP_MORE: return mp_obj_new_bool(lhs_val > rhs_val);
- case MP_BINARY_OP_LESS_EQUAL: return mp_obj_new_bool(lhs_val <= rhs_val);
- case MP_BINARY_OP_MORE_EQUAL: return mp_obj_new_bool(lhs_val >= rhs_val);
+ case MP_BINARY_OP_LESS:
+ return mp_obj_new_bool(lhs_val < rhs_val);
+ case MP_BINARY_OP_MORE:
+ return mp_obj_new_bool(lhs_val > rhs_val);
+ case MP_BINARY_OP_LESS_EQUAL:
+ return mp_obj_new_bool(lhs_val <= rhs_val);
+ case MP_BINARY_OP_MORE_EQUAL:
+ return mp_obj_new_bool(lhs_val >= rhs_val);
default:
goto unsupported_op;
@@ -512,7 +526,7 @@ mp_obj_t PLACE_IN_ITCM(mp_binary_op)(mp_binary_op_t op, mp_obj_t lhs, mp_obj_t r
} else {
return mp_obj_new_int(lhs_val);
}
-#if MICROPY_PY_BUILTINS_FLOAT
+ #if MICROPY_PY_BUILTINS_FLOAT
} else if (mp_obj_is_float(rhs)) {
mp_obj_t res = mp_obj_float_binary_op(op, lhs_val, rhs);
if (res == MP_OBJ_NULL) {
@@ -520,7 +534,7 @@ mp_obj_t PLACE_IN_ITCM(mp_binary_op)(mp_binary_op_t op, mp_obj_t lhs, mp_obj_t r
} else {
return res;
}
-#if MICROPY_PY_BUILTINS_COMPLEX
+ #if MICROPY_PY_BUILTINS_COMPLEX
} else if (MP_OBJ_IS_TYPE(rhs, &mp_type_complex)) {
mp_obj_t res = mp_obj_complex_binary_op(op, lhs_val, 0, rhs);
if (res == MP_OBJ_NULL) {
@@ -528,8 +542,8 @@ mp_obj_t PLACE_IN_ITCM(mp_binary_op)(mp_binary_op_t op, mp_obj_t lhs, mp_obj_t r
} else {
return res;
}
-#endif
-#endif
+ #endif
+ #endif
}
}
@@ -552,7 +566,7 @@ generic_binary_op:
}
}
-#if MICROPY_PY_REVERSE_SPECIAL_METHODS
+ #if MICROPY_PY_REVERSE_SPECIAL_METHODS
if (op >= MP_BINARY_OP_OR && op <= MP_BINARY_OP_REVERSE_POWER) {
mp_obj_t t = rhs;
rhs = lhs;
@@ -565,7 +579,7 @@ generic_binary_op:
// Convert __rop__ back to __op__ for error message
op -= MP_BINARY_OP_REVERSE_OR - MP_BINARY_OP_OR;
}
-#endif
+ #endif
if (op == MP_BINARY_OP_CONTAINS) {
// If type didn't support containment then explicitly walk the iterator.
@@ -583,11 +597,11 @@ generic_binary_op:
unsupported_op:
#if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
- mp_raise_TypeError(translate("unsupported type for operator"));
+ mp_raise_TypeError(translate("unsupported type for operator"));
#else
- mp_raise_TypeError_varg(
- translate("unsupported types for %q: '%q', '%q'"),
- mp_binary_op_method_name[op], mp_obj_get_type_qstr(lhs), mp_obj_get_type_qstr(rhs));
+ mp_raise_TypeError_varg(
+ translate("unsupported types for %q: '%q', '%q'"),
+ mp_binary_op_method_name[op], mp_obj_get_type_qstr(lhs), mp_obj_get_type_qstr(rhs));
#endif
zero_division:
@@ -625,9 +639,9 @@ mp_obj_t mp_call_function_n_kw(mp_obj_t fun_in, size_t n_args, size_t n_kw, cons
}
#if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
- mp_raise_TypeError(translate("object not callable"));
+ mp_raise_TypeError(translate("object not callable"));
#else
- mp_raise_TypeError_varg(translate("'%q' object is not callable"), mp_obj_get_type_qstr(fun_in));
+ mp_raise_TypeError_varg(translate("'%q' object is not callable"), mp_obj_get_type_qstr(fun_in));
#endif
}
@@ -853,17 +867,17 @@ void mp_unpack_sequence(mp_obj_t seq_in, size_t num, mp_obj_t *items) {
too_short:
#if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
- mp_raise_ValueError(translate("wrong number of values to unpack"));
+ mp_raise_ValueError(translate("wrong number of values to unpack"));
#else
- mp_raise_ValueError_varg(translate("need more than %d values to unpack"),
- (int)seq_len);
+ mp_raise_ValueError_varg(translate("need more than %d values to unpack"),
+ (int)seq_len);
#endif
too_long:
#if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
- mp_raise_ValueError(translate("wrong number of values to unpack"));
+ mp_raise_ValueError(translate("wrong number of values to unpack"));
#else
- mp_raise_ValueError_varg(translate("too many values to unpack (expected %d)"),
- (int)num);
+ mp_raise_ValueError_varg(translate("too many values to unpack (expected %d)"),
+ (int)num);
#endif
}
@@ -917,10 +931,10 @@ void mp_unpack_ex(mp_obj_t seq_in, size_t num_in, mp_obj_t *items) {
too_short:
#if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
- mp_raise_ValueError(translate("wrong number of values to unpack"));
+ mp_raise_ValueError(translate("wrong number of values to unpack"));
#else
- mp_raise_ValueError_varg(translate("need more than %d values to unpack"),
- (int)seq_len);
+ mp_raise_ValueError_varg(translate("need more than %d values to unpack"),
+ (int)seq_len);
#endif
}
@@ -989,7 +1003,7 @@ STATIC mp_obj_t mp_obj_new_checked_fun(const mp_obj_type_t *type, mp_obj_t fun)
void mp_convert_member_lookup(mp_obj_t self, const mp_obj_type_t *type, mp_obj_t member, mp_obj_t *dest) {
if (MP_OBJ_IS_TYPE(member, &mp_type_staticmethod)) {
// return just the function
- dest[0] = ((mp_obj_static_class_method_t*)MP_OBJ_TO_PTR(member))->fun;
+ dest[0] = ((mp_obj_static_class_method_t *)MP_OBJ_TO_PTR(member))->fun;
} else if (MP_OBJ_IS_TYPE(member, &mp_type_classmethod)) {
// return a bound method, with self being the type of this object
// this type should be the type of the original instance, not the base
@@ -997,18 +1011,18 @@ void mp_convert_member_lookup(mp_obj_t self, const mp_obj_type_t *type, mp_obj_t
if (self != MP_OBJ_NULL) {
type = mp_obj_get_type(self);
}
- dest[0] = ((mp_obj_static_class_method_t*)MP_OBJ_TO_PTR(member))->fun;
+ dest[0] = ((mp_obj_static_class_method_t *)MP_OBJ_TO_PTR(member))->fun;
dest[1] = MP_OBJ_FROM_PTR(type);
} else if (MP_OBJ_IS_TYPE(member, &mp_type_type)) {
// Don't try to bind types (even though they're callable)
dest[0] = member;
} else if (MP_OBJ_IS_FUN(member)
- || (MP_OBJ_IS_OBJ(member)
- && (((mp_obj_base_t*)MP_OBJ_TO_PTR(member))->type->name == MP_QSTR_closure
- || ((mp_obj_base_t*)MP_OBJ_TO_PTR(member))->type->name == MP_QSTR_generator))) {
+ || (MP_OBJ_IS_OBJ(member)
+ && (((mp_obj_base_t *)MP_OBJ_TO_PTR(member))->type->name == MP_QSTR_closure
+ || ((mp_obj_base_t *)MP_OBJ_TO_PTR(member))->type->name == MP_QSTR_generator))) {
// only functions, closures and generators objects can be bound to self
#if MICROPY_BUILTIN_METHOD_CHECK_SELF_ARG
- const mp_obj_type_t *m_type = ((mp_obj_base_t*)MP_OBJ_TO_PTR(member))->type;
+ const mp_obj_type_t *m_type = ((mp_obj_base_t *)MP_OBJ_TO_PTR(member))->type;
if (self == MP_OBJ_NULL
&& (m_type == &mp_type_fun_builtin_0
|| m_type == &mp_type_fun_builtin_1
@@ -1025,7 +1039,7 @@ void mp_convert_member_lookup(mp_obj_t self, const mp_obj_type_t *type, mp_obj_t
dest[0] = member;
dest[1] = self;
}
- #if MICROPY_PY_BUILTINS_PROPERTY
+ #if MICROPY_PY_BUILTINS_PROPERTY
// If self is MP_OBJ_NULL, we looking at the class itself, not an instance.
} else if (MP_OBJ_IS_TYPE(member, &mp_type_property) && mp_obj_is_native_type(type) && self != MP_OBJ_NULL) {
// object member is a property; delegate the load to the property
@@ -1041,7 +1055,7 @@ void mp_convert_member_lookup(mp_obj_t self, const mp_obj_type_t *type, mp_obj_t
} else {
dest[0] = mp_call_function_n_kw(proxy[0], 1, 0, &self);
}
- #endif
+ #endif
} else {
// class member is a value, so just return that value
dest[0] = member;
@@ -1061,11 +1075,11 @@ void mp_load_method_maybe(mp_obj_t obj, qstr attr, mp_obj_t *dest) {
// look for built-in names
if (0) {
-#if MICROPY_CPYTHON_COMPAT
+ #if MICROPY_CPYTHON_COMPAT
} else if (attr == MP_QSTR___class__) {
// a.__class__ is equivalent to type(a)
dest[0] = MP_OBJ_FROM_PTR(type);
-#endif
+ #endif
} else if (attr == MP_QSTR___next__ && type->iternext != NULL) {
dest[0] = MP_OBJ_FROM_PTR(&mp_builtin_next_obj);
@@ -1095,22 +1109,22 @@ void mp_load_method(mp_obj_t base, qstr attr, mp_obj_t *dest) {
if (dest[0] == MP_OBJ_NULL) {
// no attribute/method called attr
#if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
- mp_raise_AttributeError(translate("no such attribute"));
+ mp_raise_AttributeError(translate("no such attribute"));
#elif MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_DETAILED
- // following CPython, we give a more detailed error message for type objects
- if (MP_OBJ_IS_TYPE(base, &mp_type_type)) {
- nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_AttributeError,
- translate("type object '%q' has no attribute '%q'"),
- ((mp_obj_type_t*)MP_OBJ_TO_PTR(base))->name, attr));
- } else {
- nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_AttributeError,
- translate("'%q' object has no attribute '%q'"),
- mp_obj_get_type_qstr(base), attr));
- }
- #else
+ // following CPython, we give a more detailed error message for type objects
+ if (MP_OBJ_IS_TYPE(base, &mp_type_type)) {
+ nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_AttributeError,
+ translate("type object '%q' has no attribute '%q'"),
+ ((mp_obj_type_t *)MP_OBJ_TO_PTR(base))->name, attr));
+ } else {
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_AttributeError,
translate("'%q' object has no attribute '%q'"),
mp_obj_get_type_qstr(base), attr));
+ }
+ #else
+ nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_AttributeError,
+ translate("'%q' object has no attribute '%q'"),
+ mp_obj_get_type_qstr(base), attr));
#endif
}
}
@@ -1123,7 +1137,7 @@ void mp_load_method_protected(mp_obj_t obj, qstr attr, mp_obj_t *dest, bool catc
nlr_pop();
} else {
if (!catch_all_exc
- && !mp_obj_is_subclass_fast(MP_OBJ_FROM_PTR(((mp_obj_base_t*)nlr.ret_val)->type),
+ && !mp_obj_is_subclass_fast(MP_OBJ_FROM_PTR(((mp_obj_base_t *)nlr.ret_val)->type),
MP_OBJ_FROM_PTR(&mp_type_AttributeError))) {
// Re-raise the exception
nlr_raise(MP_OBJ_FROM_PTR(nlr.ret_val));
@@ -1173,11 +1187,11 @@ void mp_store_attr(mp_obj_t base, qstr attr, mp_obj_t value) {
#endif
}
#if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
- mp_raise_AttributeError(translate("no such attribute"));
+ mp_raise_AttributeError(translate("no such attribute"));
#else
- nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_AttributeError,
- translate("'%q' object cannot assign attribute '%q'"),
- mp_obj_get_type_qstr(base), attr));
+ nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_AttributeError,
+ translate("'%q' object cannot assign attribute '%q'"),
+ mp_obj_get_type_qstr(base), attr));
#endif
}
@@ -1214,10 +1228,10 @@ mp_obj_t mp_getiter(mp_obj_t o_in, mp_obj_iter_buf_t *iter_buf) {
// object not iterable
#if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
- mp_raise_TypeError(translate("object not iterable"));
+ mp_raise_TypeError(translate("object not iterable"));
#else
- mp_raise_TypeError_varg(
- translate("'%q' object is not iterable"), mp_obj_get_type_qstr(o_in));
+ mp_raise_TypeError_varg(
+ translate("'%q' object is not iterable"), mp_obj_get_type_qstr(o_in));
#endif
}
@@ -1236,10 +1250,10 @@ mp_obj_t mp_iternext_allow_raise(mp_obj_t o_in) {
return mp_call_method_n_kw(0, 0, dest);
} else {
#if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
- mp_raise_TypeError(translate("object not an iterator"));
+ mp_raise_TypeError(translate("object not an iterator"));
#else
- mp_raise_TypeError_varg(translate("'%q' object is not an iterator"),
- mp_obj_get_type_qstr(o_in));
+ mp_raise_TypeError_varg(translate("'%q' object is not an iterator"),
+ mp_obj_get_type_qstr(o_in));
#endif
}
}
@@ -1264,7 +1278,7 @@ mp_obj_t mp_iternext(mp_obj_t o_in) {
nlr_pop();
return ret;
} else {
- if (mp_obj_is_subclass_fast(MP_OBJ_FROM_PTR(((mp_obj_base_t*)nlr.ret_val)->type), MP_OBJ_FROM_PTR(&mp_type_StopIteration))) {
+ if (mp_obj_is_subclass_fast(MP_OBJ_FROM_PTR(((mp_obj_base_t *)nlr.ret_val)->type), MP_OBJ_FROM_PTR(&mp_type_StopIteration))) {
return MP_OBJ_STOP_ITERATION;
} else {
nlr_jump(nlr.ret_val);
@@ -1272,10 +1286,10 @@ mp_obj_t mp_iternext(mp_obj_t o_in) {
}
} else {
#if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
- mp_raise_TypeError(translate("object not an iterator"));
+ mp_raise_TypeError(translate("object not an iterator"));
#else
- mp_raise_TypeError_varg(translate("'%q' object is not an iterator"),
- mp_obj_get_type_qstr(o_in));
+ mp_raise_TypeError_varg(translate("'%q' object is not an iterator"),
+ mp_obj_get_type_qstr(o_in));
#endif
}
}
@@ -1405,7 +1419,7 @@ mp_obj_t mp_import_from(mp_obj_t module, qstr name) {
if (dest[1] != MP_OBJ_NULL) {
// Hopefully we can't import bound method from an object
-import_error:
+ import_error:
mp_raise_msg_varg(&mp_type_ImportError, translate("cannot import name %q"), name);
}