Index: tools/smaz.adb ================================================================== --- tools/smaz.adb +++ tools/smaz.adb @@ -577,11 +577,11 @@ is pragma Unreferenced (Min_Dict_Size); pragma Unreferenced (Max_Dict_Size); use type Ada.Streams.Stream_Element_Offset; - New_Position : String_Lists.Cursor; + No_Longer_Pending : String_Lists.Cursor; Log_Message : Ada.Strings.Unbounded.Unbounded_String; Original : constant Dictionary := Dict.Element; Worst_Index : constant Dictionary_Entry := Worst_Element (Original, Counts, Method, First, Last_Code (Original)); @@ -606,11 +606,11 @@ if New_Score < Score then Dict := Holders.To_Holder (New_Dict); Score := New_Score; Counts := New_Counts; - New_Position := Position; + No_Longer_Pending := Position; Updated := True; Log_Message := Ada.Strings.Unbounded.To_Unbounded_String ("Removing" & Worst_Count'Img & "x " & Natools.String_Escapes.C_Escape_Hex (Worst_Value, True) @@ -626,11 +626,14 @@ end if; end; end loop; if Updated then - Pending_Words.Delete (New_Position); + if String_Lists.Has_Element (No_Longer_Pending) then + Pending_Words.Delete (No_Longer_Pending); + end if; + Pending_Words.Append (Worst_Value); Ada.Text_IO.Put_Line (Ada.Text_IO.Current_Error, Ada.Strings.Unbounded.To_String (Log_Message));