branch: externals/wisi commit e199f1238510210865c1fb0b321feefec3a8e373 Author: Stephen Leake <stephen_le...@stephe-leake.org> Commit: Stephen Leake <stephen_le...@stephe-leake.org>
Finish updating for latest GNAT * wisi.gpr.gp: Add -gnat2020. * wisi.adb: Match sal-* changes. * wisitoken-parse-lr-mckenzie_recover-base.adb: * wisitoken-parse-lr-mckenzie_recover-parse.ads: * wisitoken-parse-lr-parser_lists.adb: * wisitoken-parse-lr-parser_lists.ads: * wisitoken-parse-lr.ads: * wisitoken.ads: --- wisi.adb | 21 +++++++++++++-------- wisi.gpr.gp | 4 ++-- wisitoken-parse-lr-mckenzie_recover-base.adb | 8 +++++++- wisitoken-parse-lr-mckenzie_recover-parse.ads | 7 ++++--- wisitoken-parse-lr-parser_lists.adb | 12 ++++++------ wisitoken-parse-lr-parser_lists.ads | 6 +++--- wisitoken-parse-lr.ads | 18 +++++++++--------- wisitoken.ads | 8 ++++++-- 8 files changed, 50 insertions(+), 34 deletions(-) diff --git a/wisi.adb b/wisi.adb index 91dacab..b874532 100644 --- a/wisi.adb +++ b/wisi.adb @@ -2,7 +2,7 @@ -- -- See spec. -- --- Copyright (C) 2017 - 2020 Free Software Foundation, Inc. +-- Copyright (C) 2017 - 2021 Free Software Foundation, Inc. -- -- This library is free software; you can redistribute it and/or modify it -- under terms of the GNU General Public License as published by the Free @@ -1577,18 +1577,21 @@ package body Wisi is Cache : Face_Cache_Type renames Data.Face_Caches (Cache_Cur); Other_Cur : Cursor := Find_In_Range (Iter, Ascending, Cache.Char_Region.Last + 1, Token.Char_Region.Last); - Temp : Cursor; + To_Delete : Buffer_Pos_Lists.List; begin loop exit when not Has_Element (Other_Cur) or else Data.Face_Caches (Other_Cur).Char_Region.First > Token.Char_Region.Last; - Temp := Other_Cur; + To_Delete.Append (Data.Face_Caches (Other_Cur).Char_Region.First); Other_Cur := Next (Iter, Other_Cur); - Delete (Data.Face_Caches, Temp); end loop; Cache.Class := Param.Class; Cache.Char_Region.Last := Token.Char_Region.Last; + + for Face of To_Delete loop + Data.Face_Caches.Delete (Face); + end loop; end; else Data.Face_Caches.Insert ((Token.Char_Region, Param.Class, (Set => False))); @@ -1610,20 +1613,22 @@ package body Wisi is Iter : constant Iterator := Data.Face_Caches.Iterate; Cache_Cur : Cursor; - Temp : Cursor; begin for I of Params loop if Tree.Byte_Region (Tokens (I)) /= Null_Buffer_Region then declare - Token : Aug_Token_Const_Ref renames Get_Aug_Token_Const_1 (Tree, Tokens (I)); + Token : Aug_Token_Const_Ref renames Get_Aug_Token_Const_1 (Tree, Tokens (I)); + To_Delete : Buffer_Pos_Lists.List; begin Cache_Cur := Find_In_Range (Iter, Ascending, Token.Char_Region.First, Token.Char_Region.Last); loop exit when not Has_Element (Cache_Cur) or else Data.Face_Caches (Cache_Cur).Char_Region.First > Token.Char_Region.Last; - Temp := Cache_Cur; + To_Delete.Append (Data.Face_Caches (Cache_Cur).Char_Region.First); Cache_Cur := Next (Iter, Cache_Cur); - Delete (Data.Face_Caches, Temp); + end loop; + for Face of To_Delete loop + Data.Face_Caches.Delete (Face); end loop; end; end if; diff --git a/wisi.gpr.gp b/wisi.gpr.gp index 1c17529..54c9239 100644 --- a/wisi.gpr.gp +++ b/wisi.gpr.gp @@ -46,7 +46,7 @@ project Wisi is for Default_Switches ("Ada") use Standard_Common.Compiler.Common_Switches & Standard_Common.Compiler.Style_Checks & - Standard_Common.Compiler.Debug_Switches; + Standard_Common.Compiler.Debug_Switches & "-gnat2020"; for Default_Switches ("C") use Standard_Common.Compiler.Debug_Switches_C; @@ -54,7 +54,7 @@ project Wisi is for Default_Switches ("Ada") use Standard_Common.Compiler.Common_Switches & Standard_Common.Compiler.Style_Checks & - Standard_Common.Compiler.Release_Switches; + Standard_Common.Compiler.Release_Switches & "-gnat2020"; for Default_Switches ("C") use Standard_Common.Compiler.Release_Switches_C; end case; diff --git a/wisitoken-parse-lr-mckenzie_recover-base.adb b/wisitoken-parse-lr-mckenzie_recover-base.adb index 344461b..d36b334 100644 --- a/wisitoken-parse-lr-mckenzie_recover-base.adb +++ b/wisitoken-parse-lr-mckenzie_recover-base.adb @@ -2,7 +2,7 @@ -- -- Base utilities for McKenzie_Recover -- --- Copyright (C) 2018 - 2020 Free Software Foundation, Inc. +-- Copyright (C) 2018 - 2021 Free Software Foundation, Inc. -- -- This library is free software; you can redistribute it and/or modify it -- under terms of the GNU General Public License as published by the Free @@ -161,7 +161,13 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Base is procedure Set_All_Done is begin Parser_Index := SAL.Base_Peek_Type'First; + + pragma Warnings (Off, "aggregate not fully initialized"); + -- Config.Stack.Data is not initialized, but no uninitialized data is + -- ever referenced. Config := (others => <>); + pragma Warnings (On, "aggregate not fully initialized"); + Status := All_Done; end Set_All_Done; diff --git a/wisitoken-parse-lr-mckenzie_recover-parse.ads b/wisitoken-parse-lr-mckenzie_recover-parse.ads index abd8946..99fcee9 100644 --- a/wisitoken-parse-lr-mckenzie_recover-parse.ads +++ b/wisitoken-parse-lr-mckenzie_recover-parse.ads @@ -2,7 +2,7 @@ -- -- Config parsing subprograms. -- --- Copyright (C) 2018 - 2019 Free Software Foundation, Inc. +-- Copyright (C) 2018 - 2019, 2021 Free Software Foundation, Inc. -- -- This library is free software; you can redistribute it and/or modify it -- under terms of the GNU General Public License as published by the Free @@ -34,7 +34,7 @@ private package WisiToken.Parse.LR.McKenzie_Recover.Parse is type Parse_Item is record Config : Configuration; Action : Parse_Action_Node_Ptr; - Parsed : Boolean; + Parsed : Boolean := False; Shift_Count : Natural := 0; -- On return from Parse, if Parsed = False, this item was queued by a @@ -51,7 +51,8 @@ private package WisiToken.Parse.LR.McKenzie_Recover.Parse is -- pre-reduce state. end record; - package Parse_Item_Arrays is new SAL.Gen_Bounded_Definite_Vectors (Positive, Parse_Item, Capacity => 10); + package Parse_Item_Arrays is new SAL.Gen_Bounded_Definite_Vectors + (Positive, Parse_Item, Default_Element => (others => <>), Capacity => 10); -- Parse_Item_Arrays.Capacity sets maximum conflicts in one call to Parse package Parse_Item_Array_Refs is new Parse_Item_Arrays.Gen_Refs; diff --git a/wisitoken-parse-lr-parser_lists.adb b/wisitoken-parse-lr-parser_lists.adb index 553f772..0b93d40 100644 --- a/wisitoken-parse-lr-parser_lists.adb +++ b/wisitoken-parse-lr-parser_lists.adb @@ -2,7 +2,7 @@ -- -- see spec -- --- Copyright (C) 2014 - 2020 All Rights Reserved. +-- Copyright (C) 2014 - 2021 All Rights Reserved. -- -- The WisiToken package is free software; you can redistribute it -- and/or modify it under terms of the GNU General Public License as @@ -80,7 +80,7 @@ package body WisiToken.Parse.LR.Parser_Lists is function First (List : aliased in out Parser_Lists.List'Class) return Cursor is begin - return (Elements => List.Elements'Access, Ptr => List.Elements.First); + return (Ptr => List.Elements.First); end First; procedure Next (Cursor : in out Parser_Lists.Cursor) @@ -162,7 +162,7 @@ package body WisiToken.Parse.LR.Parser_Lists is Temp : Parser_State_Lists.Cursor := Cursor.Ptr; begin Parser_State_Lists.Next (Cursor.Ptr); - Parser_State_Lists.Delete (Cursor.Elements.all, Temp); + Parsers.Elements.Delete (Temp); end Free; begin if Trace_Parse > Outline then @@ -336,7 +336,7 @@ package body WisiToken.Parse.LR.Parser_Lists is function To_Cursor (Ptr : in Parser_Node_Access) return Cursor is begin - return (Ptr.Elements, Ptr.Ptr); + return (Ptr => Ptr.Ptr); end To_Cursor; function Constant_Reference @@ -375,7 +375,7 @@ package body WisiToken.Parse.LR.Parser_Lists is overriding function First (Object : Iterator) return Parser_Node_Access is begin - return (Elements => Object.Elements, Ptr => Object.Elements.First); + return (Ptr => Object.Elements.First); end First; overriding function Next @@ -385,7 +385,7 @@ package body WisiToken.Parse.LR.Parser_Lists is is pragma Unreferenced (Object); begin - return (Position.Elements, Parser_State_Lists.Next (Position.Ptr)); + return (Ptr => Parser_State_Lists.Next (Position.Ptr)); end Next; function Iterate (Container : aliased in out List) return Iterator_Interfaces.Forward_Iterator'Class diff --git a/wisitoken-parse-lr-parser_lists.ads b/wisitoken-parse-lr-parser_lists.ads index 6a77e6c..7188466 100644 --- a/wisitoken-parse-lr-parser_lists.ads +++ b/wisitoken-parse-lr-parser_lists.ads @@ -2,7 +2,7 @@ -- -- Generalized LR parser state. -- --- Copyright (C) 2014-2015, 2017 - 2020 Free Software Foundation, Inc. +-- Copyright (C) 2014-2015, 2017 - 2021 Free Software Foundation, Inc. -- -- This file is part of the WisiToken package. -- @@ -261,12 +261,12 @@ private Parser_Label : Natural; -- label of last added parser. end record; - type Cursor (Elements : access Parser_State_Lists.List) is tagged + type Cursor is tagged record Ptr : Parser_State_Lists.Cursor; end record; - type Parser_Node_Access (Elements : access Parser_State_Lists.List) is + type Parser_Node_Access is record Ptr : Parser_State_Lists.Cursor; end record; diff --git a/wisitoken-parse-lr.ads b/wisitoken-parse-lr.ads index da30920..d07fefd 100644 --- a/wisitoken-parse-lr.ads +++ b/wisitoken-parse-lr.ads @@ -9,7 +9,7 @@ -- -- See wisitoken.ads -- --- Copyright (C) 2002, 2003, 2009, 2010, 2013 - 2015, 2017 - 2020 Free Software Foundation, Inc. +-- Copyright (C) 2002, 2003, 2009, 2010, 2013 - 2015, 2017 - 2021 Free Software Foundation, Inc. -- -- This file is part of the WisiToken package. -- @@ -111,7 +111,7 @@ package WisiToken.Parse.LR is function Compare (Left, Right : in Token_ID) return SAL.Compare_Result; package Action_Arrays is new SAL.Gen_Unbounded_Definite_Vectors_Sorted - (Action_Node, Token_ID, To_Key, Compare); + (Action_Node, Token_ID, To_Key, Compare, Default_Element => (others => <>)); procedure Add (List : in out Action_Arrays.Vector; @@ -120,14 +120,14 @@ package WisiToken.Parse.LR is -- Add action to List, sorted on ascending Symbol. type Goto_Node is record - Symbol : Token_ID; - State : State_Index; + Symbol : Token_ID := Invalid_Token_ID; + State : State_Index := State_Index'Last; end record; function To_Key (Item : in Goto_Node) return Token_ID is (Item.Symbol); package Goto_Arrays is new SAL.Gen_Unbounded_Definite_Vectors_Sorted - (Goto_Node, Token_ID, To_Key, Compare); + (Goto_Node, Token_ID, To_Key, Compare, Default_Element => (others => <>)); type Kernel_Info is record Production : Production_ID; @@ -363,7 +363,7 @@ package WisiToken.Parse.LR is -- parser, not virtual nonterms produced by recover. package Fast_Token_ID_Arrays is new SAL.Gen_Bounded_Definite_Vectors - (SAL.Peek_Type, Token_ID, Capacity => 20); + (SAL.Peek_Type, Token_ID, Default_Element => Invalid_Token_ID, Capacity => 20); No_Insert_Delete : constant SAL.Base_Peek_Type := 0; @@ -454,7 +454,7 @@ package WisiToken.Parse.LR is -- Ignore state, stack_depth package Config_Op_Arrays is new SAL.Gen_Bounded_Definite_Vectors - (Positive_Index_Type, Config_Op, Capacity => 80); + (Positive_Index_Type, Config_Op, Default_Element => (Fast_Forward, WisiToken.Token_Index'First), Capacity => 80); -- Using a fixed size vector significantly speeds up -- McKenzie_Recover. The capacity is determined by the maximum number -- of repair operations, which is limited by the cost_limit McKenzie @@ -525,7 +525,7 @@ package WisiToken.Parse.LR is end record; package Recover_Op_Arrays is new SAL.Gen_Bounded_Definite_Vectors - (Positive_Index_Type, Recover_Op, Capacity => 80); + (Positive_Index_Type, Recover_Op, Capacity => 80, Default_Element => (others => <>)); package Recover_Op_Array_Refs is new Recover_Op_Arrays.Gen_Refs; @@ -616,7 +616,7 @@ package WisiToken.Parse.LR is -- Current_Shared_Token. Error_Token : Recover_Token; - Check_Token_Count : Ada.Containers.Count_Type; + Check_Token_Count : Ada.Containers.Count_Type := 0; Check_Status : Semantic_Checks.Check_Status; -- If parsing this config ended with a parse error, Error_Token is -- the token that failed to shift, Check_Status.Label is Ok. diff --git a/wisitoken.ads b/wisitoken.ads index 2c7a11b..85c00ca 100644 --- a/wisitoken.ads +++ b/wisitoken.ads @@ -16,7 +16,7 @@ -- Sethi, and Ullman (aka: "The [Red] Dragon Book" due to the dragon -- on the cover). -- --- Copyright (C) 2009, 2010, 2013 - 2015, 2017 - 2020 Free Software Foundation, Inc. +-- Copyright (C) 2009, 2010, 2013 - 2015, 2017 - 2021 Free Software Foundation, Inc. -- -- This file is part of the WisiToken package. -- @@ -40,16 +40,17 @@ pragma License (Modified_GPL); +with Ada.Containers.Doubly_Linked_Lists; with Ada.Containers; with Ada.Strings.Unbounded; with Ada.Text_IO; with Ada.Unchecked_Deallocation; -with SAL.Generic_Decimal_Image; with SAL.Gen_Trimmed_Image; with SAL.Gen_Unbounded_Definite_Queues; with SAL.Gen_Unbounded_Definite_Vectors.Gen_Image; with SAL.Gen_Unbounded_Definite_Vectors.Gen_Image_Aux; with SAL.Gen_Unconstrained_Array_Image; +with SAL.Generic_Decimal_Image; package WisiToken is Partial_Parse : exception; -- a partial parse terminated. @@ -269,6 +270,9 @@ package WisiToken is type Base_Buffer_Pos is range 0 .. Integer'Last; subtype Buffer_Pos is Base_Buffer_Pos range 1 .. Base_Buffer_Pos'Last; -- match Emacs buffer origin. + + package Buffer_Pos_Lists is new Ada.Containers.Doubly_Linked_Lists (Buffer_Pos); + type Buffer_Region is record First : Buffer_Pos; Last : Base_Buffer_Pos; -- allow representing null range.