diff options
author | Damien George <damien.p.george@gmail.com> | 2014-10-23 14:13:05 +0100 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2014-10-23 14:13:05 +0100 |
commit | e7bb0443cda9bfb88791c3a99bf0331217390eb4 (patch) | |
tree | 987ee269887c1d04e9b27e1f6bf514a7e2a2eefb /py/parse.c | |
parent | dd4f4530ab35c162252b003d2713b06eb65903e1 (diff) | |
download | micropython-e7bb0443cda9bfb88791c3a99bf0331217390eb4.tar.gz micropython-e7bb0443cda9bfb88791c3a99bf0331217390eb4.zip |
py: Properly free string parse-node; add assertion to gc_free.
Diffstat (limited to 'py/parse.c')
-rw-r--r-- | py/parse.c | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/py/parse.c b/py/parse.c index 9508b82a02..092f6e65f3 100644 --- a/py/parse.c +++ b/py/parse.c @@ -180,17 +180,17 @@ void mp_parse_node_free(mp_parse_node_t pn) { mp_uint_t rule_id = MP_PARSE_NODE_STRUCT_KIND(pns); if (rule_id == RULE_string) { m_del(char, (char*)pns->nodes[0], (mp_uint_t)pns->nodes[1]); - return; - } - bool adjust = ADD_BLANK_NODE(rule_id); - if (adjust) { - n--; - } - for (mp_uint_t i = 0; i < n; i++) { - mp_parse_node_free(pns->nodes[i]); - } - if (adjust) { - n++; + } else { + bool adjust = ADD_BLANK_NODE(rule_id); + if (adjust) { + n--; + } + for (mp_uint_t i = 0; i < n; i++) { + mp_parse_node_free(pns->nodes[i]); + } + if (adjust) { + n++; + } } m_del_var(mp_parse_node_struct_t, mp_parse_node_t, n, pns); } |