Skip to content
Snippets Groups Projects
Commit d72370de authored by Paul Sokolovsky's avatar Paul Sokolovsky
Browse files

py/objfun, vm: Add comments on codestate allocation in stackless mode.

parent fca1d1aa
No related branches found
No related tags found
No related merge requests found
......@@ -218,8 +218,12 @@ mp_code_state_t *mp_obj_fun_bc_prepare_codestate(mp_obj_t self_in, size_t n_args
size_t n_state, state_size;
DECODE_CODESTATE_SIZE(self->bytecode, n_state, state_size);
// allocate state for locals and stack
mp_code_state_t *code_state;
// If we use m_new_obj_var(), then on no memory, MemoryError will be
// raised. But this is not correct exception for a function call,
// RuntimeError should be raised instead. So, we use m_new_obj_var_maybe(),
// return NULL, then vm.c takes the needed action (either raise
// RuntimeError or fallback to stack allocation).
code_state = m_new_obj_var_maybe(mp_code_state_t, byte, state_size);
if (!code_state) {
return NULL;
......
......@@ -937,6 +937,9 @@ unwind_jump:;
deep_recursion_error:
mp_exc_recursion_depth();
}
#else
// If we couldn't allocate codestate on heap, in
// non non-strict case fall thru to stack allocation.
#endif
}
#endif
......@@ -974,6 +977,9 @@ unwind_jump:;
else {
goto deep_recursion_error;
}
#else
// If we couldn't allocate codestate on heap, in
// non non-strict case fall thru to stack allocation.
#endif
}
#endif
......@@ -1008,6 +1014,9 @@ unwind_jump:;
else {
goto deep_recursion_error;
}
#else
// If we couldn't allocate codestate on heap, in
// non non-strict case fall thru to stack allocation.
#endif
}
#endif
......@@ -1045,6 +1054,9 @@ unwind_jump:;
else {
goto deep_recursion_error;
}
#else
// If we couldn't allocate codestate on heap, in
// non non-strict case fall thru to stack allocation.
#endif
}
#endif
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment