diff --git a/alib2/src/alphabet/SymbolFromStringParser.cpp b/alib2/src/alphabet/SymbolFromStringParser.cpp index 718b472f8239fb539e34a652ed594b66abadd19a..cf1cd464dab1d11efee2b10b8e87edbad1ceae1f 100644 --- a/alib2/src/alphabet/SymbolFromStringParser.cpp +++ b/alib2/src/alphabet/SymbolFromStringParser.cpp @@ -16,9 +16,11 @@ Symbol* SymbolFromStringParser::parse() { return new Symbol(BlankSymbol()); case SymbolFromStringLexer::TokenType::ERROR: { label::Label* label = m_LabelParser.parse(); - if(label != NULL) - return new Symbol(LabeledSymbol(*label)); - else + if(label != NULL) { + Symbol* res = new Symbol(LabeledSymbol(std::move(*label))); + delete label; + return res; + } else return NULL; } case SymbolFromStringLexer::TokenType::TEOF: @@ -36,6 +38,7 @@ Symbol SymbolFromStringParser::parseSymbol() { delete symbol; return std::move(res); } else { + delete symbol; throw alib::AlibException(); } } diff --git a/alib2/src/label/LabelFromStringParser.cpp b/alib2/src/label/LabelFromStringParser.cpp index 4d69086ffe380f1f89e3161e648afb7d7e0dacf2..d172aef6bcd7511c43bbaca41c36289866df8e23 100644 --- a/alib2/src/label/LabelFromStringParser.cpp +++ b/alib2/src/label/LabelFromStringParser.cpp @@ -35,6 +35,7 @@ Label LabelFromStringParser::parseLabel() { delete label; return std::move(res); } else { + delete label; throw alib::AlibException(); } } diff --git a/alib2/src/regexp/RegExpFromStringParser.cpp b/alib2/src/regexp/RegExpFromStringParser.cpp index a3fefdd1aa77caa585ae7dddf3af482d4ae7eebc..296bfb5a432106f066e2826b4d6ff41beb4a9d50 100644 --- a/alib2/src/regexp/RegExpFromStringParser.cpp +++ b/alib2/src/regexp/RegExpFromStringParser.cpp @@ -29,6 +29,7 @@ RegExp RegExpFromStringParser::parseRegexp() { delete regexp; return std::move(res); } else { + delete regexp; throw alib::AlibException(); } } @@ -144,9 +145,11 @@ RegExpElement* RegExpFromStringParser::factor() { return this->star(new RegExpEmpty()); } else if(token.type == RegExpFromStringLexer::TokenType::ERROR) { alphabet::Symbol* symbol = m_SymbolParser.parse(); - if(symbol != NULL) - return this->star(new RegExpSymbol(*symbol)); - else + if(symbol != NULL) { + RegExpSymbol* res = new RegExpSymbol(std::move(*symbol)); + delete symbol; + return this->star(res); + } else return NULL; } else { return NULL; diff --git a/alib2/src/string/StringFromStringParser.cpp b/alib2/src/string/StringFromStringParser.cpp index b7393a82649db73b4a137b6f92483304c7750996..d93d79e0e84a2815a84392f789f275d2b09e696d 100644 --- a/alib2/src/string/StringFromStringParser.cpp +++ b/alib2/src/string/StringFromStringParser.cpp @@ -47,6 +47,7 @@ String StringFromStringParser::parseString() { delete string; return std::move(res); } else { + delete string; throw alib::AlibException(); } } @@ -58,7 +59,8 @@ std::vector<alphabet::Symbol> StringFromStringParser::parseContent() { symbol = m_SymbolParser.parse(); if(symbol == NULL) return data; - data.push_back(*symbol); + data.push_back(std::move(*symbol)); + delete symbol; } while(true); }