------------------------------------------------------------------------------
--                                                                          --
--                         GNAT COMPILER COMPONENTS                         --
--                                                                          --
--                               S P R I N T                                --
--                                                                          --
--                                 S p e c                                  --
--                                                                          --
--          Copyright (C) 1992-2013, 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 package (source print) contains routines for printing the source
--  program corresponding to a specified syntax tree. These routines are
--  intended for debugging use in the compiler (not as a user level pretty
--  print tool). Only information present in the tree is output (e.g. no
--  comments are present in the output), and as far as possible we avoid
--  making any assumptions about the correctness of the tree, so a bad
--  tree may either blow up on a debugging check, or list incorrect source.

with Types; use Types;

package Sprint is

   -----------------------
   -- Syntax Extensions --
   -----------------------

   --  When the generated tree is printed, it contains constructs that are not
   --  pure Ada. For convenience, syntactic extensions to Ada have been defined
   --  purely for the purposes of this printout (they are not recognized by the
   --  parser)

   --  Could use more documentation for all of these ???

   --    Allocator                           new xxx [storage_pool = xxx]
   --    Cleanup action                      at end procedure name;
   --    Conversion wi Float_Truncate        target^(source)
   --    Convert wi Conversion_OK            target?(source)
   --    Convert wi Rounded_Result           target@(source)
   --    Divide wi Treat_Fixed_As_Integer    x #/ y
   --    Divide wi Rounded_Result            x @/ y
   --    Expression with actions             do action; .. action; in expr end
   --    Expression with range check         {expression}
   --    Free statement                      free expr [storage_pool = xxx]
   --    Freeze entity with freeze actions   freeze entityname [ actions ]
   --    Freeze generic entity               freeze_generic entityname
   --    Implicit call to run time routine   $routine-name
   --    Implicit exportation                $pragma import (...)
   --    Implicit importation                $pragma export (...)
   --    Interpretation                      interpretation type [, entity]
   --    Intrinsic calls                     function-name!(arg, arg, arg)
   --    Itype declaration                   [(sub)type declaration without ;]
   --    Itype reference                     reference itype
   --    Label declaration                   labelname : label
   --    Mod wi Treat_Fixed_As_Integer       x #mod y
   --    Multiple concatenation              expr && expr && expr ... && expr
   --    Multiply wi Treat_Fixed_As_Integer  x #* y
   --    Multiply wi Rounded_Result          x @* y
   --    Operator with range check           {operator} (e.g. {+})
   --    Others choice for cleanup           when all others
   --    Pop exception label                 %pop_xxx_exception_label
   --    Push exception label                %push_xxx_exception_label (label)
   --    Raise xxx error                     [xxx_error [when cond]]
   --    Raise xxx error with msg            [xxx_error [when cond], "msg"]
   --    Rational literal                    [expression]
   --    Rem wi Treat_Fixed_As_Integer       x #rem y
   --    Reference                           expression'reference
   --    Shift nodes                         shift_name!(expr, count)
   --    Static declaration                  name : static xxx
   --    Unchecked conversion                target_type!(source_expression)
   --    Unchecked expression                `(expression)
   --    Validate_Unchecked_Conversion       validate unchecked_conversion
   --                                                  (src-type, target-typ);

   --  Note: the storage_pool parameters for allocators and the free node are
   --  omitted if the Storage_Pool field is Empty, indicating use of the
   --  standard default pool.

   -----------------
   -- Subprograms --
   -----------------

   procedure Source_Dump;
   --  This routine is called from the GNAT main program to dump source as
   --  requested by debug options. The relevant debug options are:
   --    -ds  print source from tree, both original and generated code
   --    -dg  print source from tree, including only the generated code
   --    -do  print source from tree, including only the original code
   --    -df  modify the above to include all units, not just the main unit
   --    -sz  print source from tree for package Standard

   procedure Sprint_Comma_List (List : List_Id);
   --  Prints the nodes in a list, with separating commas. If the list is empty
   --  then no output is generated.

   procedure Sprint_Paren_Comma_List (List : List_Id);
   --  Prints the nodes in a list, surrounded by parentheses, and separated by
   --  commas. If the list is empty, then no output is generated. A blank is
   --  output before the initial left parenthesis.

   procedure Sprint_Opt_Paren_Comma_List (List : List_Id);
   --  Same as normal Sprint_Paren_Comma_List procedure, except that an extra
   --  blank is output if List is non-empty, and nothing at all is printed it
   --  the argument is No_List.

   procedure Sprint_Node_List (List : List_Id; New_Lines : Boolean := False);
   --  Prints the nodes in a list with no separating characters. This is used
   --  in the case of lists of items which are printed on separate lines using
   --  the current indentation amount. New_Lines controls the generation of
   --  New_Line calls. If False, no New_Line calls are generated. If True,
   --  then New_Line calls are generated as needed to ensure that each list
   --  item starts at the beginning of a line.

   procedure Sprint_Opt_Node_List (List : List_Id);
   --  Like Sprint_Node_List, but prints nothing if List = No_List

   procedure Sprint_Indented_List (List : List_Id);
   --  Like Sprint_Line_List, except that the indentation level is increased
   --  before outputting the list of items, and then decremented (back to its
   --  original level) before returning to the caller.

   procedure Sprint_Node (Node : Node_Id);
   --  Prints a single node. No new lines are output, except as required for
   --  splitting lines that are too long to fit on a single physical line.
   --  No output is generated at all if Node is Empty. No trailing or leading
   --  blank characters are generated.

   procedure Sprint_Opt_Node (Node : Node_Id);
   --  Same as normal Sprint_Node procedure, except that one leading blank is
   --  output before the node if it is non-empty.

   procedure pg (Arg : Union_Id);
   pragma Export (Ada, pg);
   --  Print generated source for argument N (like -gnatdg output). Intended
   --  only for use from gdb for debugging purposes. Currently, Arg may be a
   --  List_Id or a Node_Id (anything else outputs a blank line).

   procedure po (Arg : Union_Id);
   pragma Export (Ada, po);
   --  Like pg, but prints original source for the argument (like -gnatdo
   --  output). Intended only for use from gdb for debugging purposes. In
   --  the list case, an end of line is output to separate list elements.

   procedure ps (Arg : Union_Id);
   pragma Export (Ada, ps);
   --  Like pg, but prints generated and original source for the argument (like
   --  -gnatds output). Intended only for use from gdb for debugging purposes.
   --  In the list case, an end of line is output to separate list elements.

end Sprint;
