summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Sokolovsky <pfalcon@users.sourceforge.net>2017-12-09 10:57:40 +0200
committerPaul Sokolovsky <pfalcon@users.sourceforge.net>2017-12-09 11:01:34 +0200
commitd72370def72c74ca98c1ec4eb7b58ba0fbcc9629 (patch)
tree6fe46b90e93d71850b529d86c144ba4275b80c01
parentfca1d1aa62306fc523d192c1e2dd2d20dccbe94f (diff)
py/objfun, vm: Add comments on codestate allocation in stackless mode.
-rw-r--r--py/objfun.c6
-rw-r--r--py/vm.c12
2 files changed, 17 insertions, 1 deletions
diff --git a/py/objfun.c b/py/objfun.c
index 445f25d46..e27413e40 100644
--- a/py/objfun.c
+++ b/py/objfun.c
@@ -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;
diff --git a/py/vm.c b/py/vm.c
index 564200037..e6679729b 100644
--- a/py/vm.c
+++ b/py/vm.c
@@ -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