1 ------------------------------------------------------------------------------
3 -- GNAT COMPILER COMPONENTS --
9 -- Copyright (C) 2001-2005 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 2, 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 COPYING. If not, write --
19 -- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, --
20 -- MA 02111-1307, USA. --
22 -- GNAT was originally developed by the GNAT team at New York University. --
23 -- Extensive contributions were provided by Ada Core Technologies Inc. --
25 ------------------------------------------------------------------------------
29 package body Prj
.Tree
is
31 Node_With_Comments
: constant array (Project_Node_Kind
) of Boolean :=
33 N_With_Clause
=> True,
34 N_Project_Declaration
=> False,
35 N_Declarative_Item
=> False,
36 N_Package_Declaration
=> True,
37 N_String_Type_Declaration
=> True,
38 N_Literal_String
=> False,
39 N_Attribute_Declaration
=> True,
40 N_Typed_Variable_Declaration
=> True,
41 N_Variable_Declaration
=> True,
42 N_Expression
=> False,
44 N_Literal_String_List
=> False,
45 N_Variable_Reference
=> False,
46 N_External_Value
=> False,
47 N_Attribute_Reference
=> False,
48 N_Case_Construction
=> True,
50 N_Comment_Zones
=> True,
52 -- Indicates the kinds of node that may have associated comments
54 package Next_End_Nodes
is new Table
.Table
55 (Table_Component_Type
=> Project_Node_Id
,
56 Table_Index_Type
=> Natural,
59 Table_Increment
=> 100,
60 Table_Name
=> "Next_End_Nodes");
61 -- A stack of nodes to indicates to what node the next "end" is associated
63 use Tree_Private_Part
;
65 End_Of_Line_Node
: Project_Node_Id
:= Empty_Node
;
66 -- The node an end of line comment may be associated with
68 Previous_Line_Node
: Project_Node_Id
:= Empty_Node
;
69 -- The node an immediately following comment may be associated with
71 Previous_End_Node
: Project_Node_Id
:= Empty_Node
;
72 -- The node comments immediately following an "end" line may be
75 Unkept_Comments
: Boolean := False;
76 -- Set to True when some comments may not be associated with any node
78 function Comment_Zones_Of
79 (Node
: Project_Node_Id
;
80 In_Tree
: Project_Node_Tree_Ref
) return Project_Node_Id
;
81 -- Returns the ID of the N_Comment_Zones node associated with node Node.
82 -- If there is not already an N_Comment_Zones node, create one and
83 -- associate it with node Node.
89 procedure Add_Comments
90 (To
: Project_Node_Id
;
91 In_Tree
: Project_Node_Tree_Ref
;
92 Where
: Comment_Location
) is
93 Zone
: Project_Node_Id
:= Empty_Node
;
94 Previous
: Project_Node_Id
:= Empty_Node
;
100 In_Tree
.Project_Nodes
.Table
(To
).Kind
/= N_Comment
);
102 Zone
:= In_Tree
.Project_Nodes
.Table
(To
).Comments
;
104 if Zone
= Empty_Node
then
106 -- Create new N_Comment_Zones node
108 Project_Node_Table
.Increment_Last
(In_Tree
.Project_Nodes
);
109 In_Tree
.Project_Nodes
.Table
110 (Project_Node_Table
.Last
(In_Tree
.Project_Nodes
)) :=
111 (Kind
=> N_Comment_Zones
,
112 Expr_Kind
=> Undefined
,
113 Location
=> No_Location
,
114 Directory
=> No_Name
,
115 Variables
=> Empty_Node
,
116 Packages
=> Empty_Node
,
117 Pkg_Id
=> Empty_Package
,
120 Path_Name
=> No_Name
,
122 Field1
=> Empty_Node
,
123 Field2
=> Empty_Node
,
124 Field3
=> Empty_Node
,
127 Comments
=> Empty_Node
);
129 Zone
:= Project_Node_Table
.Last
(In_Tree
.Project_Nodes
);
130 In_Tree
.Project_Nodes
.Table
(To
).Comments
:= Zone
;
133 if Where
= End_Of_Line
then
134 In_Tree
.Project_Nodes
.Table
(Zone
).Value
:= Comments
.Table
(1).Value
;
137 -- Get each comments in the Comments table and link them to node To
139 for J
in 1 .. Comments
.Last
loop
141 -- Create new N_Comment node
143 if (Where
= After
or else Where
= After_End
) and then
144 Token
/= Tok_EOF
and then
145 Comments
.Table
(J
).Follows_Empty_Line
147 Comments
.Table
(1 .. Comments
.Last
- J
+ 1) :=
148 Comments
.Table
(J
.. Comments
.Last
);
149 Comments
.Set_Last
(Comments
.Last
- J
+ 1);
153 Project_Node_Table
.Increment_Last
(In_Tree
.Project_Nodes
);
154 In_Tree
.Project_Nodes
.Table
155 (Project_Node_Table
.Last
(In_Tree
.Project_Nodes
)) :=
157 Expr_Kind
=> Undefined
,
158 Flag1
=> Comments
.Table
(J
).Follows_Empty_Line
,
160 Comments
.Table
(J
).Is_Followed_By_Empty_Line
,
161 Location
=> No_Location
,
162 Directory
=> No_Name
,
163 Variables
=> Empty_Node
,
164 Packages
=> Empty_Node
,
165 Pkg_Id
=> Empty_Package
,
168 Path_Name
=> No_Name
,
169 Value
=> Comments
.Table
(J
).Value
,
170 Field1
=> Empty_Node
,
171 Field2
=> Empty_Node
,
172 Field3
=> Empty_Node
,
173 Comments
=> Empty_Node
);
175 -- If this is the first comment, put it in the right field of
178 if Previous
= Empty_Node
then
181 In_Tree
.Project_Nodes
.Table
(Zone
).Field1
:=
182 Project_Node_Table
.Last
(In_Tree
.Project_Nodes
);
185 In_Tree
.Project_Nodes
.Table
(Zone
).Field2
:=
186 Project_Node_Table
.Last
(In_Tree
.Project_Nodes
);
189 In_Tree
.Project_Nodes
.Table
(Zone
).Field3
:=
190 Project_Node_Table
.Last
(In_Tree
.Project_Nodes
);
193 In_Tree
.Project_Nodes
.Table
(Zone
).Comments
:=
194 Project_Node_Table
.Last
(In_Tree
.Project_Nodes
);
201 -- When it is not the first, link it to the previous one
203 In_Tree
.Project_Nodes
.Table
(Previous
).Comments
:=
204 Project_Node_Table
.Last
(In_Tree
.Project_Nodes
);
207 -- This node becomes the previous one for the next comment, if
210 Previous
:= Project_Node_Table
.Last
(In_Tree
.Project_Nodes
);
214 -- Empty the Comments table, so that there is no risk to link the same
215 -- comments to another node.
217 Comments
.Set_Last
(0);
220 --------------------------------
221 -- Associative_Array_Index_Of --
222 --------------------------------
224 function Associative_Array_Index_Of
225 (Node
: Project_Node_Id
;
226 In_Tree
: Project_Node_Tree_Ref
) return Name_Id
232 (In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Attribute_Declaration
234 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Attribute_Reference
));
235 return In_Tree
.Project_Nodes
.Table
(Node
).Value
;
236 end Associative_Array_Index_Of
;
238 ----------------------------
239 -- Associative_Package_Of --
240 ----------------------------
242 function Associative_Package_Of
243 (Node
: Project_Node_Id
;
244 In_Tree
: Project_Node_Tree_Ref
) return Project_Node_Id
250 (In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Attribute_Declaration
));
251 return In_Tree
.Project_Nodes
.Table
(Node
).Field3
;
252 end Associative_Package_Of
;
254 ----------------------------
255 -- Associative_Project_Of --
256 ----------------------------
258 function Associative_Project_Of
259 (Node
: Project_Node_Id
;
260 In_Tree
: Project_Node_Tree_Ref
) return Project_Node_Id
266 (In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Attribute_Declaration
));
267 return In_Tree
.Project_Nodes
.Table
(Node
).Field2
;
268 end Associative_Project_Of
;
270 ----------------------
271 -- Case_Insensitive --
272 ----------------------
274 function Case_Insensitive
275 (Node
: Project_Node_Id
;
276 In_Tree
: Project_Node_Tree_Ref
) return Boolean is
281 (In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Attribute_Declaration
283 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Attribute_Reference
));
284 return In_Tree
.Project_Nodes
.Table
(Node
).Flag1
;
285 end Case_Insensitive
;
287 --------------------------------
288 -- Case_Variable_Reference_Of --
289 --------------------------------
291 function Case_Variable_Reference_Of
292 (Node
: Project_Node_Id
;
293 In_Tree
: Project_Node_Tree_Ref
) return Project_Node_Id
299 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Case_Construction
);
300 return In_Tree
.Project_Nodes
.Table
(Node
).Field1
;
301 end Case_Variable_Reference_Of
;
303 ----------------------
304 -- Comment_Zones_Of --
305 ----------------------
307 function Comment_Zones_Of
308 (Node
: Project_Node_Id
;
309 In_Tree
: Project_Node_Tree_Ref
) return Project_Node_Id
311 Zone
: Project_Node_Id
;
314 pragma Assert
(Node
/= Empty_Node
);
315 Zone
:= In_Tree
.Project_Nodes
.Table
(Node
).Comments
;
317 -- If there is not already an N_Comment_Zones associated, create a new
318 -- one and associate it with node Node.
320 if Zone
= Empty_Node
then
321 Project_Node_Table
.Increment_Last
(In_Tree
.Project_Nodes
);
322 Zone
:= Project_Node_Table
.Last
(In_Tree
.Project_Nodes
);
323 In_Tree
.Project_Nodes
.Table
(Zone
) :=
324 (Kind
=> N_Comment_Zones
,
325 Location
=> No_Location
,
326 Directory
=> No_Name
,
327 Expr_Kind
=> Undefined
,
328 Variables
=> Empty_Node
,
329 Packages
=> Empty_Node
,
330 Pkg_Id
=> Empty_Package
,
333 Path_Name
=> No_Name
,
335 Field1
=> Empty_Node
,
336 Field2
=> Empty_Node
,
337 Field3
=> Empty_Node
,
340 Comments
=> Empty_Node
);
341 In_Tree
.Project_Nodes
.Table
(Node
).Comments
:= Zone
;
345 end Comment_Zones_Of
;
347 -----------------------
348 -- Current_Item_Node --
349 -----------------------
351 function Current_Item_Node
352 (Node
: Project_Node_Id
;
353 In_Tree
: Project_Node_Tree_Ref
) return Project_Node_Id
359 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Declarative_Item
);
360 return In_Tree
.Project_Nodes
.Table
(Node
).Field1
;
361 end Current_Item_Node
;
367 function Current_Term
368 (Node
: Project_Node_Id
;
369 In_Tree
: Project_Node_Tree_Ref
) return Project_Node_Id
375 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Term
);
376 return In_Tree
.Project_Nodes
.Table
(Node
).Field1
;
379 --------------------------
380 -- Default_Project_Node --
381 --------------------------
383 function Default_Project_Node
384 (In_Tree
: Project_Node_Tree_Ref
;
385 Of_Kind
: Project_Node_Kind
;
386 And_Expr_Kind
: Variable_Kind
:= Undefined
) return Project_Node_Id
388 Result
: Project_Node_Id
;
389 Zone
: Project_Node_Id
;
390 Previous
: Project_Node_Id
;
393 -- Create new node with specified kind and expression kind
395 Project_Node_Table
.Increment_Last
(In_Tree
.Project_Nodes
);
396 In_Tree
.Project_Nodes
.Table
397 (Project_Node_Table
.Last
(In_Tree
.Project_Nodes
)) :=
399 Location
=> No_Location
,
400 Directory
=> No_Name
,
401 Expr_Kind
=> And_Expr_Kind
,
402 Variables
=> Empty_Node
,
403 Packages
=> Empty_Node
,
404 Pkg_Id
=> Empty_Package
,
407 Path_Name
=> No_Name
,
409 Field1
=> Empty_Node
,
410 Field2
=> Empty_Node
,
411 Field3
=> Empty_Node
,
414 Comments
=> Empty_Node
);
416 -- Save the new node for the returned value
418 Result
:= Project_Node_Table
.Last
(In_Tree
.Project_Nodes
);
420 if Comments
.Last
> 0 then
422 -- If this is not a node with comments, then set the flag
424 if not Node_With_Comments
(Of_Kind
) then
425 Unkept_Comments
:= True;
427 elsif Of_Kind
/= N_Comment
and then Of_Kind
/= N_Comment_Zones
then
429 Project_Node_Table
.Increment_Last
(In_Tree
.Project_Nodes
);
430 In_Tree
.Project_Nodes
.Table
431 (Project_Node_Table
.Last
(In_Tree
.Project_Nodes
)) :=
432 (Kind
=> N_Comment_Zones
,
433 Expr_Kind
=> Undefined
,
434 Location
=> No_Location
,
435 Directory
=> No_Name
,
436 Variables
=> Empty_Node
,
437 Packages
=> Empty_Node
,
438 Pkg_Id
=> Empty_Package
,
441 Path_Name
=> No_Name
,
443 Field1
=> Empty_Node
,
444 Field2
=> Empty_Node
,
445 Field3
=> Empty_Node
,
448 Comments
=> Empty_Node
);
450 Zone
:= Project_Node_Table
.Last
(In_Tree
.Project_Nodes
);
451 In_Tree
.Project_Nodes
.Table
(Result
).Comments
:= Zone
;
452 Previous
:= Empty_Node
;
454 for J
in 1 .. Comments
.Last
loop
456 -- Create a new N_Comment node
458 Project_Node_Table
.Increment_Last
(In_Tree
.Project_Nodes
);
459 In_Tree
.Project_Nodes
.Table
460 (Project_Node_Table
.Last
(In_Tree
.Project_Nodes
)) :=
462 Expr_Kind
=> Undefined
,
463 Flag1
=> Comments
.Table
(J
).Follows_Empty_Line
,
465 Comments
.Table
(J
).Is_Followed_By_Empty_Line
,
466 Location
=> No_Location
,
467 Directory
=> No_Name
,
468 Variables
=> Empty_Node
,
469 Packages
=> Empty_Node
,
470 Pkg_Id
=> Empty_Package
,
473 Path_Name
=> No_Name
,
474 Value
=> Comments
.Table
(J
).Value
,
475 Field1
=> Empty_Node
,
476 Field2
=> Empty_Node
,
477 Field3
=> Empty_Node
,
478 Comments
=> Empty_Node
);
480 -- Link it to the N_Comment_Zones node, if it is the first,
481 -- otherwise to the previous one.
483 if Previous
= Empty_Node
then
484 In_Tree
.Project_Nodes
.Table
(Zone
).Field1
:=
485 Project_Node_Table
.Last
(In_Tree
.Project_Nodes
);
488 In_Tree
.Project_Nodes
.Table
(Previous
).Comments
:=
489 Project_Node_Table
.Last
(In_Tree
.Project_Nodes
);
492 -- This new node will be the previous one for the next
493 -- N_Comment node, if there is one.
495 Previous
:= Project_Node_Table
.Last
(In_Tree
.Project_Nodes
);
498 -- Empty the Comments table after all comments have been processed
500 Comments
.Set_Last
(0);
505 end Default_Project_Node
;
511 function Directory_Of
512 (Node
: Project_Node_Id
;
513 In_Tree
: Project_Node_Tree_Ref
) return Name_Id
is
518 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Project
);
519 return In_Tree
.Project_Nodes
.Table
(Node
).Directory
;
522 -------------------------
523 -- End_Of_Line_Comment --
524 -------------------------
526 function End_Of_Line_Comment
527 (Node
: Project_Node_Id
;
528 In_Tree
: Project_Node_Tree_Ref
) return Name_Id
is
529 Zone
: Project_Node_Id
:= Empty_Node
;
532 pragma Assert
(Node
/= Empty_Node
);
533 Zone
:= In_Tree
.Project_Nodes
.Table
(Node
).Comments
;
535 if Zone
= Empty_Node
then
538 return In_Tree
.Project_Nodes
.Table
(Zone
).Value
;
540 end End_Of_Line_Comment
;
542 ------------------------
543 -- Expression_Kind_Of --
544 ------------------------
546 function Expression_Kind_Of
547 (Node
: Project_Node_Id
;
548 In_Tree
: Project_Node_Tree_Ref
) return Variable_Kind
is
553 (In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Literal_String
555 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Attribute_Declaration
557 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Variable_Declaration
559 In_Tree
.Project_Nodes
.Table
(Node
).Kind
=
560 N_Typed_Variable_Declaration
562 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Package_Declaration
564 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Expression
566 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Term
568 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Variable_Reference
570 In_Tree
.Project_Nodes
.Table
(Node
).Kind
=
571 N_Attribute_Reference
));
573 return In_Tree
.Project_Nodes
.Table
(Node
).Expr_Kind
;
574 end Expression_Kind_Of
;
580 function Expression_Of
581 (Node
: Project_Node_Id
;
582 In_Tree
: Project_Node_Tree_Ref
) return Project_Node_Id
588 (In_Tree
.Project_Nodes
.Table
(Node
).Kind
=
589 N_Attribute_Declaration
591 In_Tree
.Project_Nodes
.Table
(Node
).Kind
=
592 N_Typed_Variable_Declaration
594 In_Tree
.Project_Nodes
.Table
(Node
).Kind
=
595 N_Variable_Declaration
));
597 return In_Tree
.Project_Nodes
.Table
(Node
).Field1
;
600 -------------------------
601 -- Extended_Project_Of --
602 -------------------------
604 function Extended_Project_Of
605 (Node
: Project_Node_Id
;
606 In_Tree
: Project_Node_Tree_Ref
) return Project_Node_Id
612 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Project_Declaration
);
613 return In_Tree
.Project_Nodes
.Table
(Node
).Field2
;
614 end Extended_Project_Of
;
616 ------------------------------
617 -- Extended_Project_Path_Of --
618 ------------------------------
620 function Extended_Project_Path_Of
621 (Node
: Project_Node_Id
;
622 In_Tree
: Project_Node_Tree_Ref
) return Name_Id
628 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Project
);
629 return In_Tree
.Project_Nodes
.Table
(Node
).Value
;
630 end Extended_Project_Path_Of
;
632 --------------------------
633 -- Extending_Project_Of --
634 --------------------------
635 function Extending_Project_Of
636 (Node
: Project_Node_Id
;
637 In_Tree
: Project_Node_Tree_Ref
) return Project_Node_Id
643 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Project_Declaration
);
644 return In_Tree
.Project_Nodes
.Table
(Node
).Field3
;
645 end Extending_Project_Of
;
647 ---------------------------
648 -- External_Reference_Of --
649 ---------------------------
651 function External_Reference_Of
652 (Node
: Project_Node_Id
;
653 In_Tree
: Project_Node_Tree_Ref
) return Project_Node_Id
659 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_External_Value
);
660 return In_Tree
.Project_Nodes
.Table
(Node
).Field1
;
661 end External_Reference_Of
;
663 -------------------------
664 -- External_Default_Of --
665 -------------------------
667 function External_Default_Of
668 (Node
: Project_Node_Id
;
669 In_Tree
: Project_Node_Tree_Ref
)
670 return Project_Node_Id
676 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_External_Value
);
677 return In_Tree
.Project_Nodes
.Table
(Node
).Field2
;
678 end External_Default_Of
;
680 ------------------------
681 -- First_Case_Item_Of --
682 ------------------------
684 function First_Case_Item_Of
685 (Node
: Project_Node_Id
;
686 In_Tree
: Project_Node_Tree_Ref
) return Project_Node_Id
692 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Case_Construction
);
693 return In_Tree
.Project_Nodes
.Table
(Node
).Field2
;
694 end First_Case_Item_Of
;
696 ---------------------
697 -- First_Choice_Of --
698 ---------------------
700 function First_Choice_Of
701 (Node
: Project_Node_Id
;
702 In_Tree
: Project_Node_Tree_Ref
)
703 return Project_Node_Id
709 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Case_Item
);
710 return In_Tree
.Project_Nodes
.Table
(Node
).Field1
;
713 -------------------------
714 -- First_Comment_After --
715 -------------------------
717 function First_Comment_After
718 (Node
: Project_Node_Id
;
719 In_Tree
: Project_Node_Tree_Ref
) return Project_Node_Id
721 Zone
: Project_Node_Id
:= Empty_Node
;
723 pragma Assert
(Node
/= Empty_Node
);
724 Zone
:= In_Tree
.Project_Nodes
.Table
(Node
).Comments
;
726 if Zone
= Empty_Node
then
730 return In_Tree
.Project_Nodes
.Table
(Zone
).Field2
;
732 end First_Comment_After
;
734 -----------------------------
735 -- First_Comment_After_End --
736 -----------------------------
738 function First_Comment_After_End
739 (Node
: Project_Node_Id
;
740 In_Tree
: Project_Node_Tree_Ref
)
741 return Project_Node_Id
743 Zone
: Project_Node_Id
:= Empty_Node
;
746 pragma Assert
(Node
/= Empty_Node
);
747 Zone
:= In_Tree
.Project_Nodes
.Table
(Node
).Comments
;
749 if Zone
= Empty_Node
then
753 return In_Tree
.Project_Nodes
.Table
(Zone
).Comments
;
755 end First_Comment_After_End
;
757 --------------------------
758 -- First_Comment_Before --
759 --------------------------
761 function First_Comment_Before
762 (Node
: Project_Node_Id
;
763 In_Tree
: Project_Node_Tree_Ref
) return Project_Node_Id
765 Zone
: Project_Node_Id
:= Empty_Node
;
768 pragma Assert
(Node
/= Empty_Node
);
769 Zone
:= In_Tree
.Project_Nodes
.Table
(Node
).Comments
;
771 if Zone
= Empty_Node
then
775 return In_Tree
.Project_Nodes
.Table
(Zone
).Field1
;
777 end First_Comment_Before
;
779 ------------------------------
780 -- First_Comment_Before_End --
781 ------------------------------
783 function First_Comment_Before_End
784 (Node
: Project_Node_Id
;
785 In_Tree
: Project_Node_Tree_Ref
) return Project_Node_Id
787 Zone
: Project_Node_Id
:= Empty_Node
;
790 pragma Assert
(Node
/= Empty_Node
);
791 Zone
:= In_Tree
.Project_Nodes
.Table
(Node
).Comments
;
793 if Zone
= Empty_Node
then
797 return In_Tree
.Project_Nodes
.Table
(Zone
).Field3
;
799 end First_Comment_Before_End
;
801 -------------------------------
802 -- First_Declarative_Item_Of --
803 -------------------------------
805 function First_Declarative_Item_Of
806 (Node
: Project_Node_Id
;
807 In_Tree
: Project_Node_Tree_Ref
) return Project_Node_Id
813 (In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Project_Declaration
815 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Case_Item
817 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Package_Declaration
));
819 if In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Project_Declaration
then
820 return In_Tree
.Project_Nodes
.Table
(Node
).Field1
;
822 return In_Tree
.Project_Nodes
.Table
(Node
).Field2
;
824 end First_Declarative_Item_Of
;
826 ------------------------------
827 -- First_Expression_In_List --
828 ------------------------------
830 function First_Expression_In_List
831 (Node
: Project_Node_Id
;
832 In_Tree
: Project_Node_Tree_Ref
) return Project_Node_Id
838 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Literal_String_List
);
839 return In_Tree
.Project_Nodes
.Table
(Node
).Field1
;
840 end First_Expression_In_List
;
842 --------------------------
843 -- First_Literal_String --
844 --------------------------
846 function First_Literal_String
847 (Node
: Project_Node_Id
;
848 In_Tree
: Project_Node_Tree_Ref
) return Project_Node_Id
854 In_Tree
.Project_Nodes
.Table
(Node
).Kind
=
855 N_String_Type_Declaration
);
856 return In_Tree
.Project_Nodes
.Table
(Node
).Field1
;
857 end First_Literal_String
;
859 ----------------------
860 -- First_Package_Of --
861 ----------------------
863 function First_Package_Of
864 (Node
: Project_Node_Id
;
865 In_Tree
: Project_Node_Tree_Ref
) return Package_Declaration_Id
871 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Project
);
872 return In_Tree
.Project_Nodes
.Table
(Node
).Packages
;
873 end First_Package_Of
;
875 --------------------------
876 -- First_String_Type_Of --
877 --------------------------
879 function First_String_Type_Of
880 (Node
: Project_Node_Id
;
881 In_Tree
: Project_Node_Tree_Ref
) return Project_Node_Id
887 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Project
);
888 return In_Tree
.Project_Nodes
.Table
(Node
).Field3
;
889 end First_String_Type_Of
;
896 (Node
: Project_Node_Id
;
897 In_Tree
: Project_Node_Tree_Ref
) return Project_Node_Id
903 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Expression
);
904 return In_Tree
.Project_Nodes
.Table
(Node
).Field1
;
907 -----------------------
908 -- First_Variable_Of --
909 -----------------------
911 function First_Variable_Of
912 (Node
: Project_Node_Id
;
913 In_Tree
: Project_Node_Tree_Ref
) return Variable_Node_Id
919 (In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Project
921 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Package_Declaration
));
923 return In_Tree
.Project_Nodes
.Table
(Node
).Variables
;
924 end First_Variable_Of
;
926 --------------------------
927 -- First_With_Clause_Of --
928 --------------------------
930 function First_With_Clause_Of
931 (Node
: Project_Node_Id
;
932 In_Tree
: Project_Node_Tree_Ref
) return Project_Node_Id
938 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Project
);
939 return In_Tree
.Project_Nodes
.Table
(Node
).Field1
;
940 end First_With_Clause_Of
;
942 ------------------------
943 -- Follows_Empty_Line --
944 ------------------------
946 function Follows_Empty_Line
947 (Node
: Project_Node_Id
;
948 In_Tree
: Project_Node_Tree_Ref
) return Boolean is
953 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Comment
);
954 return In_Tree
.Project_Nodes
.Table
(Node
).Flag1
;
955 end Follows_Empty_Line
;
961 function Hash
(N
: Project_Node_Id
) return Header_Num
is
963 return Header_Num
(N
mod Project_Node_Id
(Header_Num
'Last));
970 procedure Initialize
(Tree
: Project_Node_Tree_Ref
) is
972 Project_Node_Table
.Init
(Tree
.Project_Nodes
);
973 Projects_Htable
.Reset
(Tree
.Projects_HT
);
976 -------------------------------
977 -- Is_Followed_By_Empty_Line --
978 -------------------------------
980 function Is_Followed_By_Empty_Line
981 (Node
: Project_Node_Id
;
982 In_Tree
: Project_Node_Tree_Ref
) return Boolean
988 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Comment
);
989 return In_Tree
.Project_Nodes
.Table
(Node
).Flag2
;
990 end Is_Followed_By_Empty_Line
;
992 ----------------------
993 -- Is_Extending_All --
994 ----------------------
996 function Is_Extending_All
997 (Node
: Project_Node_Id
;
998 In_Tree
: Project_Node_Tree_Ref
) return Boolean is
1003 (In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Project
1005 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_With_Clause
));
1006 return In_Tree
.Project_Nodes
.Table
(Node
).Flag2
;
1007 end Is_Extending_All
;
1009 -------------------------------------
1010 -- Imported_Or_Extended_Project_Of --
1011 -------------------------------------
1013 function Imported_Or_Extended_Project_Of
1014 (Project
: Project_Node_Id
;
1015 In_Tree
: Project_Node_Tree_Ref
;
1016 With_Name
: Name_Id
) return Project_Node_Id
1018 With_Clause
: Project_Node_Id
:=
1019 First_With_Clause_Of
(Project
, In_Tree
);
1020 Result
: Project_Node_Id
:= Empty_Node
;
1023 -- First check all the imported projects
1025 while With_Clause
/= Empty_Node
loop
1027 -- Only non limited imported project may be used as prefix
1028 -- of variable or attributes.
1030 Result
:= Non_Limited_Project_Node_Of
(With_Clause
, In_Tree
);
1031 exit when Result
/= Empty_Node
1032 and then Name_Of
(Result
, In_Tree
) = With_Name
;
1033 With_Clause
:= Next_With_Clause_Of
(With_Clause
, In_Tree
);
1036 -- If it is not an imported project, it might be the imported project
1038 if With_Clause
= Empty_Node
then
1041 (Project_Declaration_Of
(Project
, In_Tree
), In_Tree
);
1043 if Result
/= Empty_Node
1044 and then Name_Of
(Result
, In_Tree
) /= With_Name
1046 Result
:= Empty_Node
;
1051 end Imported_Or_Extended_Project_Of
;
1058 (Node
: Project_Node_Id
;
1059 In_Tree
: Project_Node_Tree_Ref
) return Project_Node_Kind
is
1061 pragma Assert
(Node
/= Empty_Node
);
1062 return In_Tree
.Project_Nodes
.Table
(Node
).Kind
;
1069 function Location_Of
1070 (Node
: Project_Node_Id
;
1071 In_Tree
: Project_Node_Tree_Ref
) return Source_Ptr
is
1073 pragma Assert
(Node
/= Empty_Node
);
1074 return In_Tree
.Project_Nodes
.Table
(Node
).Location
;
1082 (Node
: Project_Node_Id
;
1083 In_Tree
: Project_Node_Tree_Ref
) return Name_Id
is
1085 pragma Assert
(Node
/= Empty_Node
);
1086 return In_Tree
.Project_Nodes
.Table
(Node
).Name
;
1089 --------------------
1090 -- Next_Case_Item --
1091 --------------------
1093 function Next_Case_Item
1094 (Node
: Project_Node_Id
;
1095 In_Tree
: Project_Node_Tree_Ref
) return Project_Node_Id
1101 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Case_Item
);
1102 return In_Tree
.Project_Nodes
.Table
(Node
).Field3
;
1109 function Next_Comment
1110 (Node
: Project_Node_Id
;
1111 In_Tree
: Project_Node_Tree_Ref
) return Project_Node_Id
is
1116 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Comment
);
1117 return In_Tree
.Project_Nodes
.Table
(Node
).Comments
;
1120 ---------------------------
1121 -- Next_Declarative_Item --
1122 ---------------------------
1124 function Next_Declarative_Item
1125 (Node
: Project_Node_Id
;
1126 In_Tree
: Project_Node_Tree_Ref
) return Project_Node_Id
1132 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Declarative_Item
);
1133 return In_Tree
.Project_Nodes
.Table
(Node
).Field2
;
1134 end Next_Declarative_Item
;
1136 -----------------------------
1137 -- Next_Expression_In_List --
1138 -----------------------------
1140 function Next_Expression_In_List
1141 (Node
: Project_Node_Id
;
1142 In_Tree
: Project_Node_Tree_Ref
) return Project_Node_Id
1148 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Expression
);
1149 return In_Tree
.Project_Nodes
.Table
(Node
).Field2
;
1150 end Next_Expression_In_List
;
1152 -------------------------
1153 -- Next_Literal_String --
1154 -------------------------
1156 function Next_Literal_String
1157 (Node
: Project_Node_Id
;
1158 In_Tree
: Project_Node_Tree_Ref
)
1159 return Project_Node_Id
1165 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Literal_String
);
1166 return In_Tree
.Project_Nodes
.Table
(Node
).Field1
;
1167 end Next_Literal_String
;
1169 -----------------------------
1170 -- Next_Package_In_Project --
1171 -----------------------------
1173 function Next_Package_In_Project
1174 (Node
: Project_Node_Id
;
1175 In_Tree
: Project_Node_Tree_Ref
) return Project_Node_Id
1181 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Package_Declaration
);
1182 return In_Tree
.Project_Nodes
.Table
(Node
).Field3
;
1183 end Next_Package_In_Project
;
1185 ----------------------
1186 -- Next_String_Type --
1187 ----------------------
1189 function Next_String_Type
1190 (Node
: Project_Node_Id
;
1191 In_Tree
: Project_Node_Tree_Ref
)
1192 return Project_Node_Id
1198 In_Tree
.Project_Nodes
.Table
(Node
).Kind
=
1199 N_String_Type_Declaration
);
1200 return In_Tree
.Project_Nodes
.Table
(Node
).Field2
;
1201 end Next_String_Type
;
1208 (Node
: Project_Node_Id
;
1209 In_Tree
: Project_Node_Tree_Ref
) return Project_Node_Id
1215 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Term
);
1216 return In_Tree
.Project_Nodes
.Table
(Node
).Field2
;
1223 function Next_Variable
1224 (Node
: Project_Node_Id
;
1225 In_Tree
: Project_Node_Tree_Ref
)
1226 return Project_Node_Id
1232 (In_Tree
.Project_Nodes
.Table
(Node
).Kind
=
1233 N_Typed_Variable_Declaration
1235 In_Tree
.Project_Nodes
.Table
(Node
).Kind
=
1236 N_Variable_Declaration
));
1238 return In_Tree
.Project_Nodes
.Table
(Node
).Field3
;
1241 -------------------------
1242 -- Next_With_Clause_Of --
1243 -------------------------
1245 function Next_With_Clause_Of
1246 (Node
: Project_Node_Id
;
1247 In_Tree
: Project_Node_Tree_Ref
) return Project_Node_Id
1253 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_With_Clause
);
1254 return In_Tree
.Project_Nodes
.Table
(Node
).Field2
;
1255 end Next_With_Clause_Of
;
1257 ---------------------------------
1258 -- Non_Limited_Project_Node_Of --
1259 ---------------------------------
1261 function Non_Limited_Project_Node_Of
1262 (Node
: Project_Node_Id
;
1263 In_Tree
: Project_Node_Tree_Ref
) return Project_Node_Id
1269 (In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_With_Clause
));
1270 return In_Tree
.Project_Nodes
.Table
(Node
).Field3
;
1271 end Non_Limited_Project_Node_Of
;
1277 function Package_Id_Of
1278 (Node
: Project_Node_Id
;
1279 In_Tree
: Project_Node_Tree_Ref
) return Package_Node_Id
1285 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Package_Declaration
);
1286 return In_Tree
.Project_Nodes
.Table
(Node
).Pkg_Id
;
1289 ---------------------
1290 -- Package_Node_Of --
1291 ---------------------
1293 function Package_Node_Of
1294 (Node
: Project_Node_Id
;
1295 In_Tree
: Project_Node_Tree_Ref
) return Project_Node_Id
1301 (In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Variable_Reference
1303 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Attribute_Reference
));
1304 return In_Tree
.Project_Nodes
.Table
(Node
).Field2
;
1305 end Package_Node_Of
;
1311 function Path_Name_Of
1312 (Node
: Project_Node_Id
;
1313 In_Tree
: Project_Node_Tree_Ref
) return Name_Id
1319 (In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Project
1321 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_With_Clause
));
1322 return In_Tree
.Project_Nodes
.Table
(Node
).Path_Name
;
1325 ----------------------------
1326 -- Project_Declaration_Of --
1327 ----------------------------
1329 function Project_Declaration_Of
1330 (Node
: Project_Node_Id
;
1331 In_Tree
: Project_Node_Tree_Ref
) return Project_Node_Id
1337 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Project
);
1338 return In_Tree
.Project_Nodes
.Table
(Node
).Field2
;
1339 end Project_Declaration_Of
;
1341 -------------------------------------------
1342 -- Project_File_Includes_Unkept_Comments --
1343 -------------------------------------------
1345 function Project_File_Includes_Unkept_Comments
1346 (Node
: Project_Node_Id
;
1347 In_Tree
: Project_Node_Tree_Ref
) return Boolean
1349 Declaration
: constant Project_Node_Id
:=
1350 Project_Declaration_Of
(Node
, In_Tree
);
1352 return In_Tree
.Project_Nodes
.Table
(Declaration
).Flag1
;
1353 end Project_File_Includes_Unkept_Comments
;
1355 ---------------------
1356 -- Project_Node_Of --
1357 ---------------------
1359 function Project_Node_Of
1360 (Node
: Project_Node_Id
;
1361 In_Tree
: Project_Node_Tree_Ref
) return Project_Node_Id
1367 (In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_With_Clause
1369 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Variable_Reference
1371 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Attribute_Reference
));
1372 return In_Tree
.Project_Nodes
.Table
(Node
).Field1
;
1373 end Project_Node_Of
;
1375 -----------------------------------
1376 -- Project_Of_Renamed_Package_Of --
1377 -----------------------------------
1379 function Project_Of_Renamed_Package_Of
1380 (Node
: Project_Node_Id
;
1381 In_Tree
: Project_Node_Tree_Ref
) return Project_Node_Id
1387 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Package_Declaration
);
1388 return In_Tree
.Project_Nodes
.Table
(Node
).Field1
;
1389 end Project_Of_Renamed_Package_Of
;
1391 --------------------------
1392 -- Remove_Next_End_Node --
1393 --------------------------
1395 procedure Remove_Next_End_Node
is
1397 Next_End_Nodes
.Decrement_Last
;
1398 end Remove_Next_End_Node
;
1404 procedure Reset_State
is
1406 End_Of_Line_Node
:= Empty_Node
;
1407 Previous_Line_Node
:= Empty_Node
;
1408 Previous_End_Node
:= Empty_Node
;
1409 Unkept_Comments
:= False;
1410 Comments
.Set_Last
(0);
1417 procedure Restore
(S
: in Comment_State
) is
1419 End_Of_Line_Node
:= S
.End_Of_Line_Node
;
1420 Previous_Line_Node
:= S
.Previous_Line_Node
;
1421 Previous_End_Node
:= S
.Previous_End_Node
;
1422 Next_End_Nodes
.Set_Last
(0);
1423 Unkept_Comments
:= S
.Unkept_Comments
;
1425 Comments
.Set_Last
(0);
1427 for J
in S
.Comments
'Range loop
1428 Comments
.Increment_Last
;
1429 Comments
.Table
(Comments
.Last
) := S
.Comments
(J
);
1437 procedure Save
(S
: out Comment_State
) is
1438 Cmts
: constant Comments_Ptr
:= new Comment_Array
(1 .. Comments
.Last
);
1441 for J
in 1 .. Comments
.Last
loop
1442 Cmts
(J
) := Comments
.Table
(J
);
1446 (End_Of_Line_Node
=> End_Of_Line_Node
,
1447 Previous_Line_Node
=> Previous_Line_Node
,
1448 Previous_End_Node
=> Previous_End_Node
,
1449 Unkept_Comments
=> Unkept_Comments
,
1457 procedure Scan
(In_Tree
: Project_Node_Tree_Ref
) is
1458 Empty_Line
: Boolean := False;
1461 -- If there are comments, then they will not be kept. Set the flag and
1462 -- clear the comments.
1464 if Comments
.Last
> 0 then
1465 Unkept_Comments
:= True;
1466 Comments
.Set_Last
(0);
1469 -- Loop until a token other that End_Of_Line or Comment is found
1472 Prj
.Err
.Scanner
.Scan
;
1475 when Tok_End_Of_Line
=>
1476 if Prev_Token
= Tok_End_Of_Line
then
1479 if Comments
.Last
> 0 then
1480 Comments
.Table
(Comments
.Last
).Is_Followed_By_Empty_Line
1486 -- If this is a line comment, add it to the comment table
1488 if Prev_Token
= Tok_End_Of_Line
1489 or else Prev_Token
= No_Token
1491 Comments
.Increment_Last
;
1492 Comments
.Table
(Comments
.Last
) :=
1493 (Value
=> Comment_Id
,
1494 Follows_Empty_Line
=> Empty_Line
,
1495 Is_Followed_By_Empty_Line
=> False);
1497 -- Otherwise, it is an end of line comment. If there is
1498 -- an end of line node specified, associate the comment with
1501 elsif End_Of_Line_Node
/= Empty_Node
then
1503 Zones
: constant Project_Node_Id
:=
1504 Comment_Zones_Of
(End_Of_Line_Node
, In_Tree
);
1506 In_Tree
.Project_Nodes
.Table
(Zones
).Value
:= Comment_Id
;
1509 -- Otherwise, this end of line node cannot be kept
1512 Unkept_Comments
:= True;
1513 Comments
.Set_Last
(0);
1516 Empty_Line
:= False;
1519 -- If there are comments, where the first comment is not
1520 -- following an empty line, put the initial uninterrupted
1521 -- comment zone with the node of the preceding line (either
1522 -- a Previous_Line or a Previous_End node), if any.
1524 if Comments
.Last
> 0 and then
1525 not Comments
.Table
(1).Follows_Empty_Line
then
1526 if Previous_Line_Node
/= Empty_Node
then
1528 (To
=> Previous_Line_Node
,
1530 In_Tree
=> In_Tree
);
1532 elsif Previous_End_Node
/= Empty_Node
then
1534 (To
=> Previous_End_Node
,
1536 In_Tree
=> In_Tree
);
1540 -- If there are still comments and the token is "end", then
1541 -- put these comments with the Next_End node, if any;
1542 -- otherwise, these comments cannot be kept. Always clear
1545 if Comments
.Last
> 0 and then Token
= Tok_End
then
1546 if Next_End_Nodes
.Last
> 0 then
1548 (To
=> Next_End_Nodes
.Table
(Next_End_Nodes
.Last
),
1549 Where
=> Before_End
,
1550 In_Tree
=> In_Tree
);
1553 Unkept_Comments
:= True;
1556 Comments
.Set_Last
(0);
1559 -- Reset the End_Of_Line, Previous_Line and Previous_End nodes
1560 -- so that they are not used again.
1562 End_Of_Line_Node
:= Empty_Node
;
1563 Previous_Line_Node
:= Empty_Node
;
1564 Previous_End_Node
:= Empty_Node
;
1573 ------------------------------------
1574 -- Set_Associative_Array_Index_Of --
1575 ------------------------------------
1577 procedure Set_Associative_Array_Index_Of
1578 (Node
: Project_Node_Id
;
1579 In_Tree
: Project_Node_Tree_Ref
;
1586 (In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Attribute_Declaration
1588 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Attribute_Reference
));
1589 In_Tree
.Project_Nodes
.Table
(Node
).Value
:= To
;
1590 end Set_Associative_Array_Index_Of
;
1592 --------------------------------
1593 -- Set_Associative_Package_Of --
1594 --------------------------------
1596 procedure Set_Associative_Package_Of
1597 (Node
: Project_Node_Id
;
1598 In_Tree
: Project_Node_Tree_Ref
;
1599 To
: Project_Node_Id
)
1605 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Attribute_Declaration
);
1606 In_Tree
.Project_Nodes
.Table
(Node
).Field3
:= To
;
1607 end Set_Associative_Package_Of
;
1609 --------------------------------
1610 -- Set_Associative_Project_Of --
1611 --------------------------------
1613 procedure Set_Associative_Project_Of
1614 (Node
: Project_Node_Id
;
1615 In_Tree
: Project_Node_Tree_Ref
;
1616 To
: Project_Node_Id
)
1622 (In_Tree
.Project_Nodes
.Table
(Node
).Kind
=
1623 N_Attribute_Declaration
));
1624 In_Tree
.Project_Nodes
.Table
(Node
).Field2
:= To
;
1625 end Set_Associative_Project_Of
;
1627 --------------------------
1628 -- Set_Case_Insensitive --
1629 --------------------------
1631 procedure Set_Case_Insensitive
1632 (Node
: Project_Node_Id
;
1633 In_Tree
: Project_Node_Tree_Ref
;
1640 (In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Attribute_Declaration
1642 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Attribute_Reference
));
1643 In_Tree
.Project_Nodes
.Table
(Node
).Flag1
:= To
;
1644 end Set_Case_Insensitive
;
1646 ------------------------------------
1647 -- Set_Case_Variable_Reference_Of --
1648 ------------------------------------
1650 procedure Set_Case_Variable_Reference_Of
1651 (Node
: Project_Node_Id
;
1652 In_Tree
: Project_Node_Tree_Ref
;
1653 To
: Project_Node_Id
)
1659 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Case_Construction
);
1660 In_Tree
.Project_Nodes
.Table
(Node
).Field1
:= To
;
1661 end Set_Case_Variable_Reference_Of
;
1663 ---------------------------
1664 -- Set_Current_Item_Node --
1665 ---------------------------
1667 procedure Set_Current_Item_Node
1668 (Node
: Project_Node_Id
;
1669 In_Tree
: Project_Node_Tree_Ref
;
1670 To
: Project_Node_Id
)
1676 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Declarative_Item
);
1677 In_Tree
.Project_Nodes
.Table
(Node
).Field1
:= To
;
1678 end Set_Current_Item_Node
;
1680 ----------------------
1681 -- Set_Current_Term --
1682 ----------------------
1684 procedure Set_Current_Term
1685 (Node
: Project_Node_Id
;
1686 In_Tree
: Project_Node_Tree_Ref
;
1687 To
: Project_Node_Id
)
1693 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Term
);
1694 In_Tree
.Project_Nodes
.Table
(Node
).Field1
:= To
;
1695 end Set_Current_Term
;
1697 ----------------------
1698 -- Set_Directory_Of --
1699 ----------------------
1701 procedure Set_Directory_Of
1702 (Node
: Project_Node_Id
;
1703 In_Tree
: Project_Node_Tree_Ref
;
1710 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Project
);
1711 In_Tree
.Project_Nodes
.Table
(Node
).Directory
:= To
;
1712 end Set_Directory_Of
;
1714 ---------------------
1715 -- Set_End_Of_Line --
1716 ---------------------
1718 procedure Set_End_Of_Line
(To
: Project_Node_Id
) is
1720 End_Of_Line_Node
:= To
;
1721 end Set_End_Of_Line
;
1723 ----------------------------
1724 -- Set_Expression_Kind_Of --
1725 ----------------------------
1727 procedure Set_Expression_Kind_Of
1728 (Node
: Project_Node_Id
;
1729 In_Tree
: Project_Node_Tree_Ref
;
1736 (In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Literal_String
1738 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Attribute_Declaration
1740 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Variable_Declaration
1742 In_Tree
.Project_Nodes
.Table
(Node
).Kind
=
1743 N_Typed_Variable_Declaration
1745 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Package_Declaration
1747 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Expression
1749 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Term
1751 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Variable_Reference
1753 In_Tree
.Project_Nodes
.Table
(Node
).Kind
=
1754 N_Attribute_Reference
));
1755 In_Tree
.Project_Nodes
.Table
(Node
).Expr_Kind
:= To
;
1756 end Set_Expression_Kind_Of
;
1758 -----------------------
1759 -- Set_Expression_Of --
1760 -----------------------
1762 procedure Set_Expression_Of
1763 (Node
: Project_Node_Id
;
1764 In_Tree
: Project_Node_Tree_Ref
;
1765 To
: Project_Node_Id
)
1771 (In_Tree
.Project_Nodes
.Table
(Node
).Kind
=
1772 N_Attribute_Declaration
1774 In_Tree
.Project_Nodes
.Table
(Node
).Kind
=
1775 N_Typed_Variable_Declaration
1777 In_Tree
.Project_Nodes
.Table
(Node
).Kind
=
1778 N_Variable_Declaration
));
1779 In_Tree
.Project_Nodes
.Table
(Node
).Field1
:= To
;
1780 end Set_Expression_Of
;
1782 -------------------------------
1783 -- Set_External_Reference_Of --
1784 -------------------------------
1786 procedure Set_External_Reference_Of
1787 (Node
: Project_Node_Id
;
1788 In_Tree
: Project_Node_Tree_Ref
;
1789 To
: Project_Node_Id
)
1795 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_External_Value
);
1796 In_Tree
.Project_Nodes
.Table
(Node
).Field1
:= To
;
1797 end Set_External_Reference_Of
;
1799 -----------------------------
1800 -- Set_External_Default_Of --
1801 -----------------------------
1803 procedure Set_External_Default_Of
1804 (Node
: Project_Node_Id
;
1805 In_Tree
: Project_Node_Tree_Ref
;
1806 To
: Project_Node_Id
)
1812 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_External_Value
);
1813 In_Tree
.Project_Nodes
.Table
(Node
).Field2
:= To
;
1814 end Set_External_Default_Of
;
1816 ----------------------------
1817 -- Set_First_Case_Item_Of --
1818 ----------------------------
1820 procedure Set_First_Case_Item_Of
1821 (Node
: Project_Node_Id
;
1822 In_Tree
: Project_Node_Tree_Ref
;
1823 To
: Project_Node_Id
)
1829 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Case_Construction
);
1830 In_Tree
.Project_Nodes
.Table
(Node
).Field2
:= To
;
1831 end Set_First_Case_Item_Of
;
1833 -------------------------
1834 -- Set_First_Choice_Of --
1835 -------------------------
1837 procedure Set_First_Choice_Of
1838 (Node
: Project_Node_Id
;
1839 In_Tree
: Project_Node_Tree_Ref
;
1840 To
: Project_Node_Id
)
1846 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Case_Item
);
1847 In_Tree
.Project_Nodes
.Table
(Node
).Field1
:= To
;
1848 end Set_First_Choice_Of
;
1850 -----------------------------
1851 -- Set_First_Comment_After --
1852 -----------------------------
1854 procedure Set_First_Comment_After
1855 (Node
: Project_Node_Id
;
1856 In_Tree
: Project_Node_Tree_Ref
;
1857 To
: Project_Node_Id
)
1859 Zone
: constant Project_Node_Id
:= Comment_Zones_Of
(Node
, In_Tree
);
1861 In_Tree
.Project_Nodes
.Table
(Zone
).Field2
:= To
;
1862 end Set_First_Comment_After
;
1864 ---------------------------------
1865 -- Set_First_Comment_After_End --
1866 ---------------------------------
1868 procedure Set_First_Comment_After_End
1869 (Node
: Project_Node_Id
;
1870 In_Tree
: Project_Node_Tree_Ref
;
1871 To
: Project_Node_Id
)
1873 Zone
: constant Project_Node_Id
:= Comment_Zones_Of
(Node
, In_Tree
);
1875 In_Tree
.Project_Nodes
.Table
(Zone
).Comments
:= To
;
1876 end Set_First_Comment_After_End
;
1878 ------------------------------
1879 -- Set_First_Comment_Before --
1880 ------------------------------
1882 procedure Set_First_Comment_Before
1883 (Node
: Project_Node_Id
;
1884 In_Tree
: Project_Node_Tree_Ref
;
1885 To
: Project_Node_Id
)
1888 Zone
: constant Project_Node_Id
:= Comment_Zones_Of
(Node
, In_Tree
);
1890 In_Tree
.Project_Nodes
.Table
(Zone
).Field1
:= To
;
1891 end Set_First_Comment_Before
;
1893 ----------------------------------
1894 -- Set_First_Comment_Before_End --
1895 ----------------------------------
1897 procedure Set_First_Comment_Before_End
1898 (Node
: Project_Node_Id
;
1899 In_Tree
: Project_Node_Tree_Ref
;
1900 To
: Project_Node_Id
)
1902 Zone
: constant Project_Node_Id
:= Comment_Zones_Of
(Node
, In_Tree
);
1904 In_Tree
.Project_Nodes
.Table
(Zone
).Field2
:= To
;
1905 end Set_First_Comment_Before_End
;
1907 ------------------------
1908 -- Set_Next_Case_Item --
1909 ------------------------
1911 procedure Set_Next_Case_Item
1912 (Node
: Project_Node_Id
;
1913 In_Tree
: Project_Node_Tree_Ref
;
1914 To
: Project_Node_Id
)
1920 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Case_Item
);
1921 In_Tree
.Project_Nodes
.Table
(Node
).Field3
:= To
;
1922 end Set_Next_Case_Item
;
1924 ----------------------
1925 -- Set_Next_Comment --
1926 ----------------------
1928 procedure Set_Next_Comment
1929 (Node
: Project_Node_Id
;
1930 In_Tree
: Project_Node_Tree_Ref
;
1931 To
: Project_Node_Id
)
1937 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Comment
);
1938 In_Tree
.Project_Nodes
.Table
(Node
).Comments
:= To
;
1939 end Set_Next_Comment
;
1941 -----------------------------------
1942 -- Set_First_Declarative_Item_Of --
1943 -----------------------------------
1945 procedure Set_First_Declarative_Item_Of
1946 (Node
: Project_Node_Id
;
1947 In_Tree
: Project_Node_Tree_Ref
;
1948 To
: Project_Node_Id
)
1954 (In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Project_Declaration
1956 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Case_Item
1958 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Package_Declaration
));
1960 if In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Project_Declaration
then
1961 In_Tree
.Project_Nodes
.Table
(Node
).Field1
:= To
;
1963 In_Tree
.Project_Nodes
.Table
(Node
).Field2
:= To
;
1965 end Set_First_Declarative_Item_Of
;
1967 ----------------------------------
1968 -- Set_First_Expression_In_List --
1969 ----------------------------------
1971 procedure Set_First_Expression_In_List
1972 (Node
: Project_Node_Id
;
1973 In_Tree
: Project_Node_Tree_Ref
;
1974 To
: Project_Node_Id
)
1980 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Literal_String_List
);
1981 In_Tree
.Project_Nodes
.Table
(Node
).Field1
:= To
;
1982 end Set_First_Expression_In_List
;
1984 ------------------------------
1985 -- Set_First_Literal_String --
1986 ------------------------------
1988 procedure Set_First_Literal_String
1989 (Node
: Project_Node_Id
;
1990 In_Tree
: Project_Node_Tree_Ref
;
1991 To
: Project_Node_Id
)
1997 In_Tree
.Project_Nodes
.Table
(Node
).Kind
=
1998 N_String_Type_Declaration
);
1999 In_Tree
.Project_Nodes
.Table
(Node
).Field1
:= To
;
2000 end Set_First_Literal_String
;
2002 --------------------------
2003 -- Set_First_Package_Of --
2004 --------------------------
2006 procedure Set_First_Package_Of
2007 (Node
: Project_Node_Id
;
2008 In_Tree
: Project_Node_Tree_Ref
;
2009 To
: Package_Declaration_Id
)
2015 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Project
);
2016 In_Tree
.Project_Nodes
.Table
(Node
).Packages
:= To
;
2017 end Set_First_Package_Of
;
2019 ------------------------------
2020 -- Set_First_String_Type_Of --
2021 ------------------------------
2023 procedure Set_First_String_Type_Of
2024 (Node
: Project_Node_Id
;
2025 In_Tree
: Project_Node_Tree_Ref
;
2026 To
: Project_Node_Id
)
2032 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Project
);
2033 In_Tree
.Project_Nodes
.Table
(Node
).Field3
:= To
;
2034 end Set_First_String_Type_Of
;
2036 --------------------
2037 -- Set_First_Term --
2038 --------------------
2040 procedure Set_First_Term
2041 (Node
: Project_Node_Id
;
2042 In_Tree
: Project_Node_Tree_Ref
;
2043 To
: Project_Node_Id
)
2049 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Expression
);
2050 In_Tree
.Project_Nodes
.Table
(Node
).Field1
:= To
;
2053 ---------------------------
2054 -- Set_First_Variable_Of --
2055 ---------------------------
2057 procedure Set_First_Variable_Of
2058 (Node
: Project_Node_Id
;
2059 In_Tree
: Project_Node_Tree_Ref
;
2060 To
: Variable_Node_Id
)
2066 (In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Project
2068 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Package_Declaration
));
2069 In_Tree
.Project_Nodes
.Table
(Node
).Variables
:= To
;
2070 end Set_First_Variable_Of
;
2072 ------------------------------
2073 -- Set_First_With_Clause_Of --
2074 ------------------------------
2076 procedure Set_First_With_Clause_Of
2077 (Node
: Project_Node_Id
;
2078 In_Tree
: Project_Node_Tree_Ref
;
2079 To
: Project_Node_Id
)
2085 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Project
);
2086 In_Tree
.Project_Nodes
.Table
(Node
).Field1
:= To
;
2087 end Set_First_With_Clause_Of
;
2089 --------------------------
2090 -- Set_Is_Extending_All --
2091 --------------------------
2093 procedure Set_Is_Extending_All
2094 (Node
: Project_Node_Id
;
2095 In_Tree
: Project_Node_Tree_Ref
)
2101 (In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Project
2103 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_With_Clause
));
2104 In_Tree
.Project_Nodes
.Table
(Node
).Flag2
:= True;
2105 end Set_Is_Extending_All
;
2111 procedure Set_Kind_Of
2112 (Node
: Project_Node_Id
;
2113 In_Tree
: Project_Node_Tree_Ref
;
2114 To
: Project_Node_Kind
)
2117 pragma Assert
(Node
/= Empty_Node
);
2118 In_Tree
.Project_Nodes
.Table
(Node
).Kind
:= To
;
2121 ---------------------
2122 -- Set_Location_Of --
2123 ---------------------
2125 procedure Set_Location_Of
2126 (Node
: Project_Node_Id
;
2127 In_Tree
: Project_Node_Tree_Ref
;
2131 pragma Assert
(Node
/= Empty_Node
);
2132 In_Tree
.Project_Nodes
.Table
(Node
).Location
:= To
;
2133 end Set_Location_Of
;
2135 -----------------------------
2136 -- Set_Extended_Project_Of --
2137 -----------------------------
2139 procedure Set_Extended_Project_Of
2140 (Node
: Project_Node_Id
;
2141 In_Tree
: Project_Node_Tree_Ref
;
2142 To
: Project_Node_Id
)
2148 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Project_Declaration
);
2149 In_Tree
.Project_Nodes
.Table
(Node
).Field2
:= To
;
2150 end Set_Extended_Project_Of
;
2152 ----------------------------------
2153 -- Set_Extended_Project_Path_Of --
2154 ----------------------------------
2156 procedure Set_Extended_Project_Path_Of
2157 (Node
: Project_Node_Id
;
2158 In_Tree
: Project_Node_Tree_Ref
;
2165 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Project
);
2166 In_Tree
.Project_Nodes
.Table
(Node
).Value
:= To
;
2167 end Set_Extended_Project_Path_Of
;
2169 ------------------------------
2170 -- Set_Extending_Project_Of --
2171 ------------------------------
2173 procedure Set_Extending_Project_Of
2174 (Node
: Project_Node_Id
;
2175 In_Tree
: Project_Node_Tree_Ref
;
2176 To
: Project_Node_Id
)
2182 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Project_Declaration
);
2183 In_Tree
.Project_Nodes
.Table
(Node
).Field3
:= To
;
2184 end Set_Extending_Project_Of
;
2190 procedure Set_Name_Of
2191 (Node
: Project_Node_Id
;
2192 In_Tree
: Project_Node_Tree_Ref
;
2196 pragma Assert
(Node
/= Empty_Node
);
2197 In_Tree
.Project_Nodes
.Table
(Node
).Name
:= To
;
2200 -------------------------------
2201 -- Set_Next_Declarative_Item --
2202 -------------------------------
2204 procedure Set_Next_Declarative_Item
2205 (Node
: Project_Node_Id
;
2206 In_Tree
: Project_Node_Tree_Ref
;
2207 To
: Project_Node_Id
)
2213 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Declarative_Item
);
2214 In_Tree
.Project_Nodes
.Table
(Node
).Field2
:= To
;
2215 end Set_Next_Declarative_Item
;
2217 -----------------------
2218 -- Set_Next_End_Node --
2219 -----------------------
2221 procedure Set_Next_End_Node
(To
: Project_Node_Id
) is
2223 Next_End_Nodes
.Increment_Last
;
2224 Next_End_Nodes
.Table
(Next_End_Nodes
.Last
) := To
;
2225 end Set_Next_End_Node
;
2227 ---------------------------------
2228 -- Set_Next_Expression_In_List --
2229 ---------------------------------
2231 procedure Set_Next_Expression_In_List
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_Expression
);
2241 In_Tree
.Project_Nodes
.Table
(Node
).Field2
:= To
;
2242 end Set_Next_Expression_In_List
;
2244 -----------------------------
2245 -- Set_Next_Literal_String --
2246 -----------------------------
2248 procedure Set_Next_Literal_String
2249 (Node
: Project_Node_Id
;
2250 In_Tree
: Project_Node_Tree_Ref
;
2251 To
: Project_Node_Id
)
2257 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Literal_String
);
2258 In_Tree
.Project_Nodes
.Table
(Node
).Field1
:= To
;
2259 end Set_Next_Literal_String
;
2261 ---------------------------------
2262 -- Set_Next_Package_In_Project --
2263 ---------------------------------
2265 procedure Set_Next_Package_In_Project
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_Package_Declaration
);
2275 In_Tree
.Project_Nodes
.Table
(Node
).Field3
:= To
;
2276 end Set_Next_Package_In_Project
;
2278 --------------------------
2279 -- Set_Next_String_Type --
2280 --------------------------
2282 procedure Set_Next_String_Type
2283 (Node
: Project_Node_Id
;
2284 In_Tree
: Project_Node_Tree_Ref
;
2285 To
: Project_Node_Id
)
2291 In_Tree
.Project_Nodes
.Table
(Node
).Kind
=
2292 N_String_Type_Declaration
);
2293 In_Tree
.Project_Nodes
.Table
(Node
).Field2
:= To
;
2294 end Set_Next_String_Type
;
2300 procedure Set_Next_Term
2301 (Node
: Project_Node_Id
;
2302 In_Tree
: Project_Node_Tree_Ref
;
2303 To
: Project_Node_Id
)
2309 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Term
);
2310 In_Tree
.Project_Nodes
.Table
(Node
).Field2
:= To
;
2313 -----------------------
2314 -- Set_Next_Variable --
2315 -----------------------
2317 procedure Set_Next_Variable
2318 (Node
: Project_Node_Id
;
2319 In_Tree
: Project_Node_Tree_Ref
;
2320 To
: Project_Node_Id
)
2326 (In_Tree
.Project_Nodes
.Table
(Node
).Kind
=
2327 N_Typed_Variable_Declaration
2329 In_Tree
.Project_Nodes
.Table
(Node
).Kind
=
2330 N_Variable_Declaration
));
2331 In_Tree
.Project_Nodes
.Table
(Node
).Field3
:= To
;
2332 end Set_Next_Variable
;
2334 -----------------------------
2335 -- Set_Next_With_Clause_Of --
2336 -----------------------------
2338 procedure Set_Next_With_Clause_Of
2339 (Node
: Project_Node_Id
;
2340 In_Tree
: Project_Node_Tree_Ref
;
2341 To
: Project_Node_Id
)
2347 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_With_Clause
);
2348 In_Tree
.Project_Nodes
.Table
(Node
).Field2
:= To
;
2349 end Set_Next_With_Clause_Of
;
2351 -----------------------
2352 -- Set_Package_Id_Of --
2353 -----------------------
2355 procedure Set_Package_Id_Of
2356 (Node
: Project_Node_Id
;
2357 In_Tree
: Project_Node_Tree_Ref
;
2358 To
: Package_Node_Id
)
2364 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Package_Declaration
);
2365 In_Tree
.Project_Nodes
.Table
(Node
).Pkg_Id
:= To
;
2366 end Set_Package_Id_Of
;
2368 -------------------------
2369 -- Set_Package_Node_Of --
2370 -------------------------
2372 procedure Set_Package_Node_Of
2373 (Node
: Project_Node_Id
;
2374 In_Tree
: Project_Node_Tree_Ref
;
2375 To
: Project_Node_Id
)
2381 (In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Variable_Reference
2383 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Attribute_Reference
));
2384 In_Tree
.Project_Nodes
.Table
(Node
).Field2
:= To
;
2385 end Set_Package_Node_Of
;
2387 ----------------------
2388 -- Set_Path_Name_Of --
2389 ----------------------
2391 procedure Set_Path_Name_Of
2392 (Node
: Project_Node_Id
;
2393 In_Tree
: Project_Node_Tree_Ref
;
2400 (In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Project
2402 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_With_Clause
));
2403 In_Tree
.Project_Nodes
.Table
(Node
).Path_Name
:= To
;
2404 end Set_Path_Name_Of
;
2406 ---------------------------
2407 -- Set_Previous_End_Node --
2408 ---------------------------
2409 procedure Set_Previous_End_Node
(To
: Project_Node_Id
) is
2411 Previous_End_Node
:= To
;
2412 end Set_Previous_End_Node
;
2414 ----------------------------
2415 -- Set_Previous_Line_Node --
2416 ----------------------------
2418 procedure Set_Previous_Line_Node
(To
: Project_Node_Id
) is
2420 Previous_Line_Node
:= To
;
2421 end Set_Previous_Line_Node
;
2423 --------------------------------
2424 -- Set_Project_Declaration_Of --
2425 --------------------------------
2427 procedure Set_Project_Declaration_Of
2428 (Node
: Project_Node_Id
;
2429 In_Tree
: Project_Node_Tree_Ref
;
2430 To
: Project_Node_Id
)
2436 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Project
);
2437 In_Tree
.Project_Nodes
.Table
(Node
).Field2
:= To
;
2438 end Set_Project_Declaration_Of
;
2440 -----------------------------------------------
2441 -- Set_Project_File_Includes_Unkept_Comments --
2442 -----------------------------------------------
2444 procedure Set_Project_File_Includes_Unkept_Comments
2445 (Node
: Project_Node_Id
;
2446 In_Tree
: Project_Node_Tree_Ref
;
2449 Declaration
: constant Project_Node_Id
:=
2450 Project_Declaration_Of
(Node
, In_Tree
);
2452 In_Tree
.Project_Nodes
.Table
(Declaration
).Flag1
:= To
;
2453 end Set_Project_File_Includes_Unkept_Comments
;
2455 -------------------------
2456 -- Set_Project_Node_Of --
2457 -------------------------
2459 procedure Set_Project_Node_Of
2460 (Node
: Project_Node_Id
;
2461 In_Tree
: Project_Node_Tree_Ref
;
2462 To
: Project_Node_Id
;
2463 Limited_With
: Boolean := False)
2469 (In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_With_Clause
2471 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Variable_Reference
2473 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Attribute_Reference
));
2474 In_Tree
.Project_Nodes
.Table
(Node
).Field1
:= To
;
2476 if In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_With_Clause
2477 and then not Limited_With
2479 In_Tree
.Project_Nodes
.Table
(Node
).Field3
:= To
;
2481 end Set_Project_Node_Of
;
2483 ---------------------------------------
2484 -- Set_Project_Of_Renamed_Package_Of --
2485 ---------------------------------------
2487 procedure Set_Project_Of_Renamed_Package_Of
2488 (Node
: Project_Node_Id
;
2489 In_Tree
: Project_Node_Tree_Ref
;
2490 To
: Project_Node_Id
)
2496 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Package_Declaration
);
2497 In_Tree
.Project_Nodes
.Table
(Node
).Field1
:= To
;
2498 end Set_Project_Of_Renamed_Package_Of
;
2500 -------------------------
2501 -- Set_Source_Index_Of --
2502 -------------------------
2504 procedure Set_Source_Index_Of
2505 (Node
: Project_Node_Id
;
2506 In_Tree
: Project_Node_Tree_Ref
;
2513 (In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Literal_String
2515 In_Tree
.Project_Nodes
.Table
(Node
).Kind
=
2516 N_Attribute_Declaration
));
2517 In_Tree
.Project_Nodes
.Table
(Node
).Src_Index
:= To
;
2518 end Set_Source_Index_Of
;
2520 ------------------------
2521 -- Set_String_Type_Of --
2522 ------------------------
2524 procedure Set_String_Type_Of
2525 (Node
: Project_Node_Id
;
2526 In_Tree
: Project_Node_Tree_Ref
;
2527 To
: Project_Node_Id
)
2533 (In_Tree
.Project_Nodes
.Table
(Node
).Kind
=
2534 N_Variable_Reference
2536 In_Tree
.Project_Nodes
.Table
(Node
).Kind
=
2537 N_Typed_Variable_Declaration
)
2539 In_Tree
.Project_Nodes
.Table
(To
).Kind
= N_String_Type_Declaration
);
2541 if In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Variable_Reference
then
2542 In_Tree
.Project_Nodes
.Table
(Node
).Field3
:= To
;
2544 In_Tree
.Project_Nodes
.Table
(Node
).Field2
:= To
;
2546 end Set_String_Type_Of
;
2548 -------------------------
2549 -- Set_String_Value_Of --
2550 -------------------------
2552 procedure Set_String_Value_Of
2553 (Node
: Project_Node_Id
;
2554 In_Tree
: Project_Node_Tree_Ref
;
2561 (In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_With_Clause
2563 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Comment
2565 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Literal_String
));
2566 In_Tree
.Project_Nodes
.Table
(Node
).Value
:= To
;
2567 end Set_String_Value_Of
;
2569 ---------------------
2570 -- Source_Index_Of --
2571 ---------------------
2573 function Source_Index_Of
2574 (Node
: Project_Node_Id
;
2575 In_Tree
: Project_Node_Tree_Ref
) return Int
2581 (In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Literal_String
2583 In_Tree
.Project_Nodes
.Table
(Node
).Kind
=
2584 N_Attribute_Declaration
));
2585 return In_Tree
.Project_Nodes
.Table
(Node
).Src_Index
;
2586 end Source_Index_Of
;
2588 --------------------
2589 -- String_Type_Of --
2590 --------------------
2592 function String_Type_Of
2593 (Node
: Project_Node_Id
;
2594 In_Tree
: Project_Node_Tree_Ref
) return Project_Node_Id
2600 (In_Tree
.Project_Nodes
.Table
(Node
).Kind
=
2601 N_Variable_Reference
2603 In_Tree
.Project_Nodes
.Table
(Node
).Kind
=
2604 N_Typed_Variable_Declaration
));
2606 if In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Variable_Reference
then
2607 return In_Tree
.Project_Nodes
.Table
(Node
).Field3
;
2609 return In_Tree
.Project_Nodes
.Table
(Node
).Field2
;
2613 ---------------------
2614 -- String_Value_Of --
2615 ---------------------
2617 function String_Value_Of
2618 (Node
: Project_Node_Id
;
2619 In_Tree
: Project_Node_Tree_Ref
) return Name_Id
2625 (In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_With_Clause
2627 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Comment
2629 In_Tree
.Project_Nodes
.Table
(Node
).Kind
= N_Literal_String
));
2630 return In_Tree
.Project_Nodes
.Table
(Node
).Value
;
2631 end String_Value_Of
;
2633 --------------------
2634 -- Value_Is_Valid --
2635 --------------------
2637 function Value_Is_Valid
2638 (For_Typed_Variable
: Project_Node_Id
;
2639 In_Tree
: Project_Node_Tree_Ref
;
2640 Value
: Name_Id
) return Boolean
2644 (For_Typed_Variable
/= Empty_Node
2646 (In_Tree
.Project_Nodes
.Table
(For_Typed_Variable
).Kind
=
2647 N_Typed_Variable_Declaration
));
2650 Current_String
: Project_Node_Id
:=
2651 First_Literal_String
2652 (String_Type_Of
(For_Typed_Variable
, In_Tree
),
2656 while Current_String
/= Empty_Node
2658 String_Value_Of
(Current_String
, In_Tree
) /= Value
2661 Next_Literal_String
(Current_String
, In_Tree
);
2664 return Current_String
/= Empty_Node
;
2669 -------------------------------
2670 -- There_Are_Unkept_Comments --
2671 -------------------------------
2673 function There_Are_Unkept_Comments
return Boolean is
2675 return Unkept_Comments
;
2676 end There_Are_Unkept_Comments
;