diff options
author | Damien George <damien.p.george@gmail.com> | 2014-04-10 14:27:31 +0000 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2014-04-10 14:27:31 +0000 |
commit | 58ba4c3b4c12e9bf6b8731fd26e0c9cac527122f (patch) | |
tree | a0fce39198f5a192e780016ef3608813a351573a /py/misc.h | |
parent | ffa9bddfc4006aebb2689826f700ea167f4de54d (diff) | |
download | micropython-58ba4c3b4c12e9bf6b8731fd26e0c9cac527122f.tar.gz micropython-58ba4c3b4c12e9bf6b8731fd26e0c9cac527122f.zip |
py: Check explicitly for memory allocation failure in parser.
Previously, a failed malloc/realloc would throw an exception, which was
not caught. I think it's better to keep the parser free from NLR
(exception throwing), hence this patch.
Diffstat (limited to 'py/misc.h')
-rw-r--r-- | py/misc.h | 3 |
1 files changed, 3 insertions, 0 deletions
@@ -27,12 +27,14 @@ typedef unsigned int uint; #define m_new0(type, num) ((type*)(m_malloc0(sizeof(type) * (num)))) #define m_new_obj(type) (m_new(type, 1)) #define m_new_obj_var(obj_type, var_type, var_num) ((obj_type*)m_malloc(sizeof(obj_type) + sizeof(var_type) * (var_num))) +#define m_new_obj_var_maybe(obj_type, var_type, var_num) ((obj_type*)m_malloc_maybe(sizeof(obj_type) + sizeof(var_type) * (var_num))) #if MICROPY_ENABLE_FINALISER #define m_new_obj_with_finaliser(type) ((type*)(m_malloc_with_finaliser(sizeof(type)))) #else #define m_new_obj_with_finaliser(type) m_new_obj(type) #endif #define m_renew(type, ptr, old_num, new_num) ((type*)(m_realloc((ptr), sizeof(type) * (old_num), sizeof(type) * (new_num)))) +#define m_renew_maybe(type, ptr, old_num, new_num) ((type*)(m_realloc_maybe((ptr), sizeof(type) * (old_num), sizeof(type) * (new_num)))) #define m_del(type, ptr, num) m_free(ptr, sizeof(type) * (num)) #define m_del_obj(type, ptr) (m_del(type, ptr, 1)) #define m_del_var(obj_type, var_type, var_num, ptr) (m_free(ptr, sizeof(obj_type) + sizeof(var_type) * (var_num))) @@ -42,6 +44,7 @@ void *m_malloc_maybe(int num_bytes); void *m_malloc_with_finaliser(int num_bytes); void *m_malloc0(int num_bytes); void *m_realloc(void *ptr, int old_num_bytes, int new_num_bytes); +void *m_realloc_maybe(void *ptr, int old_num_bytes, int new_num_bytes); void m_free(void *ptr, int num_bytes); void *m_malloc_fail(int num_bytes); |