diff --git a/src/shared/proparser/proitems.cpp b/src/shared/proparser/proitems.cpp index 42c75b616d7d3ff620aaeb79e6a9c4b04c95875b..9916ebae9d1096627563dec2b7c567c9ea697c6c 100644 --- a/src/shared/proparser/proitems.cpp +++ b/src/shared/proparser/proitems.cpp @@ -45,10 +45,13 @@ ProBlock::~ProBlock() { for (ProItem *itm, *nitm = m_proitems; (itm = nitm); ) { nitm = itm->m_next; - if (itm->kind() == BlockKind) - static_cast<ProBlock *>(itm)->deref(); - else - delete itm; + switch (itm->kind()) { + case BlockKind: static_cast<ProBlock *>(itm)->deref(); break; + case FunctionKind: delete static_cast<ProFunction *>(itm); break; + case ConditionKind: delete static_cast<ProCondition *>(itm); break; + case OperatorKind: delete static_cast<ProOperator *>(itm); break; + case VariableKind: delete static_cast<ProVariable *>(itm); break; + } } }