sinfo-cn.ads 4.41 KB
Newer Older
Richard Kenner committed
1 2 3 4 5 6 7 8
------------------------------------------------------------------------------
--                                                                          --
--                         GNAT COMPILER COMPONENTS                         --
--                                                                          --
--                             S I N F O . C N                              --
--                                                                          --
--                                 S p e c                                  --
--                                                                          --
9
--          Copyright (C) 1992-2018, Free Software Foundation, Inc.         --
Richard Kenner committed
10 11 12
--                                                                          --
-- 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- --
13
-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
Richard Kenner committed
14 15 16 17
-- 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 --
18 19
-- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
-- http://www.gnu.org/licenses for a complete copy of the license.          --
Richard Kenner committed
20 21
--                                                                          --
-- GNAT was originally developed  by the GNAT team at  New York University. --
22
-- Extensive contributions were provided by Ada Core Technologies Inc.      --
Richard Kenner committed
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
--                                                                          --
------------------------------------------------------------------------------

--  This child package of Sinfo contains some routines that permit in place
--  alteration of existing tree nodes by changing the value in the Nkind
--  field. Since Nkind functions logically in a manner similar to a variant
--  record discriminant part, such alterations cannot be permitted in a
--  general manner, but in some specific cases, the fields of related nodes
--  have been deliberately laid out in a manner that permits such alteration.

package Sinfo.CN is

   procedure Change_Identifier_To_Defining_Identifier (N : in out Node_Id);
   --  N must refer to a node of type N_Identifier. This node is modified to
   --  be of type N_Defining_Identifier. The scanner always returns identifiers
   --  as N_Identifier. The parser then uses this routine to change the node
   --  to be a defining identifier where the context demands it. This routine
   --  also allocates the necessary extension node. Note that this procedure
   --  may (but is not required to) change the Id of the node in question.

   procedure Change_Character_Literal_To_Defining_Character_Literal
     (N : in out Node_Id);
   --  Similar processing for a character literal

   procedure Change_Operator_Symbol_To_Defining_Operator_Symbol
     (N : in out Node_Id);
   --  Similar processing for an operator symbol

   procedure Change_Conversion_To_Unchecked (N : Node_Id);
   --  Change checked conversion node to unchecked conversion node, clearing
   --  irrelevant check flags (other fields in the two nodes are identical)

   procedure Change_Operator_Symbol_To_String_Literal (N : Node_Id);
   --  The scanner returns any string that looks like an operator symbol as
   --  a N_Operator_Symbol node. The parser then uses this procedure to change
   --  the node to a normal N_String_Literal node if the context is not one
   --  in which an operator symbol is required. There are some cases where the
   --  parser cannot tell, in which case this transformation happens later on.

   procedure Change_Selected_Component_To_Expanded_Name (N : Node_Id);
   --  The parser always generates Selected_Component nodes. The semantics
   --  modifies these to Expanded_Name nodes where appropriate. Note that
   --  on return the Chars field is set to a copy of the contents of the
   --  Chars field of the Selector_Name field.

Arnaud Charlet committed
68 69 70 71 72
   procedure Change_Name_To_Procedure_Call_Statement (N : Node_Id);
   --  Some statements (procedure call statements) are in the form of a name
   --  and are parsed as such. This routine takes the scanned name as input
   --  and returns the corresponding N_Procedure_Call_Statement.

Richard Kenner committed
73
end Sinfo.CN;