diff --git a/tools/binpac/src/pac_analyzer.cc b/tools/binpac/src/pac_analyzer.cc index d128afadab..196ddbf620 100644 --- a/tools/binpac/src/pac_analyzer.cc +++ b/tools/binpac/src/pac_analyzer.cc @@ -34,14 +34,14 @@ AnalyzerDecl::AnalyzerDecl(ID* id, DeclType decl_type, ParamList* params) : Type } AnalyzerDecl::~AnalyzerDecl() { - delete_list(StateVarList, statevars_); - delete_list(AnalyzerActionList, actions_); - delete_list(AnalyzerHelperList, helpers_); - delete_list(FunctionList, functions_); - delete_list(ParamList, params_); - delete_list(AnalyzerHelperList, constructor_helpers_); - delete_list(AnalyzerHelperList, destructor_helpers_); - delete_list(AnalyzerHelperList, eof_helpers_); + delete_list(statevars_); + delete_list(actions_); + delete_list(helpers_); + delete_list(functions_); + delete_list(params_); + delete_list(constructor_helpers_); + delete_list(destructor_helpers_); + delete_list(eof_helpers_); } void AnalyzerDecl::AddElements(AnalyzerElementList* elemlist) { diff --git a/tools/binpac/src/pac_case.cc b/tools/binpac/src/pac_case.cc index c9c859cc80..21583fab99 100644 --- a/tools/binpac/src/pac_case.cc +++ b/tools/binpac/src/pac_case.cc @@ -219,7 +219,7 @@ CaseField::CaseField(ExprList* index, ID* id, Type* type) index_var_ = nullptr; } -CaseField::~CaseField() { delete_list(ExprList, index_); } +CaseField::~CaseField() { delete_list(index_); } void GenCaseStr(ExprList* index_list, Output* out_cc, Env* env, Type* switch_type) { if ( index_list ) { diff --git a/tools/binpac/src/pac_common.h b/tools/binpac/src/pac_common.h index 4289506882..29a1ab5265 100644 --- a/tools/binpac/src/pac_common.h +++ b/tools/binpac/src/pac_common.h @@ -108,13 +108,13 @@ typedef vector StateVarList; if ( pc ) \ for ( ct::iterator i = (pc)->begin(); i != (pc)->end(); ++i ) -#define delete_list(ct, pc) \ - { \ - foreach (delete_list_i, ct, pc) \ - delete *delete_list_i; \ - delete pc; \ - pc = 0; \ - } +template +constexpr void delete_list(T* container) { + for ( auto& i : *container ) + delete i; + + delete container; +} // Constants const char* const kComputeFrameLength = "compute_frame_length"; diff --git a/tools/binpac/src/pac_context.cc b/tools/binpac/src/pac_context.cc index ced1770377..f52cf68843 100644 --- a/tools/binpac/src/pac_context.cc +++ b/tools/binpac/src/pac_context.cc @@ -53,7 +53,7 @@ AnalyzerContextDecl::AnalyzerContextDecl(ID* id, ContextFieldList* context_field AnalyzerContextDecl::~AnalyzerContextDecl() { delete context_name_id_; delete param_type_; - delete_list(ContextFieldList, context_fields_); + delete_list(context_fields_); } void AnalyzerContextDecl::GenForwardDeclaration(Output* out_h) { diff --git a/tools/binpac/src/pac_decl.cc b/tools/binpac/src/pac_decl.cc index f8605cbdb4..7cbc2005af 100644 --- a/tools/binpac/src/pac_decl.cc +++ b/tools/binpac/src/pac_decl.cc @@ -32,7 +32,7 @@ Decl::Decl(ID* id, DeclType decl_type) : id_(id), decl_type_(decl_type), attrlis Decl::~Decl() { delete id_; - delete_list(AttrList, attrlist_); + delete_list(attrlist_); } void Decl::AddAttrs(AttrList* attrs) { diff --git a/tools/binpac/src/pac_embedded.cc b/tools/binpac/src/pac_embedded.cc index 3296715ac9..d180e80e2b 100644 --- a/tools/binpac/src/pac_embedded.cc +++ b/tools/binpac/src/pac_embedded.cc @@ -20,7 +20,7 @@ string EmbeddedCodeSegment::ToCode(Env* env) { EmbeddedCode::EmbeddedCode() { segments_ = new EmbeddedCodeSegmentList(); } -EmbeddedCode::~EmbeddedCode() { delete_list(EmbeddedCodeSegmentList, segments_); } +EmbeddedCode::~EmbeddedCode() { delete_list(segments_); } void EmbeddedCode::Append(int atom) { current_segment_ += static_cast(atom); } diff --git a/tools/binpac/src/pac_enum.cc b/tools/binpac/src/pac_enum.cc index e31563d6de..dca9c2cec4 100644 --- a/tools/binpac/src/pac_enum.cc +++ b/tools/binpac/src/pac_enum.cc @@ -34,7 +34,7 @@ EnumDecl::EnumDecl(ID* id, EnumList* enumlist) : Decl(id, ENUM), enumlist_(enuml } EnumDecl::~EnumDecl() { - delete_list(EnumList, enumlist_); + delete_list(enumlist_); delete extern_typedecl_; } diff --git a/tools/binpac/src/pac_expr.cc b/tools/binpac/src/pac_expr.cc index fc4cbcc38d..451baba3bc 100644 --- a/tools/binpac/src/pac_expr.cc +++ b/tools/binpac/src/pac_expr.cc @@ -155,8 +155,8 @@ Expr::~Expr() { delete operand_[0]; delete operand_[1]; delete operand_[2]; - delete_list(ExprList, args_); - delete_list(CaseExprList, cases_); + delete_list(args_); + delete_list(cases_); } void Expr::AddCaseExpr(CaseExpr* case_expr) { @@ -841,7 +841,8 @@ CaseExpr::CaseExpr(ExprList* index, Expr* value) : DataDepElement(DataDepElement::CASEEXPR), index_(index), value_(value) {} CaseExpr::~CaseExpr() { - delete_list(ExprList, index_); + delete_list(index_); + index_ = nullptr; delete value_; } diff --git a/tools/binpac/src/pac_field.cc b/tools/binpac/src/pac_field.cc index b706c744d8..6a67b1cee2 100644 --- a/tools/binpac/src/pac_field.cc +++ b/tools/binpac/src/pac_field.cc @@ -18,7 +18,7 @@ Field::Field(FieldType tof, int flags, ID* id, Type* type) Field::~Field() { delete id_; delete type_; - delete_list(AttrList, attrs_); + delete_list(attrs_); } void Field::AddAttr(AttrList* attrs) { diff --git a/tools/binpac/src/pac_func.cc b/tools/binpac/src/pac_func.cc index e94b1fc6c5..e27f8a870b 100644 --- a/tools/binpac/src/pac_func.cc +++ b/tools/binpac/src/pac_func.cc @@ -17,7 +17,7 @@ Function::Function(ID* id, Type* type, ParamList* params) Function::~Function() { delete id_; delete type_; - delete_list(ParamList, params_); + delete_list(params_); delete env_; delete expr_; delete code_; diff --git a/tools/binpac/src/pac_record.cc b/tools/binpac/src/pac_record.cc index d11ba20d43..54d57a2921 100644 --- a/tools/binpac/src/pac_record.cc +++ b/tools/binpac/src/pac_record.cc @@ -29,7 +29,7 @@ RecordType::RecordType(RecordFieldList* record_fields) : Type(RECORD) { } RecordType::~RecordType() { - // Do not delete_list(RecordFieldList, record_fields_) + // Do not delete_list(record_fields_) // because the fields are also in fields_. delete record_fields_; delete parsing_dataptr_var_field_; diff --git a/tools/binpac/src/pac_type.cc b/tools/binpac/src/pac_type.cc index a3654b80b6..83aa507f94 100644 --- a/tools/binpac/src/pac_type.cc +++ b/tools/binpac/src/pac_type.cc @@ -75,14 +75,14 @@ Type::~Type() { delete buffering_state_var_field_; delete has_value_field_; delete[] size_expr_; - delete_list(FieldList, fields_); + delete_list(fields_); delete attrs_; delete attr_byteorder_expr_; delete attr_if_expr_; delete attr_length_expr_; - delete_list(ExprList, attr_checks_); - delete_list(ExprList, attr_enforces_); - delete_list(ExprList, attr_requires_); + delete_list(attr_checks_); + delete_list(attr_enforces_); + delete_list(attr_requires_); } Type* Type::Clone() const { diff --git a/tools/binpac/src/pac_typedecl.cc b/tools/binpac/src/pac_typedecl.cc index 5b3ca26179..9395593070 100644 --- a/tools/binpac/src/pac_typedecl.cc +++ b/tools/binpac/src/pac_typedecl.cc @@ -27,7 +27,7 @@ TypeDecl::~TypeDecl() { delete env_; delete type_; - delete_list(ParamList, params_); + delete_list(params_); } void TypeDecl::ProcessAttr(Attr* a) { type_->ProcessAttr(a); }