diff --git a/frontends/ast/simplify.cc b/frontends/ast/simplify.cc index e6954dbb9..5e755c124 100644 --- a/frontends/ast/simplify.cc +++ b/frontends/ast/simplify.cc @@ -1089,7 +1089,7 @@ bool AstNode::simplify(bool const_fold, int stage, int width_hint, bool sign_hin // Process package imports after clearing the scope but before processing module declarations for (size_t i = 0; i < children.size(); i++) { - AstNode *child = children[i]; + AstNode *child = children[i].get(); if (child->type == AST_IMPORT) { // Find the package in the design AstNode *package_node = nullptr; @@ -1099,7 +1099,7 @@ bool AstNode::simplify(bool const_fold, int stage, int width_hint, bool sign_hin for (auto &design_child : current_ast->children) { if (design_child->type == AST_PACKAGE) { if (design_child->str == child->str) { - package_node = design_child; + package_node = design_child.get(); break; } } @@ -1115,7 +1115,7 @@ bool AstNode::simplify(bool const_fold, int stage, int width_hint, bool sign_hin package_name = package_name.substr(1); } if (package_name == child->str || design_package->str == child->str) { - package_node = design_package; + package_node = design_package.get(); break; } } @@ -1123,17 +1123,17 @@ bool AstNode::simplify(bool const_fold, int stage, int width_hint, bool sign_hin if (package_node) { // Import all names from the package into current scope - for (auto &pkg_child : package_node->children) { + for (auto& pkg_child : package_node->children) { if (pkg_child->type == AST_PARAMETER || pkg_child->type == AST_LOCALPARAM || pkg_child->type == AST_TYPEDEF || pkg_child->type == AST_FUNCTION || pkg_child->type == AST_TASK || pkg_child->type == AST_ENUM) { - current_scope[pkg_child->str] = pkg_child; + current_scope[pkg_child->str] = pkg_child.get(); } if (pkg_child->type == AST_ENUM) { - for (auto enode : pkg_child->children) { + for (auto& enode : pkg_child->children) { log_assert(enode->type==AST_ENUM_ITEM); if (current_scope.count(enode->str) == 0) - current_scope[enode->str] = enode; + current_scope[enode->str] = enode.get(); else input_error("enum item %s already exists in current scope\n", enode->str.c_str()); } diff --git a/frontends/verilog/verilog_parser.y b/frontends/verilog/verilog_parser.y index c59144bd0..940c4614e 100644 --- a/frontends/verilog/verilog_parser.y +++ b/frontends/verilog/verilog_parser.y @@ -833,10 +833,9 @@ package_body_stmt: import_stmt: TOK_IMPORT hierarchical_id TOK_PACKAGESEP '*' ';' { // Create an import node to track package imports - AstNode *import_node = new AstNode(AST_IMPORT); + auto import_node = std::make_unique(AST_IMPORT); import_node->str = *$2; - ast_stack.back()->children.push_back(import_node); - delete $2; + extra->ast_stack.back()->children.push_back(std::move(import_node)); }; interface: