File : prj-strt.ads


   1 ------------------------------------------------------------------------------
   2 --                                                                          --
   3 --                         GNAT COMPILER COMPONENTS                         --
   4 --                                                                          --
   5 --                             P R J . S T R T                              --
   6 --                                                                          --
   7 --                                 S p e c                                  --
   8 --                                                                          --
   9 --          Copyright (C) 2001-2014, Free Software Foundation, Inc.         --
  10 --                                                                          --
  11 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  12 -- 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- --
  14 -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
  15 -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
  16 -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
  17 -- for  more details.  You should have  received  a copy of the GNU General --
  18 -- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
  19 -- http://www.gnu.org/licenses for a complete copy of the license.          --
  20 --                                                                          --
  21 -- GNAT was originally developed  by the GNAT team at  New York University. --
  22 -- Extensive contributions were provided by Ada Core Technologies Inc.      --
  23 --                                                                          --
  24 ------------------------------------------------------------------------------
  25 
  26 --  This package implements parsing of string expressions in project files
  27 
  28 with Prj.Tree;  use Prj.Tree;
  29 
  30 private package Prj.Strt is
  31 
  32    procedure Parse_String_Type_List
  33      (In_Tree      : Project_Node_Tree_Ref;
  34       First_String : out Project_Node_Id;
  35       Flags        : Processing_Flags);
  36    --  Get the list of literal strings that are allowed for a typed string.
  37    --  On entry, the current token is the first literal string following
  38    --  a left parenthesis in a string type declaration such as:
  39    --    type Toto is ("string_1", "string_2", "string_3");
  40    --
  41    --  On exit, the current token is the right parenthesis. The parameter
  42    --  First_String is a node that contained the first literal string of the
  43    --  string type, linked with the following literal strings.
  44    --
  45    --  Report an error if
  46    --    - a literal string is not found at the beginning of the list
  47    --      or after a comma
  48    --    - two literal strings in the list are equal
  49 
  50    procedure Start_New_Case_Construction
  51      (In_Tree     : Project_Node_Tree_Ref;
  52       String_Type : Project_Node_Id);
  53    --  This procedure is called at the beginning of a case construction. The
  54    --  parameter String_Type is the node for the string type of the case label
  55    --  variable. The different literal strings of the string type are stored
  56    --  into a table to be checked against the labels of the case construction.
  57 
  58    procedure End_Case_Construction
  59      (Check_All_Labels : Boolean;
  60       Case_Location    : Source_Ptr;
  61       Flags            : Processing_Flags;
  62       String_Type      : Boolean);
  63    --  This procedure is called at the end of a case construction to remove
  64    --  the case labels and to restore the previous state. In particular, in the
  65    --  case of nested case constructions, the case labels of the enclosing case
  66    --  construction are restored. If When_Others is False and we are not in
  67    --  quiet output, a warning is emitted for each value of the case variable
  68    --  string type that has not been specified.
  69 
  70    procedure Parse_Choice_List
  71      (In_Tree      : Project_Node_Tree_Ref;
  72       First_Choice : out Project_Node_Id;
  73       Flags        : Processing_Flags;
  74       String_Type  : Boolean := True);
  75    --  Get the label for a choice list.
  76    --  Report an error if
  77    --    - a case label is not a literal string
  78    --    - a case label is not in the typed string list
  79    --    - the same case label is repeated in the same case construction
  80 
  81    procedure Parse_Expression
  82      (In_Tree         : Project_Node_Tree_Ref;
  83       Expression      : out Project_Node_Id;
  84       Current_Project : Project_Node_Id;
  85       Current_Package : Project_Node_Id;
  86       Optional_Index  : Boolean;
  87       Flags           : Processing_Flags);
  88    --  Parse a simple string expression or a string list expression
  89    --
  90    --  Current_Project is the node of the project file being parsed
  91    --
  92    --  Current_Package is the node of the package being parsed, or Empty_Node
  93    --  when we are at the project level (not in a package). On exit, Expression
  94    --  is the node of the expression that has been parsed.
  95 
  96    procedure Parse_Variable_Reference
  97      (In_Tree         : Project_Node_Tree_Ref;
  98       Variable        : out Project_Node_Id;
  99       Current_Project : Project_Node_Id;
 100       Current_Package : Project_Node_Id;
 101       Flags           : Processing_Flags);
 102    --  Parse variable or attribute reference. Used internally (in expressions)
 103    --  and for case variables (in Prj.Dect). Current_Package is the node of the
 104    --  package being parsed, or Empty_Node when we are at the project level
 105    --  (not in a package). On exit, Variable is the node of the variable or
 106    --  attribute reference. A variable reference is made of one to three simple
 107    --  names. An attribute reference is made of one or two simple names,
 108    --  followed by an apostrophe, followed by the attribute simple name.
 109 
 110 end Prj.Strt;