diff options
author | Damien George <damien.p.george@gmail.com> | 2014-01-25 11:54:46 +0000 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2014-01-25 11:54:46 +0000 |
commit | e0722ee9d94c0e812a474e349ded5147f6b869f6 (patch) | |
tree | 5b110cd06e817e6ed867a42623b559de91b7da41 | |
parent | 28eb57786d789cf0dc20390b7afb86fc09d1b0f3 (diff) | |
parent | aee2ba70de774f954a793efb73e72faaf4e6524d (diff) | |
download | micropython-e0722ee9d94c0e812a474e349ded5147f6b869f6.tar.gz micropython-e0722ee9d94c0e812a474e349ded5147f6b869f6.zip |
Merge branch 'free-parse-tree' of github.com:pfalcon/micropython into pfalcon-free-parse-tree
-rw-r--r-- | py/parse.c | 14 | ||||
-rw-r--r-- | py/parse.h | 1 | ||||
-rw-r--r-- | unix/main.c | 1 |
3 files changed, 16 insertions, 0 deletions
diff --git a/py/parse.c b/py/parse.c index 3cf909d752..7a8fd3b1f5 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)) { diff --git a/py/parse.h b/py/parse.h index 2801f414ee..b7f1904d99 100644 --- a/py/parse.h +++ b/py/parse.h @@ -53,6 +53,7 @@ typedef struct _mp_parse_node_struct_t { #define MP_PARSE_NODE_STRUCT_NUM_NODES(pns) ((pns)->kind_num_nodes >> 8) mp_parse_node_t mp_parse_node_new_leaf(machine_int_t kind, machine_int_t arg); +int parse_node_free_struct(mp_parse_node_t pn_in); void mp_parse_node_print(mp_parse_node_t pn, int indent); diff --git a/unix/main.c b/unix/main.c index 681bf2aa20..34d9618ca2 100644 --- a/unix/main.c +++ b/unix/main.c @@ -62,6 +62,7 @@ static void execute_from_lexer(mp_lexer_t *lex, mp_parse_input_kind_t input_kind */ mp_obj_t module_fun = mp_compile(pn, source_name, is_repl); + parse_node_free_struct(pn); if (module_fun == mp_const_none) { // compile error |