@@ -57,6 +57,29 @@ static std::vector<T> split(const T & str, const T & delimiters) {
5757
5858namespace CppSharp { namespace CppParser { namespace AST {
5959
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+
6083Type::Type (TypeKind kind) : kind(kind) {}
6184Type::Type (const Type& rhs) : kind(rhs.kind), isDependent(rhs.isDependent) {}
6285
@@ -144,7 +167,10 @@ NonTypeTemplateParameter::NonTypeTemplateParameter(const NonTypeTemplateParamete
144167{
145168}
146169
147- NonTypeTemplateParameter::~NonTypeTemplateParameter () {}
170+ NonTypeTemplateParameter::~NonTypeTemplateParameter ()
171+ {
172+ deleteExpression (defaultArgument);
173+ }
148174
149175TemplateArgument::TemplateArgument () : declaration(0 ), integral(0 ) {}
150176
@@ -578,8 +604,8 @@ BinaryOperatorObsolete::BinaryOperatorObsolete(const std::string& str, Expressio
578604
579605BinaryOperatorObsolete::~BinaryOperatorObsolete ()
580606{
581- delete LHS;
582- delete RHS;
607+ deleteExpression ( LHS) ;
608+ deleteExpression ( RHS) ;
583609}
584610
585611
@@ -589,7 +615,7 @@ CallExprObsolete::CallExprObsolete(const std::string& str, Declaration* decl)
589615CallExprObsolete::~CallExprObsolete ()
590616{
591617 for (auto & arg : Arguments)
592- delete arg;
618+ deleteExpression ( arg) ;
593619}
594620
595621DEF_VECTOR (CallExprObsolete, ExpressionObsolete*, Arguments)
@@ -600,7 +626,7 @@ CXXConstructExprObsolete::CXXConstructExprObsolete(const std::string& str, Decla
600626CXXConstructExprObsolete::~CXXConstructExprObsolete ()
601627{
602628 for (auto & arg : Arguments)
603- delete arg;
629+ deleteExpression ( arg) ;
604630}
605631
606632DEF_VECTOR (CXXConstructExprObsolete, ExpressionObsolete*, Arguments)
@@ -616,25 +642,7 @@ Parameter::Parameter()
616642
617643Parameter::~Parameter ()
618644{
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);
638646}
639647
640648Function::Function ()
0 commit comments