Index: tools/smaz.adb ================================================================== --- tools/smaz.adb +++ tools/smaz.adb @@ -597,10 +597,11 @@ := Worst_Element (Original, Counts, Method, First, Last_Code (Original)); Worst_Value : constant String := Dict_Entry (Original, Worst_Index); Worst_Count : constant String_Count := Counts (Worst_Index); + Worst_Removed : Boolean := False; Base : constant Dictionary := Remove_Element (Original, Worst_Index); Old_Score : constant Ada.Streams.Stream_Element_Count := Score; begin Updated := False; @@ -618,10 +619,11 @@ if New_Score < Score then Dict := Holders.To_Holder (New_Dict); Score := New_Score; Counts := New_Counts; No_Longer_Pending := Position; + Worst_Removed := True; Updated := True; Log_Message := Ada.Strings.Unbounded.To_Unbounded_String ("Removing" & Worst_Count'Img & "x " & Natools.String_Escapes.C_Escape_Hex (Worst_Value, True) @@ -649,10 +651,11 @@ if New_Score <= Score then Dict := Holders.To_Holder (Base); Score := New_Score; Counts := New_Counts; No_Longer_Pending := String_Lists.No_Element; + Worst_Removed := True; Updated := True; Log_Message := Ada.Strings.Unbounded.To_Unbounded_String ("Removing" & Worst_Count'Img & "x " & Natools.String_Escapes.C_Escape_Hex (Worst_Value, True) @@ -669,11 +672,13 @@ if Updated then if String_Lists.Has_Element (No_Longer_Pending) then Pending_Words.Delete (No_Longer_Pending); end if; - Pending_Words.Append (Worst_Value); + if Worst_Removed then + Pending_Words.Append (Worst_Value); + end if; Ada.Text_IO.Put_Line (Ada.Text_IO.Current_Error, Ada.Strings.Unbounded.To_String (Log_Message)); end if;