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;
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,
125 Field4 => Empty_Node,
128 Comments => Empty_Node);
130 Zone := Project_Node_Table.Last (In_Tree.Project_Nodes);
131 In_Tree.Project_Nodes.Table (To).Comments := Zone;
134 if Where = End_Of_Line then
135 In_Tree.Project_Nodes.Table (Zone).Value := Comments.Table (1).Value;
138 -- Get each comments in the Comments table and link them to node To
140 for J in 1 .. Comments.Last loop
142 -- Create new N_Comment node
144 if (Where = After or else Where = After_End) and then
145 Token /= Tok_EOF and then
146 Comments.Table (J).Follows_Empty_Line
148 Comments.Table (1 .. Comments.Last - J + 1) :=
149 Comments.Table (J .. Comments.Last);
150 Comments.Set_Last (Comments.Last - J + 1);
154 Project_Node_Table.Increment_Last (In_Tree.Project_Nodes);
155 In_Tree.Project_Nodes.Table
156 (Project_Node_Table.Last (In_Tree.Project_Nodes)) :=
158 Qualifier => Unspecified,
159 Expr_Kind => Undefined,
160 Flag1 => Comments.Table (J).Follows_Empty_Line,
162 Comments.Table (J).Is_Followed_By_Empty_Line,
163 Location => No_Location,
164 Directory => No_Path,
165 Variables => Empty_Node,
166 Packages => Empty_Node,
167 Pkg_Id => Empty_Package,
170 Path_Name => No_Path,
171 Value => Comments.Table (J).Value,
172 Field1 => Empty_Node,
173 Field2 => Empty_Node,
174 Field3 => Empty_Node,
175 Field4 => Empty_Node,
176 Comments => Empty_Node);
178 -- If this is the first comment, put it in the right field of
181 if No (Previous) then
184 In_Tree.Project_Nodes.Table (Zone).Field1 :=
185 Project_Node_Table.Last (In_Tree.Project_Nodes);
188 In_Tree.Project_Nodes.Table (Zone).Field2 :=
189 Project_Node_Table.Last (In_Tree.Project_Nodes);
192 In_Tree.Project_Nodes.Table (Zone).Field3 :=
193 Project_Node_Table.Last (In_Tree.Project_Nodes);
196 In_Tree.Project_Nodes.Table (Zone).Comments :=
197 Project_Node_Table.Last (In_Tree.Project_Nodes);
204 -- When it is not the first, link it to the previous one
206 In_Tree.Project_Nodes.Table (Previous).Comments :=
207 Project_Node_Table.Last (In_Tree.Project_Nodes);
210 -- This node becomes the previous one for the next comment, if
213 Previous := Project_Node_Table.Last (In_Tree.Project_Nodes);
217 -- Empty the Comments table, so that there is no risk to link the same
218 -- comments to another node.
220 Comments.Set_Last (0);
223 --------------------------------
224 -- Associative_Array_Index_Of --
225 --------------------------------
227 function Associative_Array_Index_Of
228 (Node : Project_Node_Id;
229 In_Tree : Project_Node_Tree_Ref) return Name_Id
235 (In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Declaration
237 In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Reference));
238 return In_Tree.Project_Nodes.Table (Node).Value;
239 end Associative_Array_Index_Of;
241 ----------------------------
242 -- Associative_Package_Of --
243 ----------------------------
245 function Associative_Package_Of
246 (Node : Project_Node_Id;
247 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
253 (In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Declaration));
254 return In_Tree.Project_Nodes.Table (Node).Field3;
255 end Associative_Package_Of;
257 ----------------------------
258 -- Associative_Project_Of --
259 ----------------------------
261 function Associative_Project_Of
262 (Node : Project_Node_Id;
263 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
269 (In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Declaration));
270 return In_Tree.Project_Nodes.Table (Node).Field2;
271 end Associative_Project_Of;
273 ----------------------
274 -- Case_Insensitive --
275 ----------------------
277 function Case_Insensitive
278 (Node : Project_Node_Id;
279 In_Tree : Project_Node_Tree_Ref) return Boolean is
284 (In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Declaration
286 In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Reference));
287 return In_Tree.Project_Nodes.Table (Node).Flag1;
288 end Case_Insensitive;
290 --------------------------------
291 -- Case_Variable_Reference_Of --
292 --------------------------------
294 function Case_Variable_Reference_Of
295 (Node : Project_Node_Id;
296 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
302 In_Tree.Project_Nodes.Table (Node).Kind = N_Case_Construction);
303 return In_Tree.Project_Nodes.Table (Node).Field1;
304 end Case_Variable_Reference_Of;
306 ----------------------
307 -- Comment_Zones_Of --
308 ----------------------
310 function Comment_Zones_Of
311 (Node : Project_Node_Id;
312 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
314 Zone : Project_Node_Id;
317 pragma Assert (Present (Node));
318 Zone := In_Tree.Project_Nodes.Table (Node).Comments;
320 -- If there is not already an N_Comment_Zones associated, create a new
321 -- one and associate it with node Node.
324 Project_Node_Table.Increment_Last (In_Tree.Project_Nodes);
325 Zone := Project_Node_Table.Last (In_Tree.Project_Nodes);
326 In_Tree.Project_Nodes.Table (Zone) :=
327 (Kind => N_Comment_Zones,
328 Qualifier => Unspecified,
329 Location => No_Location,
330 Directory => No_Path,
331 Expr_Kind => Undefined,
332 Variables => Empty_Node,
333 Packages => Empty_Node,
334 Pkg_Id => Empty_Package,
337 Path_Name => No_Path,
339 Field1 => Empty_Node,
340 Field2 => Empty_Node,
341 Field3 => Empty_Node,
342 Field4 => Empty_Node,
345 Comments => Empty_Node);
346 In_Tree.Project_Nodes.Table (Node).Comments := Zone;
350 end Comment_Zones_Of;
352 -----------------------
353 -- Current_Item_Node --
354 -----------------------
356 function Current_Item_Node
357 (Node : Project_Node_Id;
358 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
364 In_Tree.Project_Nodes.Table (Node).Kind = N_Declarative_Item);
365 return In_Tree.Project_Nodes.Table (Node).Field1;
366 end Current_Item_Node;
372 function Current_Term
373 (Node : Project_Node_Id;
374 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
380 In_Tree.Project_Nodes.Table (Node).Kind = N_Term);
381 return In_Tree.Project_Nodes.Table (Node).Field1;
384 --------------------------
385 -- Default_Project_Node --
386 --------------------------
388 function Default_Project_Node
389 (In_Tree : Project_Node_Tree_Ref;
390 Of_Kind : Project_Node_Kind;
391 And_Expr_Kind : Variable_Kind := Undefined) return Project_Node_Id
393 Result : Project_Node_Id;
394 Zone : Project_Node_Id;
395 Previous : Project_Node_Id;
398 -- Create new node with specified kind and expression kind
400 Project_Node_Table.Increment_Last (In_Tree.Project_Nodes);
401 In_Tree.Project_Nodes.Table
402 (Project_Node_Table.Last (In_Tree.Project_Nodes)) :=
404 Qualifier => Unspecified,
405 Location => No_Location,
406 Directory => No_Path,
407 Expr_Kind => And_Expr_Kind,
408 Variables => Empty_Node,
409 Packages => Empty_Node,
410 Pkg_Id => Empty_Package,
413 Path_Name => No_Path,
415 Field1 => Empty_Node,
416 Field2 => Empty_Node,
417 Field3 => Empty_Node,
418 Field4 => Empty_Node,
421 Comments => Empty_Node);
423 -- Save the new node for the returned value
425 Result := Project_Node_Table.Last (In_Tree.Project_Nodes);
427 if Comments.Last > 0 then
429 -- If this is not a node with comments, then set the flag
431 if not Node_With_Comments (Of_Kind) then
432 Unkept_Comments := True;
434 elsif Of_Kind /= N_Comment and then Of_Kind /= N_Comment_Zones then
436 Project_Node_Table.Increment_Last (In_Tree.Project_Nodes);
437 In_Tree.Project_Nodes.Table
438 (Project_Node_Table.Last (In_Tree.Project_Nodes)) :=
439 (Kind => N_Comment_Zones,
440 Qualifier => Unspecified,
441 Expr_Kind => Undefined,
442 Location => No_Location,
443 Directory => No_Path,
444 Variables => Empty_Node,
445 Packages => Empty_Node,
446 Pkg_Id => Empty_Package,
449 Path_Name => No_Path,
451 Field1 => Empty_Node,
452 Field2 => Empty_Node,
453 Field3 => Empty_Node,
454 Field4 => Empty_Node,
457 Comments => Empty_Node);
459 Zone := Project_Node_Table.Last (In_Tree.Project_Nodes);
460 In_Tree.Project_Nodes.Table (Result).Comments := Zone;
461 Previous := Empty_Node;
463 for J in 1 .. Comments.Last loop
465 -- Create a new N_Comment node
467 Project_Node_Table.Increment_Last (In_Tree.Project_Nodes);
468 In_Tree.Project_Nodes.Table
469 (Project_Node_Table.Last (In_Tree.Project_Nodes)) :=
471 Qualifier => Unspecified,
472 Expr_Kind => Undefined,
473 Flag1 => Comments.Table (J).Follows_Empty_Line,
475 Comments.Table (J).Is_Followed_By_Empty_Line,
476 Location => No_Location,
477 Directory => No_Path,
478 Variables => Empty_Node,
479 Packages => Empty_Node,
480 Pkg_Id => Empty_Package,
483 Path_Name => No_Path,
484 Value => Comments.Table (J).Value,
485 Field1 => Empty_Node,
486 Field2 => Empty_Node,
487 Field3 => Empty_Node,
488 Field4 => Empty_Node,
489 Comments => Empty_Node);
491 -- Link it to the N_Comment_Zones node, if it is the first,
492 -- otherwise to the previous one.
494 if No (Previous) then
495 In_Tree.Project_Nodes.Table (Zone).Field1 :=
496 Project_Node_Table.Last (In_Tree.Project_Nodes);
499 In_Tree.Project_Nodes.Table (Previous).Comments :=
500 Project_Node_Table.Last (In_Tree.Project_Nodes);
503 -- This new node will be the previous one for the next
504 -- N_Comment node, if there is one.
506 Previous := Project_Node_Table.Last (In_Tree.Project_Nodes);
509 -- Empty the Comments table after all comments have been processed
511 Comments.Set_Last (0);
516 end Default_Project_Node;
522 function Directory_Of
523 (Node : Project_Node_Id;
524 In_Tree : Project_Node_Tree_Ref) return Path_Name_Type is
529 In_Tree.Project_Nodes.Table (Node).Kind = N_Project);
530 return In_Tree.Project_Nodes.Table (Node).Directory;
533 -------------------------
534 -- End_Of_Line_Comment --
535 -------------------------
537 function End_Of_Line_Comment
538 (Node : Project_Node_Id;
539 In_Tree : Project_Node_Tree_Ref) return Name_Id is
540 Zone : Project_Node_Id := Empty_Node;
543 pragma Assert (Present (Node));
544 Zone := In_Tree.Project_Nodes.Table (Node).Comments;
549 return In_Tree.Project_Nodes.Table (Zone).Value;
551 end End_Of_Line_Comment;
553 ------------------------
554 -- Expression_Kind_Of --
555 ------------------------
557 function Expression_Kind_Of
558 (Node : Project_Node_Id;
559 In_Tree : Project_Node_Tree_Ref) return Variable_Kind is
564 (In_Tree.Project_Nodes.Table (Node).Kind = N_Literal_String
566 In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Declaration
568 In_Tree.Project_Nodes.Table (Node).Kind = N_Variable_Declaration
570 In_Tree.Project_Nodes.Table (Node).Kind =
571 N_Typed_Variable_Declaration
573 In_Tree.Project_Nodes.Table (Node).Kind = N_Package_Declaration
575 In_Tree.Project_Nodes.Table (Node).Kind = N_Expression
577 In_Tree.Project_Nodes.Table (Node).Kind = N_Term
579 In_Tree.Project_Nodes.Table (Node).Kind = N_Variable_Reference
581 In_Tree.Project_Nodes.Table (Node).Kind =
582 N_Attribute_Reference));
584 return In_Tree.Project_Nodes.Table (Node).Expr_Kind;
585 end Expression_Kind_Of;
591 function Expression_Of
592 (Node : Project_Node_Id;
593 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
599 (In_Tree.Project_Nodes.Table (Node).Kind =
600 N_Attribute_Declaration
602 In_Tree.Project_Nodes.Table (Node).Kind =
603 N_Typed_Variable_Declaration
605 In_Tree.Project_Nodes.Table (Node).Kind =
606 N_Variable_Declaration));
608 return In_Tree.Project_Nodes.Table (Node).Field1;
611 -------------------------
612 -- Extended_Project_Of --
613 -------------------------
615 function Extended_Project_Of
616 (Node : Project_Node_Id;
617 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
623 In_Tree.Project_Nodes.Table (Node).Kind = N_Project_Declaration);
624 return In_Tree.Project_Nodes.Table (Node).Field2;
625 end Extended_Project_Of;
627 ------------------------------
628 -- Extended_Project_Path_Of --
629 ------------------------------
631 function Extended_Project_Path_Of
632 (Node : Project_Node_Id;
633 In_Tree : Project_Node_Tree_Ref) return Path_Name_Type
639 In_Tree.Project_Nodes.Table (Node).Kind = N_Project);
640 return Path_Name_Type (In_Tree.Project_Nodes.Table (Node).Value);
641 end Extended_Project_Path_Of;
643 --------------------------
644 -- Extending_Project_Of --
645 --------------------------
646 function Extending_Project_Of
647 (Node : Project_Node_Id;
648 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
654 In_Tree.Project_Nodes.Table (Node).Kind = N_Project_Declaration);
655 return In_Tree.Project_Nodes.Table (Node).Field3;
656 end Extending_Project_Of;
658 ---------------------------
659 -- External_Reference_Of --
660 ---------------------------
662 function External_Reference_Of
663 (Node : Project_Node_Id;
664 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
670 In_Tree.Project_Nodes.Table (Node).Kind = N_External_Value);
671 return In_Tree.Project_Nodes.Table (Node).Field1;
672 end External_Reference_Of;
674 -------------------------
675 -- External_Default_Of --
676 -------------------------
678 function External_Default_Of
679 (Node : Project_Node_Id;
680 In_Tree : Project_Node_Tree_Ref)
681 return Project_Node_Id
687 In_Tree.Project_Nodes.Table (Node).Kind = N_External_Value);
688 return In_Tree.Project_Nodes.Table (Node).Field2;
689 end External_Default_Of;
691 ------------------------
692 -- First_Case_Item_Of --
693 ------------------------
695 function First_Case_Item_Of
696 (Node : Project_Node_Id;
697 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
703 In_Tree.Project_Nodes.Table (Node).Kind = N_Case_Construction);
704 return In_Tree.Project_Nodes.Table (Node).Field2;
705 end First_Case_Item_Of;
707 ---------------------
708 -- First_Choice_Of --
709 ---------------------
711 function First_Choice_Of
712 (Node : Project_Node_Id;
713 In_Tree : Project_Node_Tree_Ref)
714 return Project_Node_Id
720 In_Tree.Project_Nodes.Table (Node).Kind = N_Case_Item);
721 return In_Tree.Project_Nodes.Table (Node).Field1;
724 -------------------------
725 -- First_Comment_After --
726 -------------------------
728 function First_Comment_After
729 (Node : Project_Node_Id;
730 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
732 Zone : Project_Node_Id := Empty_Node;
734 pragma Assert (Present (Node));
735 Zone := In_Tree.Project_Nodes.Table (Node).Comments;
741 return In_Tree.Project_Nodes.Table (Zone).Field2;
743 end First_Comment_After;
745 -----------------------------
746 -- First_Comment_After_End --
747 -----------------------------
749 function First_Comment_After_End
750 (Node : Project_Node_Id;
751 In_Tree : Project_Node_Tree_Ref)
752 return Project_Node_Id
754 Zone : Project_Node_Id := Empty_Node;
757 pragma Assert (Present (Node));
758 Zone := In_Tree.Project_Nodes.Table (Node).Comments;
764 return In_Tree.Project_Nodes.Table (Zone).Comments;
766 end First_Comment_After_End;
768 --------------------------
769 -- First_Comment_Before --
770 --------------------------
772 function First_Comment_Before
773 (Node : Project_Node_Id;
774 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
776 Zone : Project_Node_Id := Empty_Node;
779 pragma Assert (Present (Node));
780 Zone := In_Tree.Project_Nodes.Table (Node).Comments;
786 return In_Tree.Project_Nodes.Table (Zone).Field1;
788 end First_Comment_Before;
790 ------------------------------
791 -- First_Comment_Before_End --
792 ------------------------------
794 function First_Comment_Before_End
795 (Node : Project_Node_Id;
796 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
798 Zone : Project_Node_Id := Empty_Node;
801 pragma Assert (Present (Node));
802 Zone := In_Tree.Project_Nodes.Table (Node).Comments;
808 return In_Tree.Project_Nodes.Table (Zone).Field3;
810 end First_Comment_Before_End;
812 -------------------------------
813 -- First_Declarative_Item_Of --
814 -------------------------------
816 function First_Declarative_Item_Of
817 (Node : Project_Node_Id;
818 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
824 (In_Tree.Project_Nodes.Table (Node).Kind = N_Project_Declaration
826 In_Tree.Project_Nodes.Table (Node).Kind = N_Case_Item
828 In_Tree.Project_Nodes.Table (Node).Kind = N_Package_Declaration));
830 if In_Tree.Project_Nodes.Table (Node).Kind = N_Project_Declaration then
831 return In_Tree.Project_Nodes.Table (Node).Field1;
833 return In_Tree.Project_Nodes.Table (Node).Field2;
835 end First_Declarative_Item_Of;
837 ------------------------------
838 -- First_Expression_In_List --
839 ------------------------------
841 function First_Expression_In_List
842 (Node : Project_Node_Id;
843 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
849 In_Tree.Project_Nodes.Table (Node).Kind = N_Literal_String_List);
850 return In_Tree.Project_Nodes.Table (Node).Field1;
851 end First_Expression_In_List;
853 --------------------------
854 -- First_Literal_String --
855 --------------------------
857 function First_Literal_String
858 (Node : Project_Node_Id;
859 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
865 In_Tree.Project_Nodes.Table (Node).Kind =
866 N_String_Type_Declaration);
867 return In_Tree.Project_Nodes.Table (Node).Field1;
868 end First_Literal_String;
870 ----------------------
871 -- First_Package_Of --
872 ----------------------
874 function First_Package_Of
875 (Node : Project_Node_Id;
876 In_Tree : Project_Node_Tree_Ref) return Package_Declaration_Id
882 In_Tree.Project_Nodes.Table (Node).Kind = N_Project);
883 return In_Tree.Project_Nodes.Table (Node).Packages;
884 end First_Package_Of;
886 --------------------------
887 -- First_String_Type_Of --
888 --------------------------
890 function First_String_Type_Of
891 (Node : Project_Node_Id;
892 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
898 In_Tree.Project_Nodes.Table (Node).Kind = N_Project);
899 return In_Tree.Project_Nodes.Table (Node).Field3;
900 end First_String_Type_Of;
907 (Node : Project_Node_Id;
908 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
914 In_Tree.Project_Nodes.Table (Node).Kind = N_Expression);
915 return In_Tree.Project_Nodes.Table (Node).Field1;
918 -----------------------
919 -- First_Variable_Of --
920 -----------------------
922 function First_Variable_Of
923 (Node : Project_Node_Id;
924 In_Tree : Project_Node_Tree_Ref) return Variable_Node_Id
930 (In_Tree.Project_Nodes.Table (Node).Kind = N_Project
932 In_Tree.Project_Nodes.Table (Node).Kind = N_Package_Declaration));
934 return In_Tree.Project_Nodes.Table (Node).Variables;
935 end First_Variable_Of;
937 --------------------------
938 -- First_With_Clause_Of --
939 --------------------------
941 function First_With_Clause_Of
942 (Node : Project_Node_Id;
943 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
949 In_Tree.Project_Nodes.Table (Node).Kind = N_Project);
950 return In_Tree.Project_Nodes.Table (Node).Field1;
951 end First_With_Clause_Of;
953 ------------------------
954 -- Follows_Empty_Line --
955 ------------------------
957 function Follows_Empty_Line
958 (Node : Project_Node_Id;
959 In_Tree : Project_Node_Tree_Ref) return Boolean is
964 In_Tree.Project_Nodes.Table (Node).Kind = N_Comment);
965 return In_Tree.Project_Nodes.Table (Node).Flag1;
966 end Follows_Empty_Line;
972 function Hash (N : Project_Node_Id) return Header_Num is
974 return Header_Num (N mod Project_Node_Id (Header_Num'Last));
981 procedure Initialize (Tree : Project_Node_Tree_Ref) is
983 Project_Node_Table.Init (Tree.Project_Nodes);
984 Projects_Htable.Reset (Tree.Projects_HT);
987 -------------------------------
988 -- Is_Followed_By_Empty_Line --
989 -------------------------------
991 function Is_Followed_By_Empty_Line
992 (Node : Project_Node_Id;
993 In_Tree : Project_Node_Tree_Ref) return Boolean
999 In_Tree.Project_Nodes.Table (Node).Kind = N_Comment);
1000 return In_Tree.Project_Nodes.Table (Node).Flag2;
1001 end Is_Followed_By_Empty_Line;
1003 ----------------------
1004 -- Is_Extending_All --
1005 ----------------------
1007 function Is_Extending_All
1008 (Node : Project_Node_Id;
1009 In_Tree : Project_Node_Tree_Ref) return Boolean is
1014 (In_Tree.Project_Nodes.Table (Node).Kind = N_Project
1016 In_Tree.Project_Nodes.Table (Node).Kind = N_With_Clause));
1017 return In_Tree.Project_Nodes.Table (Node).Flag2;
1018 end Is_Extending_All;
1020 -------------------------
1021 -- Is_Not_Last_In_List --
1022 -------------------------
1024 function Is_Not_Last_In_List
1025 (Node : Project_Node_Id;
1026 In_Tree : Project_Node_Tree_Ref) return Boolean is
1031 In_Tree.Project_Nodes.Table (Node).Kind = N_With_Clause);
1032 return In_Tree.Project_Nodes.Table (Node).Flag1;
1033 end Is_Not_Last_In_List;
1035 -------------------------------------
1036 -- Imported_Or_Extended_Project_Of --
1037 -------------------------------------
1039 function Imported_Or_Extended_Project_Of
1040 (Project : Project_Node_Id;
1041 In_Tree : Project_Node_Tree_Ref;
1042 With_Name : Name_Id) return Project_Node_Id
1044 With_Clause : Project_Node_Id :=
1045 First_With_Clause_Of (Project, In_Tree);
1046 Result : Project_Node_Id := Empty_Node;
1049 -- First check all the imported projects
1051 while Present (With_Clause) loop
1053 -- Only non limited imported project may be used as prefix
1054 -- of variable or attributes.
1056 Result := Non_Limited_Project_Node_Of (With_Clause, In_Tree);
1057 exit when Present (Result)
1058 and then Name_Of (Result, In_Tree) = With_Name;
1059 With_Clause := Next_With_Clause_Of (With_Clause, In_Tree);
1062 -- If it is not an imported project, it might be an extended project
1064 if No (With_Clause) then
1069 (Project_Declaration_Of (Result, In_Tree), In_Tree);
1071 exit when No (Result)
1072 or else Name_Of (Result, In_Tree) = With_Name;
1077 end Imported_Or_Extended_Project_Of;
1084 (Node : Project_Node_Id;
1085 In_Tree : Project_Node_Tree_Ref) return Project_Node_Kind is
1087 pragma Assert (Present (Node));
1088 return In_Tree.Project_Nodes.Table (Node).Kind;
1095 function Location_Of
1096 (Node : Project_Node_Id;
1097 In_Tree : Project_Node_Tree_Ref) return Source_Ptr is
1099 pragma Assert (Present (Node));
1100 return In_Tree.Project_Nodes.Table (Node).Location;
1108 (Node : Project_Node_Id;
1109 In_Tree : Project_Node_Tree_Ref) return Name_Id is
1111 pragma Assert (Present (Node));
1112 return In_Tree.Project_Nodes.Table (Node).Name;
1115 --------------------
1116 -- Next_Case_Item --
1117 --------------------
1119 function Next_Case_Item
1120 (Node : Project_Node_Id;
1121 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
1127 In_Tree.Project_Nodes.Table (Node).Kind = N_Case_Item);
1128 return In_Tree.Project_Nodes.Table (Node).Field3;
1135 function Next_Comment
1136 (Node : Project_Node_Id;
1137 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id is
1142 In_Tree.Project_Nodes.Table (Node).Kind = N_Comment);
1143 return In_Tree.Project_Nodes.Table (Node).Comments;
1146 ---------------------------
1147 -- Next_Declarative_Item --
1148 ---------------------------
1150 function Next_Declarative_Item
1151 (Node : Project_Node_Id;
1152 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
1158 In_Tree.Project_Nodes.Table (Node).Kind = N_Declarative_Item);
1159 return In_Tree.Project_Nodes.Table (Node).Field2;
1160 end Next_Declarative_Item;
1162 -----------------------------
1163 -- Next_Expression_In_List --
1164 -----------------------------
1166 function Next_Expression_In_List
1167 (Node : Project_Node_Id;
1168 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
1174 In_Tree.Project_Nodes.Table (Node).Kind = N_Expression);
1175 return In_Tree.Project_Nodes.Table (Node).Field2;
1176 end Next_Expression_In_List;
1178 -------------------------
1179 -- Next_Literal_String --
1180 -------------------------
1182 function Next_Literal_String
1183 (Node : Project_Node_Id;
1184 In_Tree : Project_Node_Tree_Ref)
1185 return Project_Node_Id
1191 In_Tree.Project_Nodes.Table (Node).Kind = N_Literal_String);
1192 return In_Tree.Project_Nodes.Table (Node).Field1;
1193 end Next_Literal_String;
1195 -----------------------------
1196 -- Next_Package_In_Project --
1197 -----------------------------
1199 function Next_Package_In_Project
1200 (Node : Project_Node_Id;
1201 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
1207 In_Tree.Project_Nodes.Table (Node).Kind = N_Package_Declaration);
1208 return In_Tree.Project_Nodes.Table (Node).Field3;
1209 end Next_Package_In_Project;
1211 ----------------------
1212 -- Next_String_Type --
1213 ----------------------
1215 function Next_String_Type
1216 (Node : Project_Node_Id;
1217 In_Tree : Project_Node_Tree_Ref)
1218 return Project_Node_Id
1224 In_Tree.Project_Nodes.Table (Node).Kind =
1225 N_String_Type_Declaration);
1226 return In_Tree.Project_Nodes.Table (Node).Field2;
1227 end Next_String_Type;
1234 (Node : Project_Node_Id;
1235 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
1241 In_Tree.Project_Nodes.Table (Node).Kind = N_Term);
1242 return In_Tree.Project_Nodes.Table (Node).Field2;
1249 function Next_Variable
1250 (Node : Project_Node_Id;
1251 In_Tree : Project_Node_Tree_Ref)
1252 return Project_Node_Id
1258 (In_Tree.Project_Nodes.Table (Node).Kind =
1259 N_Typed_Variable_Declaration
1261 In_Tree.Project_Nodes.Table (Node).Kind =
1262 N_Variable_Declaration));
1264 return In_Tree.Project_Nodes.Table (Node).Field3;
1267 -------------------------
1268 -- Next_With_Clause_Of --
1269 -------------------------
1271 function Next_With_Clause_Of
1272 (Node : Project_Node_Id;
1273 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
1279 In_Tree.Project_Nodes.Table (Node).Kind = N_With_Clause);
1280 return In_Tree.Project_Nodes.Table (Node).Field2;
1281 end Next_With_Clause_Of;
1287 function No (Node : Project_Node_Id) return Boolean is
1289 return Node = Empty_Node;
1292 ---------------------------------
1293 -- Non_Limited_Project_Node_Of --
1294 ---------------------------------
1296 function Non_Limited_Project_Node_Of
1297 (Node : Project_Node_Id;
1298 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
1304 (In_Tree.Project_Nodes.Table (Node).Kind = N_With_Clause));
1305 return In_Tree.Project_Nodes.Table (Node).Field3;
1306 end Non_Limited_Project_Node_Of;
1312 function Package_Id_Of
1313 (Node : Project_Node_Id;
1314 In_Tree : Project_Node_Tree_Ref) return Package_Node_Id
1320 In_Tree.Project_Nodes.Table (Node).Kind = N_Package_Declaration);
1321 return In_Tree.Project_Nodes.Table (Node).Pkg_Id;
1324 ---------------------
1325 -- Package_Node_Of --
1326 ---------------------
1328 function Package_Node_Of
1329 (Node : Project_Node_Id;
1330 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
1336 (In_Tree.Project_Nodes.Table (Node).Kind = N_Variable_Reference
1338 In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Reference));
1339 return In_Tree.Project_Nodes.Table (Node).Field2;
1340 end Package_Node_Of;
1346 function Path_Name_Of
1347 (Node : Project_Node_Id;
1348 In_Tree : Project_Node_Tree_Ref) return Path_Name_Type
1354 (In_Tree.Project_Nodes.Table (Node).Kind = N_Project
1356 In_Tree.Project_Nodes.Table (Node).Kind = N_With_Clause));
1357 return In_Tree.Project_Nodes.Table (Node).Path_Name;
1364 function Present (Node : Project_Node_Id) return Boolean is
1366 return Node /= Empty_Node;
1369 ----------------------------
1370 -- Project_Declaration_Of --
1371 ----------------------------
1373 function Project_Declaration_Of
1374 (Node : Project_Node_Id;
1375 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
1381 In_Tree.Project_Nodes.Table (Node).Kind = N_Project);
1382 return In_Tree.Project_Nodes.Table (Node).Field2;
1383 end Project_Declaration_Of;
1385 --------------------------
1386 -- Project_Qualifier_Of --
1387 --------------------------
1389 function Project_Qualifier_Of
1390 (Node : Project_Node_Id;
1391 In_Tree : Project_Node_Tree_Ref) return Project_Qualifier
1397 In_Tree.Project_Nodes.Table (Node).Kind = N_Project);
1398 return In_Tree.Project_Nodes.Table (Node).Qualifier;
1399 end Project_Qualifier_Of;
1401 -----------------------
1402 -- Parent_Project_Of --
1403 -----------------------
1405 function Parent_Project_Of
1406 (Node : Project_Node_Id;
1407 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
1413 In_Tree.Project_Nodes.Table (Node).Kind = N_Project);
1414 return In_Tree.Project_Nodes.Table (Node).Field4;
1415 end Parent_Project_Of;
1417 -------------------------------------------
1418 -- Project_File_Includes_Unkept_Comments --
1419 -------------------------------------------
1421 function Project_File_Includes_Unkept_Comments
1422 (Node : Project_Node_Id;
1423 In_Tree : Project_Node_Tree_Ref) return Boolean
1425 Declaration : constant Project_Node_Id :=
1426 Project_Declaration_Of (Node, In_Tree);
1428 return In_Tree.Project_Nodes.Table (Declaration).Flag1;
1429 end Project_File_Includes_Unkept_Comments;
1431 ---------------------
1432 -- Project_Node_Of --
1433 ---------------------
1435 function Project_Node_Of
1436 (Node : Project_Node_Id;
1437 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
1443 (In_Tree.Project_Nodes.Table (Node).Kind = N_With_Clause
1445 In_Tree.Project_Nodes.Table (Node).Kind = N_Variable_Reference
1447 In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Reference));
1448 return In_Tree.Project_Nodes.Table (Node).Field1;
1449 end Project_Node_Of;
1451 -----------------------------------
1452 -- Project_Of_Renamed_Package_Of --
1453 -----------------------------------
1455 function Project_Of_Renamed_Package_Of
1456 (Node : Project_Node_Id;
1457 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
1463 In_Tree.Project_Nodes.Table (Node).Kind = N_Package_Declaration);
1464 return In_Tree.Project_Nodes.Table (Node).Field1;
1465 end Project_Of_Renamed_Package_Of;
1467 --------------------------
1468 -- Remove_Next_End_Node --
1469 --------------------------
1471 procedure Remove_Next_End_Node is
1473 Next_End_Nodes.Decrement_Last;
1474 end Remove_Next_End_Node;
1480 procedure Reset_State is
1482 End_Of_Line_Node := Empty_Node;
1483 Previous_Line_Node := Empty_Node;
1484 Previous_End_Node := Empty_Node;
1485 Unkept_Comments := False;
1486 Comments.Set_Last (0);
1493 procedure Restore (S : Comment_State) is
1495 End_Of_Line_Node := S.End_Of_Line_Node;
1496 Previous_Line_Node := S.Previous_Line_Node;
1497 Previous_End_Node := S.Previous_End_Node;
1498 Next_End_Nodes.Set_Last (0);
1499 Unkept_Comments := S.Unkept_Comments;
1501 Comments.Set_Last (0);
1503 for J in S.Comments'Range loop
1504 Comments.Increment_Last;
1505 Comments.Table (Comments.Last) := S.Comments (J);
1513 procedure Save (S : out Comment_State) is
1514 Cmts : constant Comments_Ptr := new Comment_Array (1 .. Comments.Last);
1517 for J in 1 .. Comments.Last loop
1518 Cmts (J) := Comments.Table (J);
1522 (End_Of_Line_Node => End_Of_Line_Node,
1523 Previous_Line_Node => Previous_Line_Node,
1524 Previous_End_Node => Previous_End_Node,
1525 Unkept_Comments => Unkept_Comments,
1533 procedure Scan (In_Tree : Project_Node_Tree_Ref) is
1534 Empty_Line : Boolean := False;
1537 -- If there are comments, then they will not be kept. Set the flag and
1538 -- clear the comments.
1540 if Comments.Last > 0 then
1541 Unkept_Comments := True;
1542 Comments.Set_Last (0);
1545 -- Loop until a token other that End_Of_Line or Comment is found
1548 Prj.Err.Scanner.Scan;
1551 when Tok_End_Of_Line =>
1552 if Prev_Token = Tok_End_Of_Line then
1555 if Comments.Last > 0 then
1556 Comments.Table (Comments.Last).Is_Followed_By_Empty_Line
1562 -- If this is a line comment, add it to the comment table
1564 if Prev_Token = Tok_End_Of_Line
1565 or else Prev_Token = No_Token
1567 Comments.Increment_Last;
1568 Comments.Table (Comments.Last) :=
1569 (Value => Comment_Id,
1570 Follows_Empty_Line => Empty_Line,
1571 Is_Followed_By_Empty_Line => False);
1573 -- Otherwise, it is an end of line comment. If there is
1574 -- an end of line node specified, associate the comment with
1577 elsif Present (End_Of_Line_Node) then
1579 Zones : constant Project_Node_Id :=
1580 Comment_Zones_Of (End_Of_Line_Node, In_Tree);
1582 In_Tree.Project_Nodes.Table (Zones).Value := Comment_Id;
1585 -- Otherwise, this end of line node cannot be kept
1588 Unkept_Comments := True;
1589 Comments.Set_Last (0);
1592 Empty_Line := False;
1595 -- If there are comments, where the first comment is not
1596 -- following an empty line, put the initial uninterrupted
1597 -- comment zone with the node of the preceding line (either
1598 -- a Previous_Line or a Previous_End node), if any.
1600 if Comments.Last > 0 and then
1601 not Comments.Table (1).Follows_Empty_Line then
1602 if Present (Previous_Line_Node) then
1604 (To => Previous_Line_Node,
1606 In_Tree => In_Tree);
1608 elsif Present (Previous_End_Node) then
1610 (To => Previous_End_Node,
1612 In_Tree => In_Tree);
1616 -- If there are still comments and the token is "end", then
1617 -- put these comments with the Next_End node, if any;
1618 -- otherwise, these comments cannot be kept. Always clear
1621 if Comments.Last > 0 and then Token = Tok_End then
1622 if Next_End_Nodes.Last > 0 then
1624 (To => Next_End_Nodes.Table (Next_End_Nodes.Last),
1625 Where => Before_End,
1626 In_Tree => In_Tree);
1629 Unkept_Comments := True;
1632 Comments.Set_Last (0);
1635 -- Reset the End_Of_Line, Previous_Line and Previous_End nodes
1636 -- so that they are not used again.
1638 End_Of_Line_Node := Empty_Node;
1639 Previous_Line_Node := Empty_Node;
1640 Previous_End_Node := Empty_Node;
1649 ------------------------------------
1650 -- Set_Associative_Array_Index_Of --
1651 ------------------------------------
1653 procedure Set_Associative_Array_Index_Of
1654 (Node : Project_Node_Id;
1655 In_Tree : Project_Node_Tree_Ref;
1662 (In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Declaration
1664 In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Reference));
1665 In_Tree.Project_Nodes.Table (Node).Value := To;
1666 end Set_Associative_Array_Index_Of;
1668 --------------------------------
1669 -- Set_Associative_Package_Of --
1670 --------------------------------
1672 procedure Set_Associative_Package_Of
1673 (Node : Project_Node_Id;
1674 In_Tree : Project_Node_Tree_Ref;
1675 To : Project_Node_Id)
1681 In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Declaration);
1682 In_Tree.Project_Nodes.Table (Node).Field3 := To;
1683 end Set_Associative_Package_Of;
1685 --------------------------------
1686 -- Set_Associative_Project_Of --
1687 --------------------------------
1689 procedure Set_Associative_Project_Of
1690 (Node : Project_Node_Id;
1691 In_Tree : Project_Node_Tree_Ref;
1692 To : Project_Node_Id)
1698 (In_Tree.Project_Nodes.Table (Node).Kind =
1699 N_Attribute_Declaration));
1700 In_Tree.Project_Nodes.Table (Node).Field2 := To;
1701 end Set_Associative_Project_Of;
1703 --------------------------
1704 -- Set_Case_Insensitive --
1705 --------------------------
1707 procedure Set_Case_Insensitive
1708 (Node : Project_Node_Id;
1709 In_Tree : Project_Node_Tree_Ref;
1716 (In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Declaration
1718 In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Reference));
1719 In_Tree.Project_Nodes.Table (Node).Flag1 := To;
1720 end Set_Case_Insensitive;
1722 ------------------------------------
1723 -- Set_Case_Variable_Reference_Of --
1724 ------------------------------------
1726 procedure Set_Case_Variable_Reference_Of
1727 (Node : Project_Node_Id;
1728 In_Tree : Project_Node_Tree_Ref;
1729 To : Project_Node_Id)
1735 In_Tree.Project_Nodes.Table (Node).Kind = N_Case_Construction);
1736 In_Tree.Project_Nodes.Table (Node).Field1 := To;
1737 end Set_Case_Variable_Reference_Of;
1739 ---------------------------
1740 -- Set_Current_Item_Node --
1741 ---------------------------
1743 procedure Set_Current_Item_Node
1744 (Node : Project_Node_Id;
1745 In_Tree : Project_Node_Tree_Ref;
1746 To : Project_Node_Id)
1752 In_Tree.Project_Nodes.Table (Node).Kind = N_Declarative_Item);
1753 In_Tree.Project_Nodes.Table (Node).Field1 := To;
1754 end Set_Current_Item_Node;
1756 ----------------------
1757 -- Set_Current_Term --
1758 ----------------------
1760 procedure Set_Current_Term
1761 (Node : Project_Node_Id;
1762 In_Tree : Project_Node_Tree_Ref;
1763 To : Project_Node_Id)
1769 In_Tree.Project_Nodes.Table (Node).Kind = N_Term);
1770 In_Tree.Project_Nodes.Table (Node).Field1 := To;
1771 end Set_Current_Term;
1773 ----------------------
1774 -- Set_Directory_Of --
1775 ----------------------
1777 procedure Set_Directory_Of
1778 (Node : Project_Node_Id;
1779 In_Tree : Project_Node_Tree_Ref;
1780 To : Path_Name_Type)
1786 In_Tree.Project_Nodes.Table (Node).Kind = N_Project);
1787 In_Tree.Project_Nodes.Table (Node).Directory := To;
1788 end Set_Directory_Of;
1790 ---------------------
1791 -- Set_End_Of_Line --
1792 ---------------------
1794 procedure Set_End_Of_Line (To : Project_Node_Id) is
1796 End_Of_Line_Node := To;
1797 end Set_End_Of_Line;
1799 ----------------------------
1800 -- Set_Expression_Kind_Of --
1801 ----------------------------
1803 procedure Set_Expression_Kind_Of
1804 (Node : Project_Node_Id;
1805 In_Tree : Project_Node_Tree_Ref;
1812 (In_Tree.Project_Nodes.Table (Node).Kind = N_Literal_String
1814 In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Declaration
1816 In_Tree.Project_Nodes.Table (Node).Kind = N_Variable_Declaration
1818 In_Tree.Project_Nodes.Table (Node).Kind =
1819 N_Typed_Variable_Declaration
1821 In_Tree.Project_Nodes.Table (Node).Kind = N_Package_Declaration
1823 In_Tree.Project_Nodes.Table (Node).Kind = N_Expression
1825 In_Tree.Project_Nodes.Table (Node).Kind = N_Term
1827 In_Tree.Project_Nodes.Table (Node).Kind = N_Variable_Reference
1829 In_Tree.Project_Nodes.Table (Node).Kind =
1830 N_Attribute_Reference));
1831 In_Tree.Project_Nodes.Table (Node).Expr_Kind := To;
1832 end Set_Expression_Kind_Of;
1834 -----------------------
1835 -- Set_Expression_Of --
1836 -----------------------
1838 procedure Set_Expression_Of
1839 (Node : Project_Node_Id;
1840 In_Tree : Project_Node_Tree_Ref;
1841 To : Project_Node_Id)
1847 (In_Tree.Project_Nodes.Table (Node).Kind =
1848 N_Attribute_Declaration
1850 In_Tree.Project_Nodes.Table (Node).Kind =
1851 N_Typed_Variable_Declaration
1853 In_Tree.Project_Nodes.Table (Node).Kind =
1854 N_Variable_Declaration));
1855 In_Tree.Project_Nodes.Table (Node).Field1 := To;
1856 end Set_Expression_Of;
1858 -------------------------------
1859 -- Set_External_Reference_Of --
1860 -------------------------------
1862 procedure Set_External_Reference_Of
1863 (Node : Project_Node_Id;
1864 In_Tree : Project_Node_Tree_Ref;
1865 To : Project_Node_Id)
1871 In_Tree.Project_Nodes.Table (Node).Kind = N_External_Value);
1872 In_Tree.Project_Nodes.Table (Node).Field1 := To;
1873 end Set_External_Reference_Of;
1875 -----------------------------
1876 -- Set_External_Default_Of --
1877 -----------------------------
1879 procedure Set_External_Default_Of
1880 (Node : Project_Node_Id;
1881 In_Tree : Project_Node_Tree_Ref;
1882 To : Project_Node_Id)
1888 In_Tree.Project_Nodes.Table (Node).Kind = N_External_Value);
1889 In_Tree.Project_Nodes.Table (Node).Field2 := To;
1890 end Set_External_Default_Of;
1892 ----------------------------
1893 -- Set_First_Case_Item_Of --
1894 ----------------------------
1896 procedure Set_First_Case_Item_Of
1897 (Node : Project_Node_Id;
1898 In_Tree : Project_Node_Tree_Ref;
1899 To : Project_Node_Id)
1905 In_Tree.Project_Nodes.Table (Node).Kind = N_Case_Construction);
1906 In_Tree.Project_Nodes.Table (Node).Field2 := To;
1907 end Set_First_Case_Item_Of;
1909 -------------------------
1910 -- Set_First_Choice_Of --
1911 -------------------------
1913 procedure Set_First_Choice_Of
1914 (Node : Project_Node_Id;
1915 In_Tree : Project_Node_Tree_Ref;
1916 To : Project_Node_Id)
1922 In_Tree.Project_Nodes.Table (Node).Kind = N_Case_Item);
1923 In_Tree.Project_Nodes.Table (Node).Field1 := To;
1924 end Set_First_Choice_Of;
1926 -----------------------------
1927 -- Set_First_Comment_After --
1928 -----------------------------
1930 procedure Set_First_Comment_After
1931 (Node : Project_Node_Id;
1932 In_Tree : Project_Node_Tree_Ref;
1933 To : Project_Node_Id)
1935 Zone : constant Project_Node_Id := Comment_Zones_Of (Node, In_Tree);
1937 In_Tree.Project_Nodes.Table (Zone).Field2 := To;
1938 end Set_First_Comment_After;
1940 ---------------------------------
1941 -- Set_First_Comment_After_End --
1942 ---------------------------------
1944 procedure Set_First_Comment_After_End
1945 (Node : Project_Node_Id;
1946 In_Tree : Project_Node_Tree_Ref;
1947 To : Project_Node_Id)
1949 Zone : constant Project_Node_Id := Comment_Zones_Of (Node, In_Tree);
1951 In_Tree.Project_Nodes.Table (Zone).Comments := To;
1952 end Set_First_Comment_After_End;
1954 ------------------------------
1955 -- Set_First_Comment_Before --
1956 ------------------------------
1958 procedure Set_First_Comment_Before
1959 (Node : Project_Node_Id;
1960 In_Tree : Project_Node_Tree_Ref;
1961 To : Project_Node_Id)
1964 Zone : constant Project_Node_Id := Comment_Zones_Of (Node, In_Tree);
1966 In_Tree.Project_Nodes.Table (Zone).Field1 := To;
1967 end Set_First_Comment_Before;
1969 ----------------------------------
1970 -- Set_First_Comment_Before_End --
1971 ----------------------------------
1973 procedure Set_First_Comment_Before_End
1974 (Node : Project_Node_Id;
1975 In_Tree : Project_Node_Tree_Ref;
1976 To : Project_Node_Id)
1978 Zone : constant Project_Node_Id := Comment_Zones_Of (Node, In_Tree);
1980 In_Tree.Project_Nodes.Table (Zone).Field2 := To;
1981 end Set_First_Comment_Before_End;
1983 ------------------------
1984 -- Set_Next_Case_Item --
1985 ------------------------
1987 procedure Set_Next_Case_Item
1988 (Node : Project_Node_Id;
1989 In_Tree : Project_Node_Tree_Ref;
1990 To : Project_Node_Id)
1996 In_Tree.Project_Nodes.Table (Node).Kind = N_Case_Item);
1997 In_Tree.Project_Nodes.Table (Node).Field3 := To;
1998 end Set_Next_Case_Item;
2000 ----------------------
2001 -- Set_Next_Comment --
2002 ----------------------
2004 procedure Set_Next_Comment
2005 (Node : Project_Node_Id;
2006 In_Tree : Project_Node_Tree_Ref;
2007 To : Project_Node_Id)
2013 In_Tree.Project_Nodes.Table (Node).Kind = N_Comment);
2014 In_Tree.Project_Nodes.Table (Node).Comments := To;
2015 end Set_Next_Comment;
2017 -----------------------------------
2018 -- Set_First_Declarative_Item_Of --
2019 -----------------------------------
2021 procedure Set_First_Declarative_Item_Of
2022 (Node : Project_Node_Id;
2023 In_Tree : Project_Node_Tree_Ref;
2024 To : Project_Node_Id)
2030 (In_Tree.Project_Nodes.Table (Node).Kind = N_Project_Declaration
2032 In_Tree.Project_Nodes.Table (Node).Kind = N_Case_Item
2034 In_Tree.Project_Nodes.Table (Node).Kind = N_Package_Declaration));
2036 if In_Tree.Project_Nodes.Table (Node).Kind = N_Project_Declaration then
2037 In_Tree.Project_Nodes.Table (Node).Field1 := To;
2039 In_Tree.Project_Nodes.Table (Node).Field2 := To;
2041 end Set_First_Declarative_Item_Of;
2043 ----------------------------------
2044 -- Set_First_Expression_In_List --
2045 ----------------------------------
2047 procedure Set_First_Expression_In_List
2048 (Node : Project_Node_Id;
2049 In_Tree : Project_Node_Tree_Ref;
2050 To : Project_Node_Id)
2056 In_Tree.Project_Nodes.Table (Node).Kind = N_Literal_String_List);
2057 In_Tree.Project_Nodes.Table (Node).Field1 := To;
2058 end Set_First_Expression_In_List;
2060 ------------------------------
2061 -- Set_First_Literal_String --
2062 ------------------------------
2064 procedure Set_First_Literal_String
2065 (Node : Project_Node_Id;
2066 In_Tree : Project_Node_Tree_Ref;
2067 To : Project_Node_Id)
2073 In_Tree.Project_Nodes.Table (Node).Kind =
2074 N_String_Type_Declaration);
2075 In_Tree.Project_Nodes.Table (Node).Field1 := To;
2076 end Set_First_Literal_String;
2078 --------------------------
2079 -- Set_First_Package_Of --
2080 --------------------------
2082 procedure Set_First_Package_Of
2083 (Node : Project_Node_Id;
2084 In_Tree : Project_Node_Tree_Ref;
2085 To : Package_Declaration_Id)
2091 In_Tree.Project_Nodes.Table (Node).Kind = N_Project);
2092 In_Tree.Project_Nodes.Table (Node).Packages := To;
2093 end Set_First_Package_Of;
2095 ------------------------------
2096 -- Set_First_String_Type_Of --
2097 ------------------------------
2099 procedure Set_First_String_Type_Of
2100 (Node : Project_Node_Id;
2101 In_Tree : Project_Node_Tree_Ref;
2102 To : Project_Node_Id)
2108 In_Tree.Project_Nodes.Table (Node).Kind = N_Project);
2109 In_Tree.Project_Nodes.Table (Node).Field3 := To;
2110 end Set_First_String_Type_Of;
2112 --------------------
2113 -- Set_First_Term --
2114 --------------------
2116 procedure Set_First_Term
2117 (Node : Project_Node_Id;
2118 In_Tree : Project_Node_Tree_Ref;
2119 To : Project_Node_Id)
2125 In_Tree.Project_Nodes.Table (Node).Kind = N_Expression);
2126 In_Tree.Project_Nodes.Table (Node).Field1 := To;
2129 ---------------------------
2130 -- Set_First_Variable_Of --
2131 ---------------------------
2133 procedure Set_First_Variable_Of
2134 (Node : Project_Node_Id;
2135 In_Tree : Project_Node_Tree_Ref;
2136 To : Variable_Node_Id)
2142 (In_Tree.Project_Nodes.Table (Node).Kind = N_Project
2144 In_Tree.Project_Nodes.Table (Node).Kind = N_Package_Declaration));
2145 In_Tree.Project_Nodes.Table (Node).Variables := To;
2146 end Set_First_Variable_Of;
2148 ------------------------------
2149 -- Set_First_With_Clause_Of --
2150 ------------------------------
2152 procedure Set_First_With_Clause_Of
2153 (Node : Project_Node_Id;
2154 In_Tree : Project_Node_Tree_Ref;
2155 To : Project_Node_Id)
2161 In_Tree.Project_Nodes.Table (Node).Kind = N_Project);
2162 In_Tree.Project_Nodes.Table (Node).Field1 := To;
2163 end Set_First_With_Clause_Of;
2165 --------------------------
2166 -- Set_Is_Extending_All --
2167 --------------------------
2169 procedure Set_Is_Extending_All
2170 (Node : Project_Node_Id;
2171 In_Tree : Project_Node_Tree_Ref)
2177 (In_Tree.Project_Nodes.Table (Node).Kind = N_Project
2179 In_Tree.Project_Nodes.Table (Node).Kind = N_With_Clause));
2180 In_Tree.Project_Nodes.Table (Node).Flag2 := True;
2181 end Set_Is_Extending_All;
2183 -----------------------------
2184 -- Set_Is_Not_Last_In_List --
2185 -----------------------------
2187 procedure Set_Is_Not_Last_In_List
2188 (Node : Project_Node_Id;
2189 In_Tree : Project_Node_Tree_Ref)
2195 In_Tree.Project_Nodes.Table (Node).Kind = N_With_Clause);
2196 In_Tree.Project_Nodes.Table (Node).Flag1 := True;
2197 end Set_Is_Not_Last_In_List;
2203 procedure Set_Kind_Of
2204 (Node : Project_Node_Id;
2205 In_Tree : Project_Node_Tree_Ref;
2206 To : Project_Node_Kind)
2209 pragma Assert (Present (Node));
2210 In_Tree.Project_Nodes.Table (Node).Kind := To;
2213 ---------------------
2214 -- Set_Location_Of --
2215 ---------------------
2217 procedure Set_Location_Of
2218 (Node : Project_Node_Id;
2219 In_Tree : Project_Node_Tree_Ref;
2223 pragma Assert (Present (Node));
2224 In_Tree.Project_Nodes.Table (Node).Location := To;
2225 end Set_Location_Of;
2227 -----------------------------
2228 -- Set_Extended_Project_Of --
2229 -----------------------------
2231 procedure Set_Extended_Project_Of
2232 (Node : Project_Node_Id;
2233 In_Tree : Project_Node_Tree_Ref;
2234 To : Project_Node_Id)
2240 In_Tree.Project_Nodes.Table (Node).Kind = N_Project_Declaration);
2241 In_Tree.Project_Nodes.Table (Node).Field2 := To;
2242 end Set_Extended_Project_Of;
2244 ----------------------------------
2245 -- Set_Extended_Project_Path_Of --
2246 ----------------------------------
2248 procedure Set_Extended_Project_Path_Of
2249 (Node : Project_Node_Id;
2250 In_Tree : Project_Node_Tree_Ref;
2251 To : Path_Name_Type)
2257 In_Tree.Project_Nodes.Table (Node).Kind = N_Project);
2258 In_Tree.Project_Nodes.Table (Node).Value := Name_Id (To);
2259 end Set_Extended_Project_Path_Of;
2261 ------------------------------
2262 -- Set_Extending_Project_Of --
2263 ------------------------------
2265 procedure Set_Extending_Project_Of
2266 (Node : Project_Node_Id;
2267 In_Tree : Project_Node_Tree_Ref;
2268 To : Project_Node_Id)
2274 In_Tree.Project_Nodes.Table (Node).Kind = N_Project_Declaration);
2275 In_Tree.Project_Nodes.Table (Node).Field3 := To;
2276 end Set_Extending_Project_Of;
2282 procedure Set_Name_Of
2283 (Node : Project_Node_Id;
2284 In_Tree : Project_Node_Tree_Ref;
2288 pragma Assert (Present (Node));
2289 In_Tree.Project_Nodes.Table (Node).Name := To;
2292 -------------------------------
2293 -- Set_Next_Declarative_Item --
2294 -------------------------------
2296 procedure Set_Next_Declarative_Item
2297 (Node : Project_Node_Id;
2298 In_Tree : Project_Node_Tree_Ref;
2299 To : Project_Node_Id)
2305 In_Tree.Project_Nodes.Table (Node).Kind = N_Declarative_Item);
2306 In_Tree.Project_Nodes.Table (Node).Field2 := To;
2307 end Set_Next_Declarative_Item;
2309 -----------------------
2310 -- Set_Next_End_Node --
2311 -----------------------
2313 procedure Set_Next_End_Node (To : Project_Node_Id) is
2315 Next_End_Nodes.Increment_Last;
2316 Next_End_Nodes.Table (Next_End_Nodes.Last) := To;
2317 end Set_Next_End_Node;
2319 ---------------------------------
2320 -- Set_Next_Expression_In_List --
2321 ---------------------------------
2323 procedure Set_Next_Expression_In_List
2324 (Node : Project_Node_Id;
2325 In_Tree : Project_Node_Tree_Ref;
2326 To : Project_Node_Id)
2332 In_Tree.Project_Nodes.Table (Node).Kind = N_Expression);
2333 In_Tree.Project_Nodes.Table (Node).Field2 := To;
2334 end Set_Next_Expression_In_List;
2336 -----------------------------
2337 -- Set_Next_Literal_String --
2338 -----------------------------
2340 procedure Set_Next_Literal_String
2341 (Node : Project_Node_Id;
2342 In_Tree : Project_Node_Tree_Ref;
2343 To : Project_Node_Id)
2349 In_Tree.Project_Nodes.Table (Node).Kind = N_Literal_String);
2350 In_Tree.Project_Nodes.Table (Node).Field1 := To;
2351 end Set_Next_Literal_String;
2353 ---------------------------------
2354 -- Set_Next_Package_In_Project --
2355 ---------------------------------
2357 procedure Set_Next_Package_In_Project
2358 (Node : Project_Node_Id;
2359 In_Tree : Project_Node_Tree_Ref;
2360 To : Project_Node_Id)
2366 In_Tree.Project_Nodes.Table (Node).Kind = N_Package_Declaration);
2367 In_Tree.Project_Nodes.Table (Node).Field3 := To;
2368 end Set_Next_Package_In_Project;
2370 --------------------------
2371 -- Set_Next_String_Type --
2372 --------------------------
2374 procedure Set_Next_String_Type
2375 (Node : Project_Node_Id;
2376 In_Tree : Project_Node_Tree_Ref;
2377 To : Project_Node_Id)
2383 In_Tree.Project_Nodes.Table (Node).Kind =
2384 N_String_Type_Declaration);
2385 In_Tree.Project_Nodes.Table (Node).Field2 := To;
2386 end Set_Next_String_Type;
2392 procedure Set_Next_Term
2393 (Node : Project_Node_Id;
2394 In_Tree : Project_Node_Tree_Ref;
2395 To : Project_Node_Id)
2401 In_Tree.Project_Nodes.Table (Node).Kind = N_Term);
2402 In_Tree.Project_Nodes.Table (Node).Field2 := To;
2405 -----------------------
2406 -- Set_Next_Variable --
2407 -----------------------
2409 procedure Set_Next_Variable
2410 (Node : Project_Node_Id;
2411 In_Tree : Project_Node_Tree_Ref;
2412 To : Project_Node_Id)
2418 (In_Tree.Project_Nodes.Table (Node).Kind =
2419 N_Typed_Variable_Declaration
2421 In_Tree.Project_Nodes.Table (Node).Kind =
2422 N_Variable_Declaration));
2423 In_Tree.Project_Nodes.Table (Node).Field3 := To;
2424 end Set_Next_Variable;
2426 -----------------------------
2427 -- Set_Next_With_Clause_Of --
2428 -----------------------------
2430 procedure Set_Next_With_Clause_Of
2431 (Node : Project_Node_Id;
2432 In_Tree : Project_Node_Tree_Ref;
2433 To : Project_Node_Id)
2439 In_Tree.Project_Nodes.Table (Node).Kind = N_With_Clause);
2440 In_Tree.Project_Nodes.Table (Node).Field2 := To;
2441 end Set_Next_With_Clause_Of;
2443 -----------------------
2444 -- Set_Package_Id_Of --
2445 -----------------------
2447 procedure Set_Package_Id_Of
2448 (Node : Project_Node_Id;
2449 In_Tree : Project_Node_Tree_Ref;
2450 To : Package_Node_Id)
2456 In_Tree.Project_Nodes.Table (Node).Kind = N_Package_Declaration);
2457 In_Tree.Project_Nodes.Table (Node).Pkg_Id := To;
2458 end Set_Package_Id_Of;
2460 -------------------------
2461 -- Set_Package_Node_Of --
2462 -------------------------
2464 procedure Set_Package_Node_Of
2465 (Node : Project_Node_Id;
2466 In_Tree : Project_Node_Tree_Ref;
2467 To : Project_Node_Id)
2473 (In_Tree.Project_Nodes.Table (Node).Kind = N_Variable_Reference
2475 In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Reference));
2476 In_Tree.Project_Nodes.Table (Node).Field2 := To;
2477 end Set_Package_Node_Of;
2479 ----------------------
2480 -- Set_Path_Name_Of --
2481 ----------------------
2483 procedure Set_Path_Name_Of
2484 (Node : Project_Node_Id;
2485 In_Tree : Project_Node_Tree_Ref;
2486 To : Path_Name_Type)
2492 (In_Tree.Project_Nodes.Table (Node).Kind = N_Project
2494 In_Tree.Project_Nodes.Table (Node).Kind = N_With_Clause));
2495 In_Tree.Project_Nodes.Table (Node).Path_Name := To;
2496 end Set_Path_Name_Of;
2498 ---------------------------
2499 -- Set_Previous_End_Node --
2500 ---------------------------
2501 procedure Set_Previous_End_Node (To : Project_Node_Id) is
2503 Previous_End_Node := To;
2504 end Set_Previous_End_Node;
2506 ----------------------------
2507 -- Set_Previous_Line_Node --
2508 ----------------------------
2510 procedure Set_Previous_Line_Node (To : Project_Node_Id) is
2512 Previous_Line_Node := To;
2513 end Set_Previous_Line_Node;
2515 --------------------------------
2516 -- Set_Project_Declaration_Of --
2517 --------------------------------
2519 procedure Set_Project_Declaration_Of
2520 (Node : Project_Node_Id;
2521 In_Tree : Project_Node_Tree_Ref;
2522 To : Project_Node_Id)
2528 In_Tree.Project_Nodes.Table (Node).Kind = N_Project);
2529 In_Tree.Project_Nodes.Table (Node).Field2 := To;
2530 end Set_Project_Declaration_Of;
2532 ------------------------------
2533 -- Set_Project_Qualifier_Of --
2534 ------------------------------
2536 procedure Set_Project_Qualifier_Of
2537 (Node : Project_Node_Id;
2538 In_Tree : Project_Node_Tree_Ref;
2539 To : Project_Qualifier)
2544 and then In_Tree.Project_Nodes.Table (Node).Kind = N_Project);
2545 In_Tree.Project_Nodes.Table (Node).Qualifier := To;
2546 end Set_Project_Qualifier_Of;
2548 ---------------------------
2549 -- Set_Parent_Project_Of --
2550 ---------------------------
2552 procedure Set_Parent_Project_Of
2553 (Node : Project_Node_Id;
2554 In_Tree : Project_Node_Tree_Ref;
2555 To : Project_Node_Id)
2560 and then In_Tree.Project_Nodes.Table (Node).Kind = N_Project);
2561 In_Tree.Project_Nodes.Table (Node).Field4 := To;
2562 end Set_Parent_Project_Of;
2564 -----------------------------------------------
2565 -- Set_Project_File_Includes_Unkept_Comments --
2566 -----------------------------------------------
2568 procedure Set_Project_File_Includes_Unkept_Comments
2569 (Node : Project_Node_Id;
2570 In_Tree : Project_Node_Tree_Ref;
2573 Declaration : constant Project_Node_Id :=
2574 Project_Declaration_Of (Node, In_Tree);
2576 In_Tree.Project_Nodes.Table (Declaration).Flag1 := To;
2577 end Set_Project_File_Includes_Unkept_Comments;
2579 -------------------------
2580 -- Set_Project_Node_Of --
2581 -------------------------
2583 procedure Set_Project_Node_Of
2584 (Node : Project_Node_Id;
2585 In_Tree : Project_Node_Tree_Ref;
2586 To : Project_Node_Id;
2587 Limited_With : Boolean := False)
2593 (In_Tree.Project_Nodes.Table (Node).Kind = N_With_Clause
2595 In_Tree.Project_Nodes.Table (Node).Kind = N_Variable_Reference
2597 In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Reference));
2598 In_Tree.Project_Nodes.Table (Node).Field1 := To;
2600 if In_Tree.Project_Nodes.Table (Node).Kind = N_With_Clause
2601 and then not Limited_With
2603 In_Tree.Project_Nodes.Table (Node).Field3 := To;
2605 end Set_Project_Node_Of;
2607 ---------------------------------------
2608 -- Set_Project_Of_Renamed_Package_Of --
2609 ---------------------------------------
2611 procedure Set_Project_Of_Renamed_Package_Of
2612 (Node : Project_Node_Id;
2613 In_Tree : Project_Node_Tree_Ref;
2614 To : Project_Node_Id)
2620 In_Tree.Project_Nodes.Table (Node).Kind = N_Package_Declaration);
2621 In_Tree.Project_Nodes.Table (Node).Field1 := To;
2622 end Set_Project_Of_Renamed_Package_Of;
2624 -------------------------
2625 -- Set_Source_Index_Of --
2626 -------------------------
2628 procedure Set_Source_Index_Of
2629 (Node : Project_Node_Id;
2630 In_Tree : Project_Node_Tree_Ref;
2637 (In_Tree.Project_Nodes.Table (Node).Kind = N_Literal_String
2639 In_Tree.Project_Nodes.Table (Node).Kind =
2640 N_Attribute_Declaration));
2641 In_Tree.Project_Nodes.Table (Node).Src_Index := To;
2642 end Set_Source_Index_Of;
2644 ------------------------
2645 -- Set_String_Type_Of --
2646 ------------------------
2648 procedure Set_String_Type_Of
2649 (Node : Project_Node_Id;
2650 In_Tree : Project_Node_Tree_Ref;
2651 To : Project_Node_Id)
2657 (In_Tree.Project_Nodes.Table (Node).Kind =
2658 N_Variable_Reference
2660 In_Tree.Project_Nodes.Table (Node).Kind =
2661 N_Typed_Variable_Declaration)
2663 In_Tree.Project_Nodes.Table (To).Kind = N_String_Type_Declaration);
2665 if In_Tree.Project_Nodes.Table (Node).Kind = N_Variable_Reference then
2666 In_Tree.Project_Nodes.Table (Node).Field3 := To;
2668 In_Tree.Project_Nodes.Table (Node).Field2 := To;
2670 end Set_String_Type_Of;
2672 -------------------------
2673 -- Set_String_Value_Of --
2674 -------------------------
2676 procedure Set_String_Value_Of
2677 (Node : Project_Node_Id;
2678 In_Tree : Project_Node_Tree_Ref;
2685 (In_Tree.Project_Nodes.Table (Node).Kind = N_With_Clause
2687 In_Tree.Project_Nodes.Table (Node).Kind = N_Comment
2689 In_Tree.Project_Nodes.Table (Node).Kind = N_Literal_String));
2690 In_Tree.Project_Nodes.Table (Node).Value := To;
2691 end Set_String_Value_Of;
2693 ---------------------
2694 -- Source_Index_Of --
2695 ---------------------
2697 function Source_Index_Of
2698 (Node : Project_Node_Id;
2699 In_Tree : Project_Node_Tree_Ref) return Int
2705 (In_Tree.Project_Nodes.Table (Node).Kind = N_Literal_String
2707 In_Tree.Project_Nodes.Table (Node).Kind =
2708 N_Attribute_Declaration));
2709 return In_Tree.Project_Nodes.Table (Node).Src_Index;
2710 end Source_Index_Of;
2712 --------------------
2713 -- String_Type_Of --
2714 --------------------
2716 function String_Type_Of
2717 (Node : Project_Node_Id;
2718 In_Tree : Project_Node_Tree_Ref) return Project_Node_Id
2724 (In_Tree.Project_Nodes.Table (Node).Kind =
2725 N_Variable_Reference
2727 In_Tree.Project_Nodes.Table (Node).Kind =
2728 N_Typed_Variable_Declaration));
2730 if In_Tree.Project_Nodes.Table (Node).Kind = N_Variable_Reference then
2731 return In_Tree.Project_Nodes.Table (Node).Field3;
2733 return In_Tree.Project_Nodes.Table (Node).Field2;
2737 ---------------------
2738 -- String_Value_Of --
2739 ---------------------
2741 function String_Value_Of
2742 (Node : Project_Node_Id;
2743 In_Tree : Project_Node_Tree_Ref) return Name_Id
2749 (In_Tree.Project_Nodes.Table (Node).Kind = N_With_Clause
2751 In_Tree.Project_Nodes.Table (Node).Kind = N_Comment
2753 In_Tree.Project_Nodes.Table (Node).Kind = N_Literal_String));
2754 return In_Tree.Project_Nodes.Table (Node).Value;
2755 end String_Value_Of;
2757 --------------------
2758 -- Value_Is_Valid --
2759 --------------------
2761 function Value_Is_Valid
2762 (For_Typed_Variable : Project_Node_Id;
2763 In_Tree : Project_Node_Tree_Ref;
2764 Value : Name_Id) return Boolean
2768 (Present (For_Typed_Variable)
2770 (In_Tree.Project_Nodes.Table (For_Typed_Variable).Kind =
2771 N_Typed_Variable_Declaration));
2774 Current_String : Project_Node_Id :=
2775 First_Literal_String
2776 (String_Type_Of (For_Typed_Variable, In_Tree),
2780 while Present (Current_String)
2782 String_Value_Of (Current_String, In_Tree) /= Value
2785 Next_Literal_String (Current_String, In_Tree);
2788 return Present (Current_String);
2793 -------------------------------
2794 -- There_Are_Unkept_Comments --
2795 -------------------------------
2797 function There_Are_Unkept_Comments return Boolean is
2799 return Unkept_Comments;
2800 end There_Are_Unkept_Comments;