Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
TASTE
uPython-mirror
Commits
fd313585
Commit
fd313585
authored
Jan 23, 2014
by
Paul Sokolovsky
Browse files
mp_compile(): Properly free module_scope and all nested scopes.
parent
624ed5d5
Changes
3
Hide whitespace changes
Inline
Side-by-side
py/compile.c
View file @
fd313585
...
...
@@ -3156,6 +3156,12 @@ mp_obj_t mp_compile(mp_parse_node_t pn, qstr source_file, bool is_repl) {
bool
had_error
=
comp
->
had_error
;
m_del_obj
(
compiler_t
,
comp
);
uint
unique_code_id
=
module_scope
->
unique_code_id
;
for
(
scope_t
*
s
=
module_scope
;
s
;)
{
scope_t
*
next
=
s
->
next
;
scope_free
(
s
);
s
=
next
;
}
if
(
had_error
)
{
// TODO return a proper error message
...
...
@@ -3163,11 +3169,11 @@ mp_obj_t mp_compile(mp_parse_node_t pn, qstr source_file, bool is_repl) {
}
else
{
#if MICROPY_EMIT_CPYTHON
// can't create code, so just return true
(
void
)
modul
e_
s
co
pe
;
// to suppress warning that module_scope is unused
(
void
)
uniqu
e_co
de_id
;
// to suppress warning that module_scope is unused
return
mp_const_true
;
#else
// return function that executes the outer module
return
rt_make_function_from_id
(
module_scope
->
unique_code_id
);
return
rt_make_function_from_id
(
unique_code_id
);
#endif
}
}
py/scope.c
View file @
fd313585
...
...
@@ -60,6 +60,11 @@ scope_t *scope_new(scope_kind_t kind, mp_parse_node_t pn, qstr source_file, uint
return
scope
;
}
void
scope_free
(
scope_t
*
scope
)
{
m_del
(
id_info_t
,
scope
->
id_info
,
scope
->
id_info_alloc
);
m_del
(
scope_t
,
scope
,
1
);
}
id_info_t
*
scope_find_or_add_id
(
scope_t
*
scope
,
qstr
qstr
,
bool
*
added
)
{
for
(
int
i
=
0
;
i
<
scope
->
id_info_len
;
i
++
)
{
if
(
scope
->
id_info
[
i
].
qstr
==
qstr
)
{
...
...
py/scope.h
View file @
fd313585
...
...
@@ -56,6 +56,7 @@ typedef struct _scope_t {
}
scope_t
;
scope_t
*
scope_new
(
scope_kind_t
kind
,
mp_parse_node_t
pn
,
qstr
source_file
,
uint
unique_code_id
,
uint
emit_options
);
void
scope_free
(
scope_t
*
scope
);
id_info_t
*
scope_find_or_add_id
(
scope_t
*
scope
,
qstr
qstr
,
bool
*
added
);
id_info_t
*
scope_find
(
scope_t
*
scope
,
qstr
qstr
);
id_info_t
*
scope_find_global
(
scope_t
*
scope
,
qstr
qstr
);
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment