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
;