diff --git a/alib2algo/src/regexp/simplify/RegExpOptimizeUnboundedPart.cxx b/alib2algo/src/regexp/simplify/RegExpOptimizeUnboundedPart.cxx index 679e98d488f1c45b990e476f8e06cf513a7f3635..381fb320e5fd941af4c0922c66e0ecf22bfbbd44 100644 --- a/alib2algo/src/regexp/simplify/RegExpOptimizeUnboundedPart.cxx +++ b/alib2algo/src/regexp/simplify/RegExpOptimizeUnboundedPart.cxx @@ -92,7 +92,9 @@ UnboundedRegExpElement * RegExpOptimize::optimize( UnboundedRegExpConcatenation UnboundedRegExpElement * RegExpOptimize::optimize( UnboundedRegExpIteration const * const & node ) const { - UnboundedRegExpIteration* iter = new UnboundedRegExpIteration(* optimize( node->element ) ); + UnboundedRegExpIteration* iter = new UnboundedRegExpIteration( UnboundedRegExpEmpty {} ); + delete iter->element; + iter->element = optimize( node->element ); do { @@ -778,9 +780,13 @@ bool RegExpOptimize::V5( UnboundedRegExpAlternation * const & node ) const delete tmpAY; auto iterAY = find_if( node->elements.begin( ), node->elements.end( ), [ regexpAY ] ( UnboundedRegExpElement const * const & a ) -> bool{ return *a == *regexpAY; } ); + delete regexpAY; if( iterAY == node->elements.end( ) ) { itC ++; + delete regexpA; + delete regexpY; + continue; } @@ -805,7 +811,6 @@ bool RegExpOptimize::V5( UnboundedRegExpAlternation * const & node ) const delete regexpA; delete regexpY; - delete regexpAY; delete *itA; itA = node->elements.erase( itA ); @@ -931,9 +936,13 @@ bool RegExpOptimize::V6( UnboundedRegExpAlternation * const & node ) const delete tmpAY; auto iterAY = find_if( node->elements.begin( ), node->elements.end( ), [ regexpAY ] ( UnboundedRegExpElement const * const & a ) -> bool{ return *a == *regexpAY; } ); + delete regexpAY; if( iterAY == node->elements.end( ) ) { itC ++; + + delete regexpA; + delete regexpY; continue; } @@ -957,7 +966,6 @@ bool RegExpOptimize::V6( UnboundedRegExpAlternation * const & node ) const delete regexpA; delete regexpY; - delete regexpAY; delete *itA; itA = node->elements.erase( itA );