From aee2ba70de774f954a793efb73e72faaf4e6524d Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sat, 25 Jan 2014 00:56:19 +0200 Subject: Add parse_node_free_struct() and use it to free parse tree after compilation. TODO: Check lexer/parse/compile error path for leaks too. --- py/parse.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'py/parse.c') diff --git a/py/parse.c b/py/parse.c index 3cf909d75..7a8fd3b1f 100644 --- a/py/parse.c +++ b/py/parse.c @@ -135,6 +135,20 @@ mp_parse_node_struct_t *parse_node_new_struct(int src_line, int rule_id, int num return pn; } +int parse_node_free_struct(mp_parse_node_t pn_in) { + int cnt = 0; + if (MP_PARSE_NODE_IS_STRUCT(pn_in)) { + mp_parse_node_struct_t *pn = (mp_parse_node_struct_t *)pn_in; + int n = pn->kind_num_nodes >> 8; + for (int i = 0; i < n; i++) { + cnt += parse_node_free_struct(pn->nodes[i]); + } + m_del_var(mp_parse_node_struct_t, mp_parse_node_t, n, pn); + cnt++; + } + return cnt; +} + #if MICROPY_DEBUG_PRINTERS void mp_parse_node_print(mp_parse_node_t pn, int indent) { if (MP_PARSE_NODE_IS_STRUCT(pn)) { -- cgit v1.2.3