Index: src/natools-s_expressions-parsers.adb ================================================================== --- src/natools-s_expressions-parsers.adb +++ src/natools-s_expressions-parsers.adb @@ -96,18 +96,12 @@ exit; end if; -- Read a single octet from source - if P.Override_Pos < P.Override.Length then - P.Override_Pos := P.Override_Pos + 1; - O := P.Override.Element (P.Override_Pos); - - if P.Override_Pos >= P.Override.Length then - P.Override.Hard_Reset; - P.Override_Pos := 0; - end if; + if P.Override.Length > 0 then + P.Override.Pop (O); else Input.Read (Item, Last); if Last not in Item'Range then P.Latest := Events.End_Of_Input; exit; @@ -171,11 +165,11 @@ (Encodings.Decode_Base64 (P.Internal.Chunk.Data (0 .. P.Internal.Chunk.Length - 1))); if P.Internal.State = Base64_Atom then P.Latest := Events.Add_Atom; else - P.Override.Append (P.Buffer.Data); + P.Override.Append_Reverse (P.Buffer.Data); P.Buffer.Soft_Reset; end if; P.Internal := (State => Waiting); end if; Index: src/natools-s_expressions-parsers.ads ================================================================== --- src/natools-s_expressions-parsers.ads +++ src/natools-s_expressions-parsers.ads @@ -110,11 +110,10 @@ type Parser is tagged record Internal : State_Data; Pending : Events.Event := Events.End_Of_Input; Override : Atom_Buffers.Atom_Buffer; - Override_Pos : Count := 0; Latest : Events.Event := Events.Error; Buffer : Atom_Buffers.Atom_Buffer; Level : Natural := 0; end record;