diff gcc/ada/butil.ads @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents 84e7813d76e9
children
line wrap: on
line diff
--- a/gcc/ada/butil.ads	Thu Oct 25 07:37:49 2018 +0900
+++ b/gcc/ada/butil.ads	Thu Feb 13 11:34:05 2020 +0900
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 1992-2018, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2019, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -23,12 +23,13 @@
 --                                                                          --
 ------------------------------------------------------------------------------
 
+--  This package contains utility routines for the binder
+
 with Namet; use Namet;
+with Types; use Types;
 
 package Butil is
 
---  This package contains utility routines for the binder
-
    function Is_Predefined_Unit return Boolean;
    --  Given a unit name stored in Name_Buffer with length in Name_Len,
    --  returns True if this is the name of a predefined unit or a child of
@@ -51,4 +52,52 @@
    --  Output unit name with (body) or (spec) after as required. On return
    --  Name_Len is set to the number of characters which were output.
 
+   ---------------
+   -- Iterators --
+   ---------------
+
+   --  The following type represents an iterator over all units that are
+   --  specified in the forced-elaboration-order file supplied by the binder
+   --  via switch -f.
+
+   type Forced_Units_Iterator is private;
+
+   function Has_Next (Iter : Forced_Units_Iterator) return Boolean;
+   pragma Inline (Has_Next);
+   --  Determine whether iterator Iter has more units to examine
+
+   function Iterate_Forced_Units return Forced_Units_Iterator;
+   pragma Inline (Iterate_Forced_Units);
+   --  Obtain an iterator over all units in the forced-elaboration-order file
+
+   procedure Next
+     (Iter      : in out Forced_Units_Iterator;
+      Unit_Name : out Unit_Name_Type;
+      Unit_Line : out Logical_Line_Number);
+   pragma Inline (Next);
+   --  Return the current unit referenced by iterator Iter along with the
+   --  line number it appears on, and advance to the next available unit.
+
+private
+   First_Line_Number : constant Logical_Line_Number := No_Line_Number + 1;
+
+   type Forced_Units_Iterator is record
+      Order : String_Ptr := null;
+      --  A reference to the contents of the forced-elaboration-order file,
+      --  read in as a string.
+
+      Order_Index : Positive := 1;
+      --  Index into the order string
+
+      Order_Line : Logical_Line_Number := First_Line_Number;
+      --  Logical line number within the order string
+
+      Unit_Line : Logical_Line_Number := No_Line_Number;
+      --  The logical line number of the current unit name within the order
+      --  string.
+
+      Unit_Name : Unit_Name_Type := No_Unit_Name;
+      --  The current unit name parsed from the order string
+   end record;
+
 end Butil;