sv: fix a few struct and enum memory leaks

This commit is contained in:
Zachary Snow 2021-06-17 15:59:59 -04:00 committed by Zachary Snow
parent 2b8f1633ce
commit 4446cfa524
2 changed files with 11 additions and 2 deletions

View File

@ -331,6 +331,8 @@ static int size_packed_struct(AstNode *snode, int base_offset)
}
}
// range nodes are now redundant
for (AstNode *child : node->children)
delete child;
node->children.clear();
}
else if (node->children.size() == 1 && node->children[0]->type == AST_MULTIRANGE) {
@ -345,6 +347,8 @@ static int size_packed_struct(AstNode *snode, int base_offset)
save_struct_array_width(node, width);
width *= array_count;
// range nodes are now redundant
for (AstNode *child : node->children)
delete child;
node->children.clear();
}
else if (node->range_left < 0) {
@ -5052,6 +5056,9 @@ finished:
void AstNode::allocateDefaultEnumValues()
{
log_assert(type==AST_ENUM);
log_assert(children.size() > 0);
if (children.front()->attributes.count(ID::enum_base_type))
return; // already elaborated
int last_enum_int = -1;
for (auto node : children) {
log_assert(node->type==AST_ENUM_ITEM);

View File

@ -1711,10 +1711,12 @@ member_type_token:
delete astbuf1;
astbuf1 = template_node;
}
| struct_union {
| {
delete astbuf1;
} struct_union {
// stash state on ast_stack
ast_stack.push_back(astbuf2);
astbuf2 = $1;
astbuf2 = $2;
} struct_body {
astbuf1 = astbuf2;
// recover state