summaryrefslogtreecommitdiffstatshomepage
path: root/py/parse.c
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2014-10-23 14:13:05 +0100
committerDamien George <damien.p.george@gmail.com>2014-10-23 14:13:05 +0100
commite7bb0443cda9bfb88791c3a99bf0331217390eb4 (patch)
tree987ee269887c1d04e9b27e1f6bf514a7e2a2eefb /py/parse.c
parentdd4f4530ab35c162252b003d2713b06eb65903e1 (diff)
downloadmicropython-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.c22
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);
}