1 ------------------------------------------------------------------------------
3 -- GNAT COMPILER COMPONENTS --
9 -- Copyright (C) 2001-2008, Free Software Foundation, Inc. --
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. --
21 -- GNAT was originally developed by the GNAT team at New York University. --
22 -- Extensive contributions were provided by Ada Core Technologies Inc. --
24 ------------------------------------------------------------------------------
28 package body Prj.Tree is
30 Node_With_Comments : constant array (Project_Node_Kind) of Boolean :=
32 N_With_Clause => True,
33 N_Project_Declaration => False,
34 N_Declarative_Item => False,
35 N_Package_Declaration => True,
36 N_String_Type_Declaration => True,
37 N_Literal_String => False,
38 N_Attribute_Declaration => True,
39 N_Typed_Variable_Declaration => True,
40 N_Variable_Declaration => True,
41 N_Expression => False,
43 N_Literal_String_List => False,
44 N_Variable_Reference => False,
45 N_External_Value => False,
46 N_Attribute_Reference => False,
47 N_Case_Construction => True,
49 N_Comment_Zones => True,
51 -- Indicates the kinds of node that may have associated comments
53 package Next_End_Nodes is new Table.Table
54 (Table_Component_Type => Project_Node_Id,
55 Table_Index_Type => Natural,
58 Table_Increment => 100,
59 Table_Name => "Next_End_Nodes");
60 -- A stack of nodes to indicates to what node the next "end" is associated
62 use Tree_Private_Part;
64 End_Of_Line_Node : Project_Node_Id := Empty_Node;
65 -- The node an end of line comment may be associated with
67 Previous_Line_Node : Project_Node_Id := Empty_Node;
68 -- The node an immediately following comment may be associated with
70 Previous_End_Node : Project_Node_Id := Empty_Node;
71 -- The node comments immediately following an "end" line may be
74 Unkept_Comments : Boolean := False;
75 -- Set to True when some comments may not be associated with any node
77 function Comment_Zones_Of
78 (Node : Project_Node_Id;
79 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id;
80 -- Returns the ID of the N_Comment_Zones node associated with node Node.
81 -- If there is not already an N_Comment_Zones node, create one and
82 -- associate it with node Node.
88 procedure Add_Comments
89 (To : Project_Node_Id;
90 In_Tree : Project_Node_Tree_Ref;
91 Where : Comment_Location) is
92 Zone : Project_Node_Id := Empty_Node;
93 Previous : Project_Node_Id := Empty_Node;
99 In_Tree.Project_Nodes.Table (To).Kind /= N_Comment);
101 Zone := In_Tree.Project_Nodes.Table (To).Comments;
103 if Zone = Empty_Node then
105 -- Create new N_Comment_Zones node
107 Project_Node_Table.Increment_Last (In_Tree.Project_Nodes);
108 In_Tree.Project_Nodes.Table
109 (Project_Node_Table.Last (In_Tree.Project_Nodes)) :=
110 (Kind => N_Comment_Zones,
111 Qualifier => Unspecified,
112 Expr_Kind => Undefined,
113 Location => No_Location,
114 Directory => No_Path,
115 Variables => Empty_Node,
116 Packages => Empty_Node,
117 Pkg_Id => Empty_Package,
120 Path_Name => No_Path,
122 Field1 => Empty_Node,
123 Field2 => Empty_Node,
124 Field3 => Empty_Node,
127 Comments => Empty_Node);
129 Zone := Project_Node_Table.Last (In_Tree.Project_Nodes);
130 In_Tree.Project_Nodes.Table (To).Comments := Zone;
133 if Where = End_Of_Line then
134 In_Tree.Project_Nodes.Table (Zone).Value := Comments.Table (1).Value;
137 -- Get each comments in the Comments table and link them to node To
139 for J in 1 .. Comments.Last loop
141 -- Create new N_Comment node
143 if (Where = After or else Where = After_End) and then
144 Token /= Tok_EOF and then
145 Comments.Table (J).Follows_Empty_Line
147 Comments.Table (1 .. Comments.Last - J + 1) :=
148 Comments.Table (J .. Comments.Last);
149 Comments.Set_Last (Comments.Last - J + 1);
153 Project_Node_Table.Increment_Last (In_Tree.Project_Nodes);
154 In_Tree.Project_Nodes.Table
155 (Project_Node_Table.Last (In_Tree.Project_Nodes)) :=
157 Qualifier => Unspecified,
158 Expr_Kind => Undefined,
159 Flag1 => Comments.Table (J).Follows_Empty_Line,
161 Comments.Table (J).Is_Followed_By_Empty_Line,
162 Location => No_Location,
163 Directory => No_Path,
164 Variables => Empty_Node,
165 Packages => Empty_Node,
166 Pkg_Id => Empty_Package,
169 Path_Name => No_Path,
170 Value => Comments.Table (J).Value,
171 Field1 => Empty_Node,
172 Field2 => Empty_Node,
173 Field3 => Empty_Node,
174 Comments => Empty_Node);
176 -- If this is the first comment, put it in the right field of
179 if Previous = Empty_Node then
182 In_Tree.Project_Nodes.Table (Zone).Field1 :=
183 Project_Node_Table.Last (In_Tree.Project_Nodes);
186 In_Tree.Project_Nodes.Table (Zone).Field2 :=
187 Project_Node_Table.Last (In_Tree.Project_Nodes);
190 In_Tree.Project_Nodes.Table (Zone).Field3 :=
191 Project_Node_Table.Last (In_Tree.Project_Nodes);
194 In_Tree.Project_Nodes.Table (Zone).Comments :=
195 Project_Node_Table.Last (In_Tree.Project_Nodes);
202 -- When it is not the first, link it to the previous one
204 In_Tree.Project_Nodes.Table (Previous).Comments :=
205 Project_Node_Table.Last (In_Tree.Project_Nodes);
208 -- This node becomes the previous one for the next comment, if
211 Previous := Project_Node_Table.Last (In_Tree.Project_Nodes);
215 -- Empty the Comments table, so that there is no risk to link the same
216 -- comments to another node.
218 Comments.Set_Last (0);
221 --------------------------------
222 -- Associative_Array_Index_Of --
223 --------------------------------
225 function Associative_Array_Index_Of
226 (Node : Project_Node_Id;
227 In_Tree : Project_Node_Tree_Ref) return Name_Id
233 (In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Declaration
235 In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Reference));
236 return In_Tree.Project_Nodes.Table (Node).Value;
237 end Associative_Array_Index_Of;
239 ----------------------------
240 -- Associative_Package_Of --
241 ----------------------------
243 function Associative_Package_Of
244 (Node : Project_Node_Id;
245 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
251 (In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Declaration));
252 return In_Tree.Project_Nodes.Table (Node).Field3;
253 end Associative_Package_Of;
255 ----------------------------
256 -- Associative_Project_Of --
257 ----------------------------
259 function Associative_Project_Of
260 (Node : Project_Node_Id;
261 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
267 (In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Declaration));
268 return In_Tree.Project_Nodes.Table (Node).Field2;
269 end Associative_Project_Of;
271 ----------------------
272 -- Case_Insensitive --
273 ----------------------
275 function Case_Insensitive
276 (Node : Project_Node_Id;
277 In_Tree : Project_Node_Tree_Ref) return Boolean is
282 (In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Declaration
284 In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Reference));
285 return In_Tree.Project_Nodes.Table (Node).Flag1;
286 end Case_Insensitive;
288 --------------------------------
289 -- Case_Variable_Reference_Of --
290 --------------------------------
292 function Case_Variable_Reference_Of
293 (Node : Project_Node_Id;
294 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
300 In_Tree.Project_Nodes.Table (Node).Kind = N_Case_Construction);
301 return In_Tree.Project_Nodes.Table (Node).Field1;
302 end Case_Variable_Reference_Of;
304 ----------------------
305 -- Comment_Zones_Of --
306 ----------------------
308 function Comment_Zones_Of
309 (Node : Project_Node_Id;
310 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
312 Zone : Project_Node_Id;
315 pragma Assert (Node /= Empty_Node);
316 Zone := In_Tree.Project_Nodes.Table (Node).Comments;
318 -- If there is not already an N_Comment_Zones associated, create a new
319 -- one and associate it with node Node.
321 if Zone = Empty_Node then
322 Project_Node_Table.Increment_Last (In_Tree.Project_Nodes);
323 Zone := Project_Node_Table.Last (In_Tree.Project_Nodes);
324 In_Tree.Project_Nodes.Table (Zone) :=
325 (Kind => N_Comment_Zones,
326 Qualifier => Unspecified,
327 Location => No_Location,
328 Directory => No_Path,
329 Expr_Kind => Undefined,
330 Variables => Empty_Node,
331 Packages => Empty_Node,
332 Pkg_Id => Empty_Package,
335 Path_Name => No_Path,
337 Field1 => Empty_Node,
338 Field2 => Empty_Node,
339 Field3 => Empty_Node,
342 Comments => Empty_Node);
343 In_Tree.Project_Nodes.Table (Node).Comments := Zone;
347 end Comment_Zones_Of;
349 -----------------------
350 -- Current_Item_Node --
351 -----------------------
353 function Current_Item_Node
354 (Node : Project_Node_Id;
355 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
361 In_Tree.Project_Nodes.Table (Node).Kind = N_Declarative_Item);
362 return In_Tree.Project_Nodes.Table (Node).Field1;
363 end Current_Item_Node;
369 function Current_Term
370 (Node : Project_Node_Id;
371 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
377 In_Tree.Project_Nodes.Table (Node).Kind = N_Term);
378 return In_Tree.Project_Nodes.Table (Node).Field1;
381 --------------------------
382 -- Default_Project_Node --
383 --------------------------
385 function Default_Project_Node
386 (In_Tree : Project_Node_Tree_Ref;
387 Of_Kind : Project_Node_Kind;
388 And_Expr_Kind : Variable_Kind := Undefined) return Project_Node_Id
390 Result : Project_Node_Id;
391 Zone : Project_Node_Id;
392 Previous : Project_Node_Id;
395 -- Create new node with specified kind and expression kind
397 Project_Node_Table.Increment_Last (In_Tree.Project_Nodes);
398 In_Tree.Project_Nodes.Table
399 (Project_Node_Table.Last (In_Tree.Project_Nodes)) :=
401 Qualifier => Unspecified,
402 Location => No_Location,
403 Directory => No_Path,
404 Expr_Kind => And_Expr_Kind,
405 Variables => Empty_Node,
406 Packages => Empty_Node,
407 Pkg_Id => Empty_Package,
410 Path_Name => No_Path,
412 Field1 => Empty_Node,
413 Field2 => Empty_Node,
414 Field3 => Empty_Node,
417 Comments => Empty_Node);
419 -- Save the new node for the returned value
421 Result := Project_Node_Table.Last (In_Tree.Project_Nodes);
423 if Comments.Last > 0 then
425 -- If this is not a node with comments, then set the flag
427 if not Node_With_Comments (Of_Kind) then
428 Unkept_Comments := True;
430 elsif Of_Kind /= N_Comment and then Of_Kind /= N_Comment_Zones then
432 Project_Node_Table.Increment_Last (In_Tree.Project_Nodes);
433 In_Tree.Project_Nodes.Table
434 (Project_Node_Table.Last (In_Tree.Project_Nodes)) :=
435 (Kind => N_Comment_Zones,
436 Qualifier => Unspecified,
437 Expr_Kind => Undefined,
438 Location => No_Location,
439 Directory => No_Path,
440 Variables => Empty_Node,
441 Packages => Empty_Node,
442 Pkg_Id => Empty_Package,
445 Path_Name => No_Path,
447 Field1 => Empty_Node,
448 Field2 => Empty_Node,
449 Field3 => Empty_Node,
452 Comments => Empty_Node);
454 Zone := Project_Node_Table.Last (In_Tree.Project_Nodes);
455 In_Tree.Project_Nodes.Table (Result).Comments := Zone;
456 Previous := Empty_Node;
458 for J in 1 .. Comments.Last loop
460 -- Create a new N_Comment node
462 Project_Node_Table.Increment_Last (In_Tree.Project_Nodes);
463 In_Tree.Project_Nodes.Table
464 (Project_Node_Table.Last (In_Tree.Project_Nodes)) :=
466 Qualifier => Unspecified,
467 Expr_Kind => Undefined,
468 Flag1 => Comments.Table (J).Follows_Empty_Line,
470 Comments.Table (J).Is_Followed_By_Empty_Line,
471 Location => No_Location,
472 Directory => No_Path,
473 Variables => Empty_Node,
474 Packages => Empty_Node,
475 Pkg_Id => Empty_Package,
478 Path_Name => No_Path,
479 Value => Comments.Table (J).Value,
480 Field1 => Empty_Node,
481 Field2 => Empty_Node,
482 Field3 => Empty_Node,
483 Comments => Empty_Node);
485 -- Link it to the N_Comment_Zones node, if it is the first,
486 -- otherwise to the previous one.
488 if Previous = Empty_Node then
489 In_Tree.Project_Nodes.Table (Zone).Field1 :=
490 Project_Node_Table.Last (In_Tree.Project_Nodes);
493 In_Tree.Project_Nodes.Table (Previous).Comments :=
494 Project_Node_Table.Last (In_Tree.Project_Nodes);
497 -- This new node will be the previous one for the next
498 -- N_Comment node, if there is one.
500 Previous := Project_Node_Table.Last (In_Tree.Project_Nodes);
503 -- Empty the Comments table after all comments have been processed
505 Comments.Set_Last (0);
510 end Default_Project_Node;
516 function Directory_Of
517 (Node : Project_Node_Id;
518 In_Tree : Project_Node_Tree_Ref) return Path_Name_Type is
523 In_Tree.Project_Nodes.Table (Node).Kind = N_Project);
524 return In_Tree.Project_Nodes.Table (Node).Directory;
527 -------------------------
528 -- End_Of_Line_Comment --
529 -------------------------
531 function End_Of_Line_Comment
532 (Node : Project_Node_Id;
533 In_Tree : Project_Node_Tree_Ref) return Name_Id is
534 Zone : Project_Node_Id := Empty_Node;
537 pragma Assert (Node /= Empty_Node);
538 Zone := In_Tree.Project_Nodes.Table (Node).Comments;
540 if Zone = Empty_Node then
543 return In_Tree.Project_Nodes.Table (Zone).Value;
545 end End_Of_Line_Comment;
547 ------------------------
548 -- Expression_Kind_Of --
549 ------------------------
551 function Expression_Kind_Of
552 (Node : Project_Node_Id;
553 In_Tree : Project_Node_Tree_Ref) return Variable_Kind is
558 (In_Tree.Project_Nodes.Table (Node).Kind = N_Literal_String
560 In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Declaration
562 In_Tree.Project_Nodes.Table (Node).Kind = N_Variable_Declaration
564 In_Tree.Project_Nodes.Table (Node).Kind =
565 N_Typed_Variable_Declaration
567 In_Tree.Project_Nodes.Table (Node).Kind = N_Package_Declaration
569 In_Tree.Project_Nodes.Table (Node).Kind = N_Expression
571 In_Tree.Project_Nodes.Table (Node).Kind = N_Term
573 In_Tree.Project_Nodes.Table (Node).Kind = N_Variable_Reference
575 In_Tree.Project_Nodes.Table (Node).Kind =
576 N_Attribute_Reference));
578 return In_Tree.Project_Nodes.Table (Node).Expr_Kind;
579 end Expression_Kind_Of;
585 function Expression_Of
586 (Node : Project_Node_Id;
587 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
593 (In_Tree.Project_Nodes.Table (Node).Kind =
594 N_Attribute_Declaration
596 In_Tree.Project_Nodes.Table (Node).Kind =
597 N_Typed_Variable_Declaration
599 In_Tree.Project_Nodes.Table (Node).Kind =
600 N_Variable_Declaration));
602 return In_Tree.Project_Nodes.Table (Node).Field1;
605 -------------------------
606 -- Extended_Project_Of --
607 -------------------------
609 function Extended_Project_Of
610 (Node : Project_Node_Id;
611 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
617 In_Tree.Project_Nodes.Table (Node).Kind = N_Project_Declaration);
618 return In_Tree.Project_Nodes.Table (Node).Field2;
619 end Extended_Project_Of;
621 ------------------------------
622 -- Extended_Project_Path_Of --
623 ------------------------------
625 function Extended_Project_Path_Of
626 (Node : Project_Node_Id;
627 In_Tree : Project_Node_Tree_Ref) return Path_Name_Type
633 In_Tree.Project_Nodes.Table (Node).Kind = N_Project);
634 return Path_Name_Type (In_Tree.Project_Nodes.Table (Node).Value);
635 end Extended_Project_Path_Of;
637 --------------------------
638 -- Extending_Project_Of --
639 --------------------------
640 function Extending_Project_Of
641 (Node : Project_Node_Id;
642 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
648 In_Tree.Project_Nodes.Table (Node).Kind = N_Project_Declaration);
649 return In_Tree.Project_Nodes.Table (Node).Field3;
650 end Extending_Project_Of;
652 ---------------------------
653 -- External_Reference_Of --
654 ---------------------------
656 function External_Reference_Of
657 (Node : Project_Node_Id;
658 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
664 In_Tree.Project_Nodes.Table (Node).Kind = N_External_Value);
665 return In_Tree.Project_Nodes.Table (Node).Field1;
666 end External_Reference_Of;
668 -------------------------
669 -- External_Default_Of --
670 -------------------------
672 function External_Default_Of
673 (Node : Project_Node_Id;
674 In_Tree : Project_Node_Tree_Ref)
675 return Project_Node_Id
681 In_Tree.Project_Nodes.Table (Node).Kind = N_External_Value);
682 return In_Tree.Project_Nodes.Table (Node).Field2;
683 end External_Default_Of;
685 ------------------------
686 -- First_Case_Item_Of --
687 ------------------------
689 function First_Case_Item_Of
690 (Node : Project_Node_Id;
691 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
697 In_Tree.Project_Nodes.Table (Node).Kind = N_Case_Construction);
698 return In_Tree.Project_Nodes.Table (Node).Field2;
699 end First_Case_Item_Of;
701 ---------------------
702 -- First_Choice_Of --
703 ---------------------
705 function First_Choice_Of
706 (Node : Project_Node_Id;
707 In_Tree : Project_Node_Tree_Ref)
708 return Project_Node_Id
714 In_Tree.Project_Nodes.Table (Node).Kind = N_Case_Item);
715 return In_Tree.Project_Nodes.Table (Node).Field1;
718 -------------------------
719 -- First_Comment_After --
720 -------------------------
722 function First_Comment_After
723 (Node : Project_Node_Id;
724 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
726 Zone : Project_Node_Id := Empty_Node;
728 pragma Assert (Node /= Empty_Node);
729 Zone := In_Tree.Project_Nodes.Table (Node).Comments;
731 if Zone = Empty_Node then
735 return In_Tree.Project_Nodes.Table (Zone).Field2;
737 end First_Comment_After;
739 -----------------------------
740 -- First_Comment_After_End --
741 -----------------------------
743 function First_Comment_After_End
744 (Node : Project_Node_Id;
745 In_Tree : Project_Node_Tree_Ref)
746 return Project_Node_Id
748 Zone : Project_Node_Id := Empty_Node;
751 pragma Assert (Node /= Empty_Node);
752 Zone := In_Tree.Project_Nodes.Table (Node).Comments;
754 if Zone = Empty_Node then
758 return In_Tree.Project_Nodes.Table (Zone).Comments;
760 end First_Comment_After_End;
762 --------------------------
763 -- First_Comment_Before --
764 --------------------------
766 function First_Comment_Before
767 (Node : Project_Node_Id;
768 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
770 Zone : Project_Node_Id := Empty_Node;
773 pragma Assert (Node /= Empty_Node);
774 Zone := In_Tree.Project_Nodes.Table (Node).Comments;
776 if Zone = Empty_Node then
780 return In_Tree.Project_Nodes.Table (Zone).Field1;
782 end First_Comment_Before;
784 ------------------------------
785 -- First_Comment_Before_End --
786 ------------------------------
788 function First_Comment_Before_End
789 (Node : Project_Node_Id;
790 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
792 Zone : Project_Node_Id := Empty_Node;
795 pragma Assert (Node /= Empty_Node);
796 Zone := In_Tree.Project_Nodes.Table (Node).Comments;
798 if Zone = Empty_Node then
802 return In_Tree.Project_Nodes.Table (Zone).Field3;
804 end First_Comment_Before_End;
806 -------------------------------
807 -- First_Declarative_Item_Of --
808 -------------------------------
810 function First_Declarative_Item_Of
811 (Node : Project_Node_Id;
812 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
818 (In_Tree.Project_Nodes.Table (Node).Kind = N_Project_Declaration
820 In_Tree.Project_Nodes.Table (Node).Kind = N_Case_Item
822 In_Tree.Project_Nodes.Table (Node).Kind = N_Package_Declaration));
824 if In_Tree.Project_Nodes.Table (Node).Kind = N_Project_Declaration then
825 return In_Tree.Project_Nodes.Table (Node).Field1;
827 return In_Tree.Project_Nodes.Table (Node).Field2;
829 end First_Declarative_Item_Of;
831 ------------------------------
832 -- First_Expression_In_List --
833 ------------------------------
835 function First_Expression_In_List
836 (Node : Project_Node_Id;
837 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
843 In_Tree.Project_Nodes.Table (Node).Kind = N_Literal_String_List);
844 return In_Tree.Project_Nodes.Table (Node).Field1;
845 end First_Expression_In_List;
847 --------------------------
848 -- First_Literal_String --
849 --------------------------
851 function First_Literal_String
852 (Node : Project_Node_Id;
853 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
859 In_Tree.Project_Nodes.Table (Node).Kind =
860 N_String_Type_Declaration);
861 return In_Tree.Project_Nodes.Table (Node).Field1;
862 end First_Literal_String;
864 ----------------------
865 -- First_Package_Of --
866 ----------------------
868 function First_Package_Of
869 (Node : Project_Node_Id;
870 In_Tree : Project_Node_Tree_Ref) return Package_Declaration_Id
876 In_Tree.Project_Nodes.Table (Node).Kind = N_Project);
877 return In_Tree.Project_Nodes.Table (Node).Packages;
878 end First_Package_Of;
880 --------------------------
881 -- First_String_Type_Of --
882 --------------------------
884 function First_String_Type_Of
885 (Node : Project_Node_Id;
886 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
892 In_Tree.Project_Nodes.Table (Node).Kind = N_Project);
893 return In_Tree.Project_Nodes.Table (Node).Field3;
894 end First_String_Type_Of;
901 (Node : Project_Node_Id;
902 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
908 In_Tree.Project_Nodes.Table (Node).Kind = N_Expression);
909 return In_Tree.Project_Nodes.Table (Node).Field1;
912 -----------------------
913 -- First_Variable_Of --
914 -----------------------
916 function First_Variable_Of
917 (Node : Project_Node_Id;
918 In_Tree : Project_Node_Tree_Ref) return Variable_Node_Id
924 (In_Tree.Project_Nodes.Table (Node).Kind = N_Project
926 In_Tree.Project_Nodes.Table (Node).Kind = N_Package_Declaration));
928 return In_Tree.Project_Nodes.Table (Node).Variables;
929 end First_Variable_Of;
931 --------------------------
932 -- First_With_Clause_Of --
933 --------------------------
935 function First_With_Clause_Of
936 (Node : Project_Node_Id;
937 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
943 In_Tree.Project_Nodes.Table (Node).Kind = N_Project);
944 return In_Tree.Project_Nodes.Table (Node).Field1;
945 end First_With_Clause_Of;
947 ------------------------
948 -- Follows_Empty_Line --
949 ------------------------
951 function Follows_Empty_Line
952 (Node : Project_Node_Id;
953 In_Tree : Project_Node_Tree_Ref) return Boolean is
958 In_Tree.Project_Nodes.Table (Node).Kind = N_Comment);
959 return In_Tree.Project_Nodes.Table (Node).Flag1;
960 end Follows_Empty_Line;
966 function Hash (N : Project_Node_Id) return Header_Num is
968 return Header_Num (N mod Project_Node_Id (Header_Num'Last));
975 procedure Initialize (Tree : Project_Node_Tree_Ref) is
977 Project_Node_Table.Init (Tree.Project_Nodes);
978 Projects_Htable.Reset (Tree.Projects_HT);
981 -------------------------------
982 -- Is_Followed_By_Empty_Line --
983 -------------------------------
985 function Is_Followed_By_Empty_Line
986 (Node : Project_Node_Id;
987 In_Tree : Project_Node_Tree_Ref) return Boolean
993 In_Tree.Project_Nodes.Table (Node).Kind = N_Comment);
994 return In_Tree.Project_Nodes.Table (Node).Flag2;
995 end Is_Followed_By_Empty_Line;
997 ----------------------
998 -- Is_Extending_All --
999 ----------------------
1001 function Is_Extending_All
1002 (Node : Project_Node_Id;
1003 In_Tree : Project_Node_Tree_Ref) return Boolean is
1008 (In_Tree.Project_Nodes.Table (Node).Kind = N_Project
1010 In_Tree.Project_Nodes.Table (Node).Kind = N_With_Clause));
1011 return In_Tree.Project_Nodes.Table (Node).Flag2;
1012 end Is_Extending_All;
1014 -------------------------
1015 -- Is_Not_Last_In_List --
1016 -------------------------
1018 function Is_Not_Last_In_List
1019 (Node : Project_Node_Id;
1020 In_Tree : Project_Node_Tree_Ref) return Boolean is
1025 In_Tree.Project_Nodes.Table (Node).Kind = N_With_Clause);
1026 return In_Tree.Project_Nodes.Table (Node).Flag1;
1027 end Is_Not_Last_In_List;
1029 -------------------------------------
1030 -- Imported_Or_Extended_Project_Of --
1031 -------------------------------------
1033 function Imported_Or_Extended_Project_Of
1034 (Project : Project_Node_Id;
1035 In_Tree : Project_Node_Tree_Ref;
1036 With_Name : Name_Id) return Project_Node_Id
1038 With_Clause : Project_Node_Id :=
1039 First_With_Clause_Of (Project, In_Tree);
1040 Result : Project_Node_Id := Empty_Node;
1043 -- First check all the imported projects
1045 while With_Clause /= Empty_Node loop
1047 -- Only non limited imported project may be used as prefix
1048 -- of variable or attributes.
1050 Result := Non_Limited_Project_Node_Of (With_Clause, In_Tree);
1051 exit when Result /= Empty_Node
1052 and then Name_Of (Result, In_Tree) = With_Name;
1053 With_Clause := Next_With_Clause_Of (With_Clause, In_Tree);
1056 -- If it is not an imported project, it might be an extended project
1058 if With_Clause = Empty_Node then
1063 (Project_Declaration_Of (Result, In_Tree), In_Tree);
1065 exit when Result = Empty_Node
1066 or else Name_Of (Result, In_Tree) = With_Name;
1071 end Imported_Or_Extended_Project_Of;
1078 (Node : Project_Node_Id;
1079 In_Tree : Project_Node_Tree_Ref) return Project_Node_Kind is
1081 pragma Assert (Node /= Empty_Node);
1082 return In_Tree.Project_Nodes.Table (Node).Kind;
1089 function Location_Of
1090 (Node : Project_Node_Id;
1091 In_Tree : Project_Node_Tree_Ref) return Source_Ptr is
1093 pragma Assert (Node /= Empty_Node);
1094 return In_Tree.Project_Nodes.Table (Node).Location;
1102 (Node : Project_Node_Id;
1103 In_Tree : Project_Node_Tree_Ref) return Name_Id is
1105 pragma Assert (Node /= Empty_Node);
1106 return In_Tree.Project_Nodes.Table (Node).Name;
1109 --------------------
1110 -- Next_Case_Item --
1111 --------------------
1113 function Next_Case_Item
1114 (Node : Project_Node_Id;
1115 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
1121 In_Tree.Project_Nodes.Table (Node).Kind = N_Case_Item);
1122 return In_Tree.Project_Nodes.Table (Node).Field3;
1129 function Next_Comment
1130 (Node : Project_Node_Id;
1131 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id is
1136 In_Tree.Project_Nodes.Table (Node).Kind = N_Comment);
1137 return In_Tree.Project_Nodes.Table (Node).Comments;
1140 ---------------------------
1141 -- Next_Declarative_Item --
1142 ---------------------------
1144 function Next_Declarative_Item
1145 (Node : Project_Node_Id;
1146 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
1152 In_Tree.Project_Nodes.Table (Node).Kind = N_Declarative_Item);
1153 return In_Tree.Project_Nodes.Table (Node).Field2;
1154 end Next_Declarative_Item;
1156 -----------------------------
1157 -- Next_Expression_In_List --
1158 -----------------------------
1160 function Next_Expression_In_List
1161 (Node : Project_Node_Id;
1162 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
1168 In_Tree.Project_Nodes.Table (Node).Kind = N_Expression);
1169 return In_Tree.Project_Nodes.Table (Node).Field2;
1170 end Next_Expression_In_List;
1172 -------------------------
1173 -- Next_Literal_String --
1174 -------------------------
1176 function Next_Literal_String
1177 (Node : Project_Node_Id;
1178 In_Tree : Project_Node_Tree_Ref)
1179 return Project_Node_Id
1185 In_Tree.Project_Nodes.Table (Node).Kind = N_Literal_String);
1186 return In_Tree.Project_Nodes.Table (Node).Field1;
1187 end Next_Literal_String;
1189 -----------------------------
1190 -- Next_Package_In_Project --
1191 -----------------------------
1193 function Next_Package_In_Project
1194 (Node : Project_Node_Id;
1195 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
1201 In_Tree.Project_Nodes.Table (Node).Kind = N_Package_Declaration);
1202 return In_Tree.Project_Nodes.Table (Node).Field3;
1203 end Next_Package_In_Project;
1205 ----------------------
1206 -- Next_String_Type --
1207 ----------------------
1209 function Next_String_Type
1210 (Node : Project_Node_Id;
1211 In_Tree : Project_Node_Tree_Ref)
1212 return Project_Node_Id
1218 In_Tree.Project_Nodes.Table (Node).Kind =
1219 N_String_Type_Declaration);
1220 return In_Tree.Project_Nodes.Table (Node).Field2;
1221 end Next_String_Type;
1228 (Node : Project_Node_Id;
1229 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
1235 In_Tree.Project_Nodes.Table (Node).Kind = N_Term);
1236 return In_Tree.Project_Nodes.Table (Node).Field2;
1243 function Next_Variable
1244 (Node : Project_Node_Id;
1245 In_Tree : Project_Node_Tree_Ref)
1246 return Project_Node_Id
1252 (In_Tree.Project_Nodes.Table (Node).Kind =
1253 N_Typed_Variable_Declaration
1255 In_Tree.Project_Nodes.Table (Node).Kind =
1256 N_Variable_Declaration));
1258 return In_Tree.Project_Nodes.Table (Node).Field3;
1261 -------------------------
1262 -- Next_With_Clause_Of --
1263 -------------------------
1265 function Next_With_Clause_Of
1266 (Node : Project_Node_Id;
1267 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
1273 In_Tree.Project_Nodes.Table (Node).Kind = N_With_Clause);
1274 return In_Tree.Project_Nodes.Table (Node).Field2;
1275 end Next_With_Clause_Of;
1277 ---------------------------------
1278 -- Non_Limited_Project_Node_Of --
1279 ---------------------------------
1281 function Non_Limited_Project_Node_Of
1282 (Node : Project_Node_Id;
1283 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
1289 (In_Tree.Project_Nodes.Table (Node).Kind = N_With_Clause));
1290 return In_Tree.Project_Nodes.Table (Node).Field3;
1291 end Non_Limited_Project_Node_Of;
1297 function Package_Id_Of
1298 (Node : Project_Node_Id;
1299 In_Tree : Project_Node_Tree_Ref) return Package_Node_Id
1305 In_Tree.Project_Nodes.Table (Node).Kind = N_Package_Declaration);
1306 return In_Tree.Project_Nodes.Table (Node).Pkg_Id;
1309 ---------------------
1310 -- Package_Node_Of --
1311 ---------------------
1313 function Package_Node_Of
1314 (Node : Project_Node_Id;
1315 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
1321 (In_Tree.Project_Nodes.Table (Node).Kind = N_Variable_Reference
1323 In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Reference));
1324 return In_Tree.Project_Nodes.Table (Node).Field2;
1325 end Package_Node_Of;
1331 function Path_Name_Of
1332 (Node : Project_Node_Id;
1333 In_Tree : Project_Node_Tree_Ref) return Path_Name_Type
1339 (In_Tree.Project_Nodes.Table (Node).Kind = N_Project
1341 In_Tree.Project_Nodes.Table (Node).Kind = N_With_Clause));
1342 return In_Tree.Project_Nodes.Table (Node).Path_Name;
1345 ----------------------------
1346 -- Project_Declaration_Of --
1347 ----------------------------
1349 function Project_Declaration_Of
1350 (Node : Project_Node_Id;
1351 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
1357 In_Tree.Project_Nodes.Table (Node).Kind = N_Project);
1358 return In_Tree.Project_Nodes.Table (Node).Field2;
1359 end Project_Declaration_Of;
1361 --------------------------
1362 -- Project_Qualifier_Of --
1363 --------------------------
1365 function Project_Qualifier_Of
1366 (Node : Project_Node_Id;
1367 In_Tree : Project_Node_Tree_Ref) return Project_Qualifier
1373 In_Tree.Project_Nodes.Table (Node).Kind = N_Project);
1374 return In_Tree.Project_Nodes.Table (Node).Qualifier;
1375 end Project_Qualifier_Of;
1377 -------------------------------------------
1378 -- Project_File_Includes_Unkept_Comments --
1379 -------------------------------------------
1381 function Project_File_Includes_Unkept_Comments
1382 (Node : Project_Node_Id;
1383 In_Tree : Project_Node_Tree_Ref) return Boolean
1385 Declaration : constant Project_Node_Id :=
1386 Project_Declaration_Of (Node, In_Tree);
1388 return In_Tree.Project_Nodes.Table (Declaration).Flag1;
1389 end Project_File_Includes_Unkept_Comments;
1391 ---------------------
1392 -- Project_Node_Of --
1393 ---------------------
1395 function Project_Node_Of
1396 (Node : Project_Node_Id;
1397 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
1403 (In_Tree.Project_Nodes.Table (Node).Kind = N_With_Clause
1405 In_Tree.Project_Nodes.Table (Node).Kind = N_Variable_Reference
1407 In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Reference));
1408 return In_Tree.Project_Nodes.Table (Node).Field1;
1409 end Project_Node_Of;
1411 -----------------------------------
1412 -- Project_Of_Renamed_Package_Of --
1413 -----------------------------------
1415 function Project_Of_Renamed_Package_Of
1416 (Node : Project_Node_Id;
1417 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
1423 In_Tree.Project_Nodes.Table (Node).Kind = N_Package_Declaration);
1424 return In_Tree.Project_Nodes.Table (Node).Field1;
1425 end Project_Of_Renamed_Package_Of;
1427 --------------------------
1428 -- Remove_Next_End_Node --
1429 --------------------------
1431 procedure Remove_Next_End_Node is
1433 Next_End_Nodes.Decrement_Last;
1434 end Remove_Next_End_Node;
1440 procedure Reset_State is
1442 End_Of_Line_Node := Empty_Node;
1443 Previous_Line_Node := Empty_Node;
1444 Previous_End_Node := Empty_Node;
1445 Unkept_Comments := False;
1446 Comments.Set_Last (0);
1453 procedure Restore (S : Comment_State) is
1455 End_Of_Line_Node := S.End_Of_Line_Node;
1456 Previous_Line_Node := S.Previous_Line_Node;
1457 Previous_End_Node := S.Previous_End_Node;
1458 Next_End_Nodes.Set_Last (0);
1459 Unkept_Comments := S.Unkept_Comments;
1461 Comments.Set_Last (0);
1463 for J in S.Comments'Range loop
1464 Comments.Increment_Last;
1465 Comments.Table (Comments.Last) := S.Comments (J);
1473 procedure Save (S : out Comment_State) is
1474 Cmts : constant Comments_Ptr := new Comment_Array (1 .. Comments.Last);
1477 for J in 1 .. Comments.Last loop
1478 Cmts (J) := Comments.Table (J);
1482 (End_Of_Line_Node => End_Of_Line_Node,
1483 Previous_Line_Node => Previous_Line_Node,
1484 Previous_End_Node => Previous_End_Node,
1485 Unkept_Comments => Unkept_Comments,
1493 procedure Scan (In_Tree : Project_Node_Tree_Ref) is
1494 Empty_Line : Boolean := False;
1497 -- If there are comments, then they will not be kept. Set the flag and
1498 -- clear the comments.
1500 if Comments.Last > 0 then
1501 Unkept_Comments := True;
1502 Comments.Set_Last (0);
1505 -- Loop until a token other that End_Of_Line or Comment is found
1508 Prj.Err.Scanner.Scan;
1511 when Tok_End_Of_Line =>
1512 if Prev_Token = Tok_End_Of_Line then
1515 if Comments.Last > 0 then
1516 Comments.Table (Comments.Last).Is_Followed_By_Empty_Line
1522 -- If this is a line comment, add it to the comment table
1524 if Prev_Token = Tok_End_Of_Line
1525 or else Prev_Token = No_Token
1527 Comments.Increment_Last;
1528 Comments.Table (Comments.Last) :=
1529 (Value => Comment_Id,
1530 Follows_Empty_Line => Empty_Line,
1531 Is_Followed_By_Empty_Line => False);
1533 -- Otherwise, it is an end of line comment. If there is
1534 -- an end of line node specified, associate the comment with
1537 elsif End_Of_Line_Node /= Empty_Node then
1539 Zones : constant Project_Node_Id :=
1540 Comment_Zones_Of (End_Of_Line_Node, In_Tree);
1542 In_Tree.Project_Nodes.Table (Zones).Value := Comment_Id;
1545 -- Otherwise, this end of line node cannot be kept
1548 Unkept_Comments := True;
1549 Comments.Set_Last (0);
1552 Empty_Line := False;
1555 -- If there are comments, where the first comment is not
1556 -- following an empty line, put the initial uninterrupted
1557 -- comment zone with the node of the preceding line (either
1558 -- a Previous_Line or a Previous_End node), if any.
1560 if Comments.Last > 0 and then
1561 not Comments.Table (1).Follows_Empty_Line then
1562 if Previous_Line_Node /= Empty_Node then
1564 (To => Previous_Line_Node,
1566 In_Tree => In_Tree);
1568 elsif Previous_End_Node /= Empty_Node then
1570 (To => Previous_End_Node,
1572 In_Tree => In_Tree);
1576 -- If there are still comments and the token is "end", then
1577 -- put these comments with the Next_End node, if any;
1578 -- otherwise, these comments cannot be kept. Always clear
1581 if Comments.Last > 0 and then Token = Tok_End then
1582 if Next_End_Nodes.Last > 0 then
1584 (To => Next_End_Nodes.Table (Next_End_Nodes.Last),
1585 Where => Before_End,
1586 In_Tree => In_Tree);
1589 Unkept_Comments := True;
1592 Comments.Set_Last (0);
1595 -- Reset the End_Of_Line, Previous_Line and Previous_End nodes
1596 -- so that they are not used again.
1598 End_Of_Line_Node := Empty_Node;
1599 Previous_Line_Node := Empty_Node;
1600 Previous_End_Node := Empty_Node;
1609 ------------------------------------
1610 -- Set_Associative_Array_Index_Of --
1611 ------------------------------------
1613 procedure Set_Associative_Array_Index_Of
1614 (Node : Project_Node_Id;
1615 In_Tree : Project_Node_Tree_Ref;
1622 (In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Declaration
1624 In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Reference));
1625 In_Tree.Project_Nodes.Table (Node).Value := To;
1626 end Set_Associative_Array_Index_Of;
1628 --------------------------------
1629 -- Set_Associative_Package_Of --
1630 --------------------------------
1632 procedure Set_Associative_Package_Of
1633 (Node : Project_Node_Id;
1634 In_Tree : Project_Node_Tree_Ref;
1635 To : Project_Node_Id)
1641 In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Declaration);
1642 In_Tree.Project_Nodes.Table (Node).Field3 := To;
1643 end Set_Associative_Package_Of;
1645 --------------------------------
1646 -- Set_Associative_Project_Of --
1647 --------------------------------
1649 procedure Set_Associative_Project_Of
1650 (Node : Project_Node_Id;
1651 In_Tree : Project_Node_Tree_Ref;
1652 To : Project_Node_Id)
1658 (In_Tree.Project_Nodes.Table (Node).Kind =
1659 N_Attribute_Declaration));
1660 In_Tree.Project_Nodes.Table (Node).Field2 := To;
1661 end Set_Associative_Project_Of;
1663 --------------------------
1664 -- Set_Case_Insensitive --
1665 --------------------------
1667 procedure Set_Case_Insensitive
1668 (Node : Project_Node_Id;
1669 In_Tree : Project_Node_Tree_Ref;
1676 (In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Declaration
1678 In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Reference));
1679 In_Tree.Project_Nodes.Table (Node).Flag1 := To;
1680 end Set_Case_Insensitive;
1682 ------------------------------------
1683 -- Set_Case_Variable_Reference_Of --
1684 ------------------------------------
1686 procedure Set_Case_Variable_Reference_Of
1687 (Node : Project_Node_Id;
1688 In_Tree : Project_Node_Tree_Ref;
1689 To : Project_Node_Id)
1695 In_Tree.Project_Nodes.Table (Node).Kind = N_Case_Construction);
1696 In_Tree.Project_Nodes.Table (Node).Field1 := To;
1697 end Set_Case_Variable_Reference_Of;
1699 ---------------------------
1700 -- Set_Current_Item_Node --
1701 ---------------------------
1703 procedure Set_Current_Item_Node
1704 (Node : Project_Node_Id;
1705 In_Tree : Project_Node_Tree_Ref;
1706 To : Project_Node_Id)
1712 In_Tree.Project_Nodes.Table (Node).Kind = N_Declarative_Item);
1713 In_Tree.Project_Nodes.Table (Node).Field1 := To;
1714 end Set_Current_Item_Node;
1716 ----------------------
1717 -- Set_Current_Term --
1718 ----------------------
1720 procedure Set_Current_Term
1721 (Node : Project_Node_Id;
1722 In_Tree : Project_Node_Tree_Ref;
1723 To : Project_Node_Id)
1729 In_Tree.Project_Nodes.Table (Node).Kind = N_Term);
1730 In_Tree.Project_Nodes.Table (Node).Field1 := To;
1731 end Set_Current_Term;
1733 ----------------------
1734 -- Set_Directory_Of --
1735 ----------------------
1737 procedure Set_Directory_Of
1738 (Node : Project_Node_Id;
1739 In_Tree : Project_Node_Tree_Ref;
1740 To : Path_Name_Type)
1746 In_Tree.Project_Nodes.Table (Node).Kind = N_Project);
1747 In_Tree.Project_Nodes.Table (Node).Directory := To;
1748 end Set_Directory_Of;
1750 ---------------------
1751 -- Set_End_Of_Line --
1752 ---------------------
1754 procedure Set_End_Of_Line (To : Project_Node_Id) is
1756 End_Of_Line_Node := To;
1757 end Set_End_Of_Line;
1759 ----------------------------
1760 -- Set_Expression_Kind_Of --
1761 ----------------------------
1763 procedure Set_Expression_Kind_Of
1764 (Node : Project_Node_Id;
1765 In_Tree : Project_Node_Tree_Ref;
1772 (In_Tree.Project_Nodes.Table (Node).Kind = N_Literal_String
1774 In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Declaration
1776 In_Tree.Project_Nodes.Table (Node).Kind = N_Variable_Declaration
1778 In_Tree.Project_Nodes.Table (Node).Kind =
1779 N_Typed_Variable_Declaration
1781 In_Tree.Project_Nodes.Table (Node).Kind = N_Package_Declaration
1783 In_Tree.Project_Nodes.Table (Node).Kind = N_Expression
1785 In_Tree.Project_Nodes.Table (Node).Kind = N_Term
1787 In_Tree.Project_Nodes.Table (Node).Kind = N_Variable_Reference
1789 In_Tree.Project_Nodes.Table (Node).Kind =
1790 N_Attribute_Reference));
1791 In_Tree.Project_Nodes.Table (Node).Expr_Kind := To;
1792 end Set_Expression_Kind_Of;
1794 -----------------------
1795 -- Set_Expression_Of --
1796 -----------------------
1798 procedure Set_Expression_Of
1799 (Node : Project_Node_Id;
1800 In_Tree : Project_Node_Tree_Ref;
1801 To : Project_Node_Id)
1807 (In_Tree.Project_Nodes.Table (Node).Kind =
1808 N_Attribute_Declaration
1810 In_Tree.Project_Nodes.Table (Node).Kind =
1811 N_Typed_Variable_Declaration
1813 In_Tree.Project_Nodes.Table (Node).Kind =
1814 N_Variable_Declaration));
1815 In_Tree.Project_Nodes.Table (Node).Field1 := To;
1816 end Set_Expression_Of;
1818 -------------------------------
1819 -- Set_External_Reference_Of --
1820 -------------------------------
1822 procedure Set_External_Reference_Of
1823 (Node : Project_Node_Id;
1824 In_Tree : Project_Node_Tree_Ref;
1825 To : Project_Node_Id)
1831 In_Tree.Project_Nodes.Table (Node).Kind = N_External_Value);
1832 In_Tree.Project_Nodes.Table (Node).Field1 := To;
1833 end Set_External_Reference_Of;
1835 -----------------------------
1836 -- Set_External_Default_Of --
1837 -----------------------------
1839 procedure Set_External_Default_Of
1840 (Node : Project_Node_Id;
1841 In_Tree : Project_Node_Tree_Ref;
1842 To : Project_Node_Id)
1848 In_Tree.Project_Nodes.Table (Node).Kind = N_External_Value);
1849 In_Tree.Project_Nodes.Table (Node).Field2 := To;
1850 end Set_External_Default_Of;
1852 ----------------------------
1853 -- Set_First_Case_Item_Of --
1854 ----------------------------
1856 procedure Set_First_Case_Item_Of
1857 (Node : Project_Node_Id;
1858 In_Tree : Project_Node_Tree_Ref;
1859 To : Project_Node_Id)
1865 In_Tree.Project_Nodes.Table (Node).Kind = N_Case_Construction);
1866 In_Tree.Project_Nodes.Table (Node).Field2 := To;
1867 end Set_First_Case_Item_Of;
1869 -------------------------
1870 -- Set_First_Choice_Of --
1871 -------------------------
1873 procedure Set_First_Choice_Of
1874 (Node : Project_Node_Id;
1875 In_Tree : Project_Node_Tree_Ref;
1876 To : Project_Node_Id)
1882 In_Tree.Project_Nodes.Table (Node).Kind = N_Case_Item);
1883 In_Tree.Project_Nodes.Table (Node).Field1 := To;
1884 end Set_First_Choice_Of;
1886 -----------------------------
1887 -- Set_First_Comment_After --
1888 -----------------------------
1890 procedure Set_First_Comment_After
1891 (Node : Project_Node_Id;
1892 In_Tree : Project_Node_Tree_Ref;
1893 To : Project_Node_Id)
1895 Zone : constant Project_Node_Id := Comment_Zones_Of (Node, In_Tree);
1897 In_Tree.Project_Nodes.Table (Zone).Field2 := To;
1898 end Set_First_Comment_After;
1900 ---------------------------------
1901 -- Set_First_Comment_After_End --
1902 ---------------------------------
1904 procedure Set_First_Comment_After_End
1905 (Node : Project_Node_Id;
1906 In_Tree : Project_Node_Tree_Ref;
1907 To : Project_Node_Id)
1909 Zone : constant Project_Node_Id := Comment_Zones_Of (Node, In_Tree);
1911 In_Tree.Project_Nodes.Table (Zone).Comments := To;
1912 end Set_First_Comment_After_End;
1914 ------------------------------
1915 -- Set_First_Comment_Before --
1916 ------------------------------
1918 procedure Set_First_Comment_Before
1919 (Node : Project_Node_Id;
1920 In_Tree : Project_Node_Tree_Ref;
1921 To : Project_Node_Id)
1924 Zone : constant Project_Node_Id := Comment_Zones_Of (Node, In_Tree);
1926 In_Tree.Project_Nodes.Table (Zone).Field1 := To;
1927 end Set_First_Comment_Before;
1929 ----------------------------------
1930 -- Set_First_Comment_Before_End --
1931 ----------------------------------
1933 procedure Set_First_Comment_Before_End
1934 (Node : Project_Node_Id;
1935 In_Tree : Project_Node_Tree_Ref;
1936 To : Project_Node_Id)
1938 Zone : constant Project_Node_Id := Comment_Zones_Of (Node, In_Tree);
1940 In_Tree.Project_Nodes.Table (Zone).Field2 := To;
1941 end Set_First_Comment_Before_End;
1943 ------------------------
1944 -- Set_Next_Case_Item --
1945 ------------------------
1947 procedure Set_Next_Case_Item
1948 (Node : Project_Node_Id;
1949 In_Tree : Project_Node_Tree_Ref;
1950 To : Project_Node_Id)
1956 In_Tree.Project_Nodes.Table (Node).Kind = N_Case_Item);
1957 In_Tree.Project_Nodes.Table (Node).Field3 := To;
1958 end Set_Next_Case_Item;
1960 ----------------------
1961 -- Set_Next_Comment --
1962 ----------------------
1964 procedure Set_Next_Comment
1965 (Node : Project_Node_Id;
1966 In_Tree : Project_Node_Tree_Ref;
1967 To : Project_Node_Id)
1973 In_Tree.Project_Nodes.Table (Node).Kind = N_Comment);
1974 In_Tree.Project_Nodes.Table (Node).Comments := To;
1975 end Set_Next_Comment;
1977 -----------------------------------
1978 -- Set_First_Declarative_Item_Of --
1979 -----------------------------------
1981 procedure Set_First_Declarative_Item_Of
1982 (Node : Project_Node_Id;
1983 In_Tree : Project_Node_Tree_Ref;
1984 To : Project_Node_Id)
1990 (In_Tree.Project_Nodes.Table (Node).Kind = N_Project_Declaration
1992 In_Tree.Project_Nodes.Table (Node).Kind = N_Case_Item
1994 In_Tree.Project_Nodes.Table (Node).Kind = N_Package_Declaration));
1996 if In_Tree.Project_Nodes.Table (Node).Kind = N_Project_Declaration then
1997 In_Tree.Project_Nodes.Table (Node).Field1 := To;
1999 In_Tree.Project_Nodes.Table (Node).Field2 := To;
2001 end Set_First_Declarative_Item_Of;
2003 ----------------------------------
2004 -- Set_First_Expression_In_List --
2005 ----------------------------------
2007 procedure Set_First_Expression_In_List
2008 (Node : Project_Node_Id;
2009 In_Tree : Project_Node_Tree_Ref;
2010 To : Project_Node_Id)
2016 In_Tree.Project_Nodes.Table (Node).Kind = N_Literal_String_List);
2017 In_Tree.Project_Nodes.Table (Node).Field1 := To;
2018 end Set_First_Expression_In_List;
2020 ------------------------------
2021 -- Set_First_Literal_String --
2022 ------------------------------
2024 procedure Set_First_Literal_String
2025 (Node : Project_Node_Id;
2026 In_Tree : Project_Node_Tree_Ref;
2027 To : Project_Node_Id)
2033 In_Tree.Project_Nodes.Table (Node).Kind =
2034 N_String_Type_Declaration);
2035 In_Tree.Project_Nodes.Table (Node).Field1 := To;
2036 end Set_First_Literal_String;
2038 --------------------------
2039 -- Set_First_Package_Of --
2040 --------------------------
2042 procedure Set_First_Package_Of
2043 (Node : Project_Node_Id;
2044 In_Tree : Project_Node_Tree_Ref;
2045 To : Package_Declaration_Id)
2051 In_Tree.Project_Nodes.Table (Node).Kind = N_Project);
2052 In_Tree.Project_Nodes.Table (Node).Packages := To;
2053 end Set_First_Package_Of;
2055 ------------------------------
2056 -- Set_First_String_Type_Of --
2057 ------------------------------
2059 procedure Set_First_String_Type_Of
2060 (Node : Project_Node_Id;
2061 In_Tree : Project_Node_Tree_Ref;
2062 To : Project_Node_Id)
2068 In_Tree.Project_Nodes.Table (Node).Kind = N_Project);
2069 In_Tree.Project_Nodes.Table (Node).Field3 := To;
2070 end Set_First_String_Type_Of;
2072 --------------------
2073 -- Set_First_Term --
2074 --------------------
2076 procedure Set_First_Term
2077 (Node : Project_Node_Id;
2078 In_Tree : Project_Node_Tree_Ref;
2079 To : Project_Node_Id)
2085 In_Tree.Project_Nodes.Table (Node).Kind = N_Expression);
2086 In_Tree.Project_Nodes.Table (Node).Field1 := To;
2089 ---------------------------
2090 -- Set_First_Variable_Of --
2091 ---------------------------
2093 procedure Set_First_Variable_Of
2094 (Node : Project_Node_Id;
2095 In_Tree : Project_Node_Tree_Ref;
2096 To : Variable_Node_Id)
2102 (In_Tree.Project_Nodes.Table (Node).Kind = N_Project
2104 In_Tree.Project_Nodes.Table (Node).Kind = N_Package_Declaration));
2105 In_Tree.Project_Nodes.Table (Node).Variables := To;
2106 end Set_First_Variable_Of;
2108 ------------------------------
2109 -- Set_First_With_Clause_Of --
2110 ------------------------------
2112 procedure Set_First_With_Clause_Of
2113 (Node : Project_Node_Id;
2114 In_Tree : Project_Node_Tree_Ref;
2115 To : Project_Node_Id)
2121 In_Tree.Project_Nodes.Table (Node).Kind = N_Project);
2122 In_Tree.Project_Nodes.Table (Node).Field1 := To;
2123 end Set_First_With_Clause_Of;
2125 --------------------------
2126 -- Set_Is_Extending_All --
2127 --------------------------
2129 procedure Set_Is_Extending_All
2130 (Node : Project_Node_Id;
2131 In_Tree : Project_Node_Tree_Ref)
2137 (In_Tree.Project_Nodes.Table (Node).Kind = N_Project
2139 In_Tree.Project_Nodes.Table (Node).Kind = N_With_Clause));
2140 In_Tree.Project_Nodes.Table (Node).Flag2 := True;
2141 end Set_Is_Extending_All;
2143 -----------------------------
2144 -- Set_Is_Not_Last_In_List --
2145 -----------------------------
2147 procedure Set_Is_Not_Last_In_List
2148 (Node : Project_Node_Id;
2149 In_Tree : Project_Node_Tree_Ref)
2155 In_Tree.Project_Nodes.Table (Node).Kind = N_With_Clause);
2156 In_Tree.Project_Nodes.Table (Node).Flag1 := True;
2157 end Set_Is_Not_Last_In_List;
2163 procedure Set_Kind_Of
2164 (Node : Project_Node_Id;
2165 In_Tree : Project_Node_Tree_Ref;
2166 To : Project_Node_Kind)
2169 pragma Assert (Node /= Empty_Node);
2170 In_Tree.Project_Nodes.Table (Node).Kind := To;
2173 ---------------------
2174 -- Set_Location_Of --
2175 ---------------------
2177 procedure Set_Location_Of
2178 (Node : Project_Node_Id;
2179 In_Tree : Project_Node_Tree_Ref;
2183 pragma Assert (Node /= Empty_Node);
2184 In_Tree.Project_Nodes.Table (Node).Location := To;
2185 end Set_Location_Of;
2187 -----------------------------
2188 -- Set_Extended_Project_Of --
2189 -----------------------------
2191 procedure Set_Extended_Project_Of
2192 (Node : Project_Node_Id;
2193 In_Tree : Project_Node_Tree_Ref;
2194 To : Project_Node_Id)
2200 In_Tree.Project_Nodes.Table (Node).Kind = N_Project_Declaration);
2201 In_Tree.Project_Nodes.Table (Node).Field2 := To;
2202 end Set_Extended_Project_Of;
2204 ----------------------------------
2205 -- Set_Extended_Project_Path_Of --
2206 ----------------------------------
2208 procedure Set_Extended_Project_Path_Of
2209 (Node : Project_Node_Id;
2210 In_Tree : Project_Node_Tree_Ref;
2211 To : Path_Name_Type)
2217 In_Tree.Project_Nodes.Table (Node).Kind = N_Project);
2218 In_Tree.Project_Nodes.Table (Node).Value := Name_Id (To);
2219 end Set_Extended_Project_Path_Of;
2221 ------------------------------
2222 -- Set_Extending_Project_Of --
2223 ------------------------------
2225 procedure Set_Extending_Project_Of
2226 (Node : Project_Node_Id;
2227 In_Tree : Project_Node_Tree_Ref;
2228 To : Project_Node_Id)
2234 In_Tree.Project_Nodes.Table (Node).Kind = N_Project_Declaration);
2235 In_Tree.Project_Nodes.Table (Node).Field3 := To;
2236 end Set_Extending_Project_Of;
2242 procedure Set_Name_Of
2243 (Node : Project_Node_Id;
2244 In_Tree : Project_Node_Tree_Ref;
2248 pragma Assert (Node /= Empty_Node);
2249 In_Tree.Project_Nodes.Table (Node).Name := To;
2252 -------------------------------
2253 -- Set_Next_Declarative_Item --
2254 -------------------------------
2256 procedure Set_Next_Declarative_Item
2257 (Node : Project_Node_Id;
2258 In_Tree : Project_Node_Tree_Ref;
2259 To : Project_Node_Id)
2265 In_Tree.Project_Nodes.Table (Node).Kind = N_Declarative_Item);
2266 In_Tree.Project_Nodes.Table (Node).Field2 := To;
2267 end Set_Next_Declarative_Item;
2269 -----------------------
2270 -- Set_Next_End_Node --
2271 -----------------------
2273 procedure Set_Next_End_Node (To : Project_Node_Id) is
2275 Next_End_Nodes.Increment_Last;
2276 Next_End_Nodes.Table (Next_End_Nodes.Last) := To;
2277 end Set_Next_End_Node;
2279 ---------------------------------
2280 -- Set_Next_Expression_In_List --
2281 ---------------------------------
2283 procedure Set_Next_Expression_In_List
2284 (Node : Project_Node_Id;
2285 In_Tree : Project_Node_Tree_Ref;
2286 To : Project_Node_Id)
2292 In_Tree.Project_Nodes.Table (Node).Kind = N_Expression);
2293 In_Tree.Project_Nodes.Table (Node).Field2 := To;
2294 end Set_Next_Expression_In_List;
2296 -----------------------------
2297 -- Set_Next_Literal_String --
2298 -----------------------------
2300 procedure Set_Next_Literal_String
2301 (Node : Project_Node_Id;
2302 In_Tree : Project_Node_Tree_Ref;
2303 To : Project_Node_Id)
2309 In_Tree.Project_Nodes.Table (Node).Kind = N_Literal_String);
2310 In_Tree.Project_Nodes.Table (Node).Field1 := To;
2311 end Set_Next_Literal_String;
2313 ---------------------------------
2314 -- Set_Next_Package_In_Project --
2315 ---------------------------------
2317 procedure Set_Next_Package_In_Project
2318 (Node : Project_Node_Id;
2319 In_Tree : Project_Node_Tree_Ref;
2320 To : Project_Node_Id)
2326 In_Tree.Project_Nodes.Table (Node).Kind = N_Package_Declaration);
2327 In_Tree.Project_Nodes.Table (Node).Field3 := To;
2328 end Set_Next_Package_In_Project;
2330 --------------------------
2331 -- Set_Next_String_Type --
2332 --------------------------
2334 procedure Set_Next_String_Type
2335 (Node : Project_Node_Id;
2336 In_Tree : Project_Node_Tree_Ref;
2337 To : Project_Node_Id)
2343 In_Tree.Project_Nodes.Table (Node).Kind =
2344 N_String_Type_Declaration);
2345 In_Tree.Project_Nodes.Table (Node).Field2 := To;
2346 end Set_Next_String_Type;
2352 procedure Set_Next_Term
2353 (Node : Project_Node_Id;
2354 In_Tree : Project_Node_Tree_Ref;
2355 To : Project_Node_Id)
2361 In_Tree.Project_Nodes.Table (Node).Kind = N_Term);
2362 In_Tree.Project_Nodes.Table (Node).Field2 := To;
2365 -----------------------
2366 -- Set_Next_Variable --
2367 -----------------------
2369 procedure Set_Next_Variable
2370 (Node : Project_Node_Id;
2371 In_Tree : Project_Node_Tree_Ref;
2372 To : Project_Node_Id)
2378 (In_Tree.Project_Nodes.Table (Node).Kind =
2379 N_Typed_Variable_Declaration
2381 In_Tree.Project_Nodes.Table (Node).Kind =
2382 N_Variable_Declaration));
2383 In_Tree.Project_Nodes.Table (Node).Field3 := To;
2384 end Set_Next_Variable;
2386 -----------------------------
2387 -- Set_Next_With_Clause_Of --
2388 -----------------------------
2390 procedure Set_Next_With_Clause_Of
2391 (Node : Project_Node_Id;
2392 In_Tree : Project_Node_Tree_Ref;
2393 To : Project_Node_Id)
2399 In_Tree.Project_Nodes.Table (Node).Kind = N_With_Clause);
2400 In_Tree.Project_Nodes.Table (Node).Field2 := To;
2401 end Set_Next_With_Clause_Of;
2403 -----------------------
2404 -- Set_Package_Id_Of --
2405 -----------------------
2407 procedure Set_Package_Id_Of
2408 (Node : Project_Node_Id;
2409 In_Tree : Project_Node_Tree_Ref;
2410 To : Package_Node_Id)
2416 In_Tree.Project_Nodes.Table (Node).Kind = N_Package_Declaration);
2417 In_Tree.Project_Nodes.Table (Node).Pkg_Id := To;
2418 end Set_Package_Id_Of;
2420 -------------------------
2421 -- Set_Package_Node_Of --
2422 -------------------------
2424 procedure Set_Package_Node_Of
2425 (Node : Project_Node_Id;
2426 In_Tree : Project_Node_Tree_Ref;
2427 To : Project_Node_Id)
2433 (In_Tree.Project_Nodes.Table (Node).Kind = N_Variable_Reference
2435 In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Reference));
2436 In_Tree.Project_Nodes.Table (Node).Field2 := To;
2437 end Set_Package_Node_Of;
2439 ----------------------
2440 -- Set_Path_Name_Of --
2441 ----------------------
2443 procedure Set_Path_Name_Of
2444 (Node : Project_Node_Id;
2445 In_Tree : Project_Node_Tree_Ref;
2446 To : Path_Name_Type)
2452 (In_Tree.Project_Nodes.Table (Node).Kind = N_Project
2454 In_Tree.Project_Nodes.Table (Node).Kind = N_With_Clause));
2455 In_Tree.Project_Nodes.Table (Node).Path_Name := To;
2456 end Set_Path_Name_Of;
2458 ---------------------------
2459 -- Set_Previous_End_Node --
2460 ---------------------------
2461 procedure Set_Previous_End_Node (To : Project_Node_Id) is
2463 Previous_End_Node := To;
2464 end Set_Previous_End_Node;
2466 ----------------------------
2467 -- Set_Previous_Line_Node --
2468 ----------------------------
2470 procedure Set_Previous_Line_Node (To : Project_Node_Id) is
2472 Previous_Line_Node := To;
2473 end Set_Previous_Line_Node;
2475 --------------------------------
2476 -- Set_Project_Declaration_Of --
2477 --------------------------------
2479 procedure Set_Project_Declaration_Of
2480 (Node : Project_Node_Id;
2481 In_Tree : Project_Node_Tree_Ref;
2482 To : Project_Node_Id)
2488 In_Tree.Project_Nodes.Table (Node).Kind = N_Project);
2489 In_Tree.Project_Nodes.Table (Node).Field2 := To;
2490 end Set_Project_Declaration_Of;
2492 ------------------------------
2493 -- Set_Project_Qualifier_Of --
2494 ------------------------------
2496 procedure Set_Project_Qualifier_Of
2497 (Node : Project_Node_Id;
2498 In_Tree : Project_Node_Tree_Ref;
2499 To : Project_Qualifier)
2504 and then In_Tree.Project_Nodes.Table (Node).Kind = N_Project);
2505 In_Tree.Project_Nodes.Table (Node).Qualifier := To;
2506 end Set_Project_Qualifier_Of;
2508 -----------------------------------------------
2509 -- Set_Project_File_Includes_Unkept_Comments --
2510 -----------------------------------------------
2512 procedure Set_Project_File_Includes_Unkept_Comments
2513 (Node : Project_Node_Id;
2514 In_Tree : Project_Node_Tree_Ref;
2517 Declaration : constant Project_Node_Id :=
2518 Project_Declaration_Of (Node, In_Tree);
2520 In_Tree.Project_Nodes.Table (Declaration).Flag1 := To;
2521 end Set_Project_File_Includes_Unkept_Comments;
2523 -------------------------
2524 -- Set_Project_Node_Of --
2525 -------------------------
2527 procedure Set_Project_Node_Of
2528 (Node : Project_Node_Id;
2529 In_Tree : Project_Node_Tree_Ref;
2530 To : Project_Node_Id;
2531 Limited_With : Boolean := False)
2537 (In_Tree.Project_Nodes.Table (Node).Kind = N_With_Clause
2539 In_Tree.Project_Nodes.Table (Node).Kind = N_Variable_Reference
2541 In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Reference));
2542 In_Tree.Project_Nodes.Table (Node).Field1 := To;
2544 if In_Tree.Project_Nodes.Table (Node).Kind = N_With_Clause
2545 and then not Limited_With
2547 In_Tree.Project_Nodes.Table (Node).Field3 := To;
2549 end Set_Project_Node_Of;
2551 ---------------------------------------
2552 -- Set_Project_Of_Renamed_Package_Of --
2553 ---------------------------------------
2555 procedure Set_Project_Of_Renamed_Package_Of
2556 (Node : Project_Node_Id;
2557 In_Tree : Project_Node_Tree_Ref;
2558 To : Project_Node_Id)
2564 In_Tree.Project_Nodes.Table (Node).Kind = N_Package_Declaration);
2565 In_Tree.Project_Nodes.Table (Node).Field1 := To;
2566 end Set_Project_Of_Renamed_Package_Of;
2568 -------------------------
2569 -- Set_Source_Index_Of --
2570 -------------------------
2572 procedure Set_Source_Index_Of
2573 (Node : Project_Node_Id;
2574 In_Tree : Project_Node_Tree_Ref;
2581 (In_Tree.Project_Nodes.Table (Node).Kind = N_Literal_String
2583 In_Tree.Project_Nodes.Table (Node).Kind =
2584 N_Attribute_Declaration));
2585 In_Tree.Project_Nodes.Table (Node).Src_Index := To;
2586 end Set_Source_Index_Of;
2588 ------------------------
2589 -- Set_String_Type_Of --
2590 ------------------------
2592 procedure Set_String_Type_Of
2593 (Node : Project_Node_Id;
2594 In_Tree : Project_Node_Tree_Ref;
2595 To : Project_Node_Id)
2601 (In_Tree.Project_Nodes.Table (Node).Kind =
2602 N_Variable_Reference
2604 In_Tree.Project_Nodes.Table (Node).Kind =
2605 N_Typed_Variable_Declaration)
2607 In_Tree.Project_Nodes.Table (To).Kind = N_String_Type_Declaration);
2609 if In_Tree.Project_Nodes.Table (Node).Kind = N_Variable_Reference then
2610 In_Tree.Project_Nodes.Table (Node).Field3 := To;
2612 In_Tree.Project_Nodes.Table (Node).Field2 := To;
2614 end Set_String_Type_Of;
2616 -------------------------
2617 -- Set_String_Value_Of --
2618 -------------------------
2620 procedure Set_String_Value_Of
2621 (Node : Project_Node_Id;
2622 In_Tree : Project_Node_Tree_Ref;
2629 (In_Tree.Project_Nodes.Table (Node).Kind = N_With_Clause
2631 In_Tree.Project_Nodes.Table (Node).Kind = N_Comment
2633 In_Tree.Project_Nodes.Table (Node).Kind = N_Literal_String));
2634 In_Tree.Project_Nodes.Table (Node).Value := To;
2635 end Set_String_Value_Of;
2637 ---------------------
2638 -- Source_Index_Of --
2639 ---------------------
2641 function Source_Index_Of
2642 (Node : Project_Node_Id;
2643 In_Tree : Project_Node_Tree_Ref) return Int
2649 (In_Tree.Project_Nodes.Table (Node).Kind = N_Literal_String
2651 In_Tree.Project_Nodes.Table (Node).Kind =
2652 N_Attribute_Declaration));
2653 return In_Tree.Project_Nodes.Table (Node).Src_Index;
2654 end Source_Index_Of;
2656 --------------------
2657 -- String_Type_Of --
2658 --------------------
2660 function String_Type_Of
2661 (Node : Project_Node_Id;
2662 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
2668 (In_Tree.Project_Nodes.Table (Node).Kind =
2669 N_Variable_Reference
2671 In_Tree.Project_Nodes.Table (Node).Kind =
2672 N_Typed_Variable_Declaration));
2674 if In_Tree.Project_Nodes.Table (Node).Kind = N_Variable_Reference then
2675 return In_Tree.Project_Nodes.Table (Node).Field3;
2677 return In_Tree.Project_Nodes.Table (Node).Field2;
2681 ---------------------
2682 -- String_Value_Of --
2683 ---------------------
2685 function String_Value_Of
2686 (Node : Project_Node_Id;
2687 In_Tree : Project_Node_Tree_Ref) return Name_Id
2693 (In_Tree.Project_Nodes.Table (Node).Kind = N_With_Clause
2695 In_Tree.Project_Nodes.Table (Node).Kind = N_Comment
2697 In_Tree.Project_Nodes.Table (Node).Kind = N_Literal_String));
2698 return In_Tree.Project_Nodes.Table (Node).Value;
2699 end String_Value_Of;
2701 --------------------
2702 -- Value_Is_Valid --
2703 --------------------
2705 function Value_Is_Valid
2706 (For_Typed_Variable : Project_Node_Id;
2707 In_Tree : Project_Node_Tree_Ref;
2708 Value : Name_Id) return Boolean
2712 (For_Typed_Variable /= Empty_Node
2714 (In_Tree.Project_Nodes.Table (For_Typed_Variable).Kind =
2715 N_Typed_Variable_Declaration));
2718 Current_String : Project_Node_Id :=
2719 First_Literal_String
2720 (String_Type_Of (For_Typed_Variable, In_Tree),
2724 while Current_String /= Empty_Node
2726 String_Value_Of (Current_String, In_Tree) /= Value
2729 Next_Literal_String (Current_String, In_Tree);
2732 return Current_String /= Empty_Node;
2737 -------------------------------
2738 -- There_Are_Unkept_Comments --
2739 -------------------------------
2741 function There_Are_Unkept_Comments return Boolean is
2743 return Unkept_Comments;
2744 end There_Are_Unkept_Comments;