------------------------------------------------------------------------------
--                                                                          --
--                         GNAT COMPILER COMPONENTS                         --
--                                                                          --
--                             S I N P U T . D                              --
--                                                                          --
--                                 S p e c                                  --
--                                                                          --
--          Copyright (C) 2001-2022, 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- --
-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
-- for  more details.  You should have  received  a copy of the GNU General --
-- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
-- http://www.gnu.org/licenses for a complete copy of the license.          --
--                                                                          --
-- GNAT was originally developed  by the GNAT team at  New York University. --
-- Extensive contributions were provided by Ada Core Technologies Inc.      --
--                                                                          --
------------------------------------------------------------------------------

--  This child package contains the routines used to write debug source
--  files. These routines are not in Sinput.L, because they are used only
--  by the compiler, while Sinput.L is also used by gnatmake.

package Sinput.D is

   ------------------------------------------------
   -- Subprograms for Writing Debug Source Files --
   ------------------------------------------------

   procedure Create_Debug_Source
     (Source : Source_File_Index;
      Loc    : out Source_Ptr);
   --  Given a source file, creates a new source file table entry to be used
   --  for the debug source file output (Debug_Generated_Code switch set).
   --  Loc is set to the initial Sloc value for the first line. This call
   --  also creates the debug source output file (using Create_Debug_File).

   procedure Write_Debug_Line (Str : String; Loc : in out Source_Ptr);
   --  This procedure is called to write a line to the debug source file
   --  previously created by Create_Debug_Source using Write_Debug_Info.
   --  Str is the source line to be written to the file (it does not include
   --  an end of line character). On entry Loc is the Sloc value previously
   --  returned by Create_Debug_Source or Write_Debug_Line, and on exit,
   --  Sloc is updated to point to the start of the next line to be written,
   --  taking into account the length of the terminator that was written by
   --  Write_Debug_Info.

   procedure Close_Debug_Source;
   --  This procedure completes the source table entry for the debug file
   --  previously created by Create_Debug_Source, and written using the
   --  Write_Debug_Line procedure. It then calls Close_Debug_File to
   --  complete the writing of the file itself.

end Sinput.D;
