@@ -57,6 +57,29 @@ static std::vector<T> split(const T & str, const T & delimiters) {
57
57
58
58
namespace CppSharp { namespace CppParser { namespace AST {
59
59
60
+ static void deleteExpression (ExpressionObsolete* expression)
61
+ {
62
+ if (expression)
63
+ {
64
+ // HACK: see https://github.com/mono/CppSharp/issues/598
65
+ switch (expression->_class )
66
+ {
67
+ case StatementClassObsolete::BinaryOperator:
68
+ delete static_cast <BinaryOperatorObsolete*>(expression);
69
+ break ;
70
+ case StatementClassObsolete::CallExprClass:
71
+ delete static_cast <CallExprObsolete*>(expression);
72
+ break ;
73
+ case StatementClassObsolete::CXXConstructExprClass:
74
+ delete static_cast <CXXConstructExprObsolete*>(expression);
75
+ break ;
76
+ default :
77
+ delete expression;
78
+ break ;
79
+ }
80
+ }
81
+ }
82
+
60
83
Type::Type (TypeKind kind) : kind(kind) {}
61
84
Type::Type (const Type& rhs) : kind(rhs.kind), isDependent(rhs.isDependent) {}
62
85
@@ -144,7 +167,10 @@ NonTypeTemplateParameter::NonTypeTemplateParameter(const NonTypeTemplateParamete
144
167
{
145
168
}
146
169
147
- NonTypeTemplateParameter::~NonTypeTemplateParameter () {}
170
+ NonTypeTemplateParameter::~NonTypeTemplateParameter ()
171
+ {
172
+ deleteExpression (defaultArgument);
173
+ }
148
174
149
175
TemplateArgument::TemplateArgument () : declaration(0 ), integral(0 ) {}
150
176
@@ -578,8 +604,8 @@ BinaryOperatorObsolete::BinaryOperatorObsolete(const std::string& str, Expressio
578
604
579
605
BinaryOperatorObsolete::~BinaryOperatorObsolete ()
580
606
{
581
- delete LHS;
582
- delete RHS;
607
+ deleteExpression ( LHS) ;
608
+ deleteExpression ( RHS) ;
583
609
}
584
610
585
611
@@ -589,7 +615,7 @@ CallExprObsolete::CallExprObsolete(const std::string& str, Declaration* decl)
589
615
CallExprObsolete::~CallExprObsolete ()
590
616
{
591
617
for (auto & arg : Arguments)
592
- delete arg;
618
+ deleteExpression ( arg) ;
593
619
}
594
620
595
621
DEF_VECTOR (CallExprObsolete, ExpressionObsolete*, Arguments)
@@ -600,7 +626,7 @@ CXXConstructExprObsolete::CXXConstructExprObsolete(const std::string& str, Decla
600
626
CXXConstructExprObsolete::~CXXConstructExprObsolete ()
601
627
{
602
628
for (auto & arg : Arguments)
603
- delete arg;
629
+ deleteExpression ( arg) ;
604
630
}
605
631
606
632
DEF_VECTOR (CXXConstructExprObsolete, ExpressionObsolete*, Arguments)
@@ -616,25 +642,7 @@ Parameter::Parameter()
616
642
617
643
Parameter::~Parameter ()
618
644
{
619
- if (defaultArgument)
620
- {
621
- // HACK: see https://github.com/mono/CppSharp/issues/598
622
- switch (defaultArgument->_class )
623
- {
624
- case StatementClassObsolete::BinaryOperator:
625
- delete static_cast <BinaryOperatorObsolete*>(defaultArgument);
626
- break ;
627
- case StatementClassObsolete::CallExprClass:
628
- delete static_cast <CallExprObsolete*>(defaultArgument);
629
- break ;
630
- case StatementClassObsolete::CXXConstructExprClass:
631
- delete static_cast <CXXConstructExprObsolete*>(defaultArgument);
632
- break ;
633
- default :
634
- delete defaultArgument;
635
- break ;
636
- }
637
- }
645
+ deleteExpression (defaultArgument);
638
646
}
639
647
640
648
Function::Function ()
0 commit comments