File indexing completed on 2024-05-12 04:02:09

0001 <!DOCTYPE html>
0002 <html><head>
0003 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
0004 <title>test.adb</title>
0005 <meta name="generator" content="KF5::SyntaxHighlighting - Definition (Ada) - Theme (Breeze Dark)"/>
0006 </head><body style="background-color:#232629;color:#cfcfc2"><pre>
0007 <span style="font-weight:bold">with</span> Ada<span style="color:#3f8058">.</span>Containers<span style="color:#3f8058">.</span>Vectors;
0008 <span style="font-weight:bold">with</span> Ada<span style="color:#3f8058">.</span>Strings;  <span style="font-weight:bold">use</span> Ada<span style="color:#3f8058">.</span>Strings;
0009 <span style="font-weight:bold">with</span> Put_Title;
0010 
0011 <span style="font-weight:bold">procedure</span> LAL_DDA <span style="font-weight:bold">is</span>
0012     Collection <span style="color:#3f8058">:</span> Repinfo_Collection;
0013 
0014     A_Basic_Record       <span style="color:#3f8058">:</span> Basic_Record         <span style="color:#3f8058">:=</span> Basic_Record'<span style="color:#3f8058">(</span>A <span style="color:#3f8058">=></span> <span style="color:#f67400">42</span><span style="color:#3f8058">)</span>;
0015     Another_Basic_Record <span style="color:#3f8058">:</span> Basic_Record         <span style="color:#3f8058">:=</span> <span style="color:#3f8058">(</span>A <span style="color:#3f8058">=></span> <span style="color:#f67400">42</span><span style="color:#3f8058">)</span>;
0016     Nix                  <span style="color:#3f8058">:</span> <span style="font-weight:bold">constant</span> Null_Record <span style="color:#3f8058">:=</span> <span style="color:#3f8058">(</span><span style="font-weight:bold">null</span> <span style="font-weight:bold">record</span><span style="color:#3f8058">)</span>;
0017 
0018     <span style="font-weight:bold">procedure</span> Process_Type_Decl <span style="color:#3f8058">(</span>Decl <span style="color:#3f8058">:</span> Base_Type_Decl<span style="color:#3f8058">)</span>;
0019     <span style="color:#7a7c7d">--  Display all representation information that is available in</span>
0020     <span style="color:#7a7c7d">--  ``Collection`` for this type declaration.</span>
0021 
0022     <span style="font-weight:bold">procedure</span> Process_Variants
0023       <span style="color:#3f8058">(</span>Variants <span style="color:#3f8058">:</span> Variant_Representation_Array; Prefix <span style="color:#3f8058">:</span> <span style="color:#2980b9">String</span><span style="color:#3f8058">)</span>;
0024     <span style="color:#7a7c7d">--  Display all representation information for the given record variants.</span>
0025     <span style="color:#7a7c7d">--  ``Prefix`` is used as a prefix for all printed lines.</span>
0026 
0027     <span style="font-weight:bold">package</span> Expr_Vectors <span style="font-weight:bold">is</span> <span style="font-weight:bold">new</span> Ada<span style="color:#3f8058">.</span>Containers<span style="color:#3f8058">.</span>Vectors <span style="color:#3f8058">(</span>Positive<span style="color:#3f8058">,</span> Expr<span style="color:#3f8058">)</span>;
0028     <span style="font-weight:bold">use</span> <span style="font-weight:bold">type</span> Expr_Vectors<span style="color:#3f8058">.</span>Vector;
0029     <span style="font-weight:bold">package</span> Expr_Vector_Vectors <span style="font-weight:bold">is</span> <span style="font-weight:bold">new</span> Ada<span style="color:#3f8058">.</span>Containers<span style="color:#3f8058">.</span>Vectors
0030       <span style="color:#3f8058">(</span>Positive<span style="color:#3f8058">,</span> Expr_Vectors<span style="color:#3f8058">.</span>Vector<span style="color:#3f8058">)</span>;
0031 
0032     <span style="font-weight:bold">function</span> Test_Discriminants
0033       <span style="color:#3f8058">(</span>Decl <span style="color:#3f8058">:</span> Base_Type_Decl<span style="color:#3f8058">)</span> <span style="font-weight:bold">return</span> Expr_Vector_Vectors<span style="color:#3f8058">.</span>Vector;
0034     <span style="color:#7a7c7d">--  Fetch the vector of discriminants to use for testing from nearby Test</span>
0035     <span style="color:#7a7c7d">--  pragmas.</span>
0036 
0037     <span style="font-weight:bold">procedure</span> Error <span style="color:#3f8058">(</span>Node <span style="color:#3f8058">:</span> Ada_Node'Class; Message <span style="color:#3f8058">:</span> <span style="color:#2980b9">String</span><span style="color:#3f8058">)</span> <span style="font-weight:bold">with</span> <span style="color:#0099ff;font-weight:bold">No_Return</span>;
0038     <span style="color:#7a7c7d">--  Abort the App with the given error ``Message``, contextualized using</span>
0039     <span style="color:#7a7c7d">--  ``Node`` 's source location.</span>
0040 
0041     <span style="font-weight:bold">package</span> App <span style="font-weight:bold">is</span> <span style="font-weight:bold">new</span> Libadalang<span style="color:#3f8058">.</span>Helpers<span style="color:#3f8058">.</span>App
0042       <span style="color:#3f8058">(</span>Name         <span style="color:#3f8058">=></span> <span style="color:#f44f4f">"lal_dda"</span><span style="color:#3f8058">,</span>
0043        Description  <span style="color:#3f8058">=></span>
0044          <span style="color:#f44f4f">"Exercize Libadalang's Data_Decomposition API on type declarations"</span><span style="color:#3f8058">,</span>
0045        App_Setup    <span style="color:#3f8058">=></span> App_Setup<span style="color:#3f8058">,</span>
0046        Process_Unit <span style="color:#3f8058">=></span> Process_Unit<span style="color:#3f8058">)</span>;
0047 
0048     <span style="font-weight:bold">package</span> Args <span style="font-weight:bold">is</span>
0049         <span style="font-weight:bold">use</span> GNATCOLL<span style="color:#3f8058">.</span>Opt_Parse;
0050 
0051         <span style="font-weight:bold">package</span> Rep_Info_Files <span style="font-weight:bold">is</span> <span style="font-weight:bold">new</span> Parse_Option_List
0052           <span style="color:#3f8058">(</span>App<span style="color:#3f8058">.</span>Args<span style="color:#3f8058">.</span>Parser<span style="color:#3f8058">,</span> <span style="color:#f44f4f">"-i"</span><span style="color:#3f8058">,</span> <span style="color:#f44f4f">"--rep-info-file"</span><span style="color:#3f8058">,</span>
0053            Arg_Type   <span style="color:#3f8058">=></span> Unbounded_String<span style="color:#3f8058">,</span>
0054            Accumulate <span style="color:#3f8058">=></span> True<span style="color:#3f8058">,</span>
0055            Help       <span style="color:#3f8058">=></span> <span style="color:#f44f4f">"Output for the compiler's -gnatR4j option"</span><span style="color:#3f8058">)</span>;
0056 
0057     <span style="font-weight:bold">end</span> Args;
0058 
0059     <span style="color:#7a7c7d">---------------</span>
0060     <span style="color:#7a7c7d">-- App_Setup --</span>
0061     <span style="color:#7a7c7d">---------------</span>
0062 
0063     <span style="font-weight:bold">procedure</span> App_Setup <span style="color:#3f8058">(</span>Context <span style="color:#3f8058">:</span> App_Context; Jobs <span style="color:#3f8058">:</span> App_Job_Context_Array<span style="color:#3f8058">)</span> <span style="font-weight:bold">is</span>
0064         <span style="font-weight:bold">pragma</span> Unreferenced <span style="color:#3f8058">(</span>Context<span style="color:#3f8058">,</span> Jobs<span style="color:#3f8058">)</span>;
0065     <span style="font-weight:bold">begin</span>
0066         Collection <span style="color:#3f8058">:=</span> Load <span style="color:#3f8058">(</span>Filename_Array <span style="color:#3f8058">(</span>Args<span style="color:#3f8058">.</span>Rep_Info_Files<span style="color:#3f8058">.</span>Get<span style="color:#3f8058">))</span>;
0067     <span style="font-weight:bold">exception</span>
0068         <span style="font-weight:bold">when</span> Exc <span style="color:#3f8058">:</span> Loading_Error <span style="color:#3f8058">=></span>
0069             Put_Line
0070               <span style="color:#3f8058">(</span><span style="color:#f44f4f">"Loading_Error raised while loading representation information:"</span><span style="color:#3f8058">)</span>;
0071             Put_Line <span style="color:#3f8058">(</span>Exception_Message <span style="color:#3f8058">(</span>Exc<span style="color:#3f8058">))</span>;
0072             New_Line;
0073     <span style="font-weight:bold">end</span> App_Setup;
0074 
0075     <span style="color:#7a7c7d">------------------</span>
0076     <span style="color:#7a7c7d">-- Process_Unit --</span>
0077     <span style="color:#7a7c7d">------------------</span>
0078 
0079     <span style="font-weight:bold">procedure</span> Process_Unit <span style="color:#3f8058">(</span>Context <span style="color:#3f8058">:</span> App_Job_Context; Unit <span style="color:#3f8058">:</span> Analysis_Unit<span style="color:#3f8058">)</span> <span style="font-weight:bold">is</span>
0080         <span style="font-weight:bold">pragma</span> Unreferenced <span style="color:#3f8058">(</span>Context<span style="color:#3f8058">)</span>;
0081 
0082         <span style="font-weight:bold">function</span> Process <span style="color:#3f8058">(</span>Node <span style="color:#3f8058">:</span> Ada_Node'Class<span style="color:#3f8058">)</span> <span style="font-weight:bold">return</span> Visit_Status;
0083 
0084         <span style="font-weight:bold">function</span> Process <span style="color:#3f8058">(</span>Node <span style="color:#3f8058">:</span> Ada_Node'Class<span style="color:#3f8058">)</span> <span style="font-weight:bold">return</span> Visit_Status <span style="font-weight:bold">is</span>
0085         <span style="font-weight:bold">begin</span>
0086             <span style="font-weight:bold">case</span> Node<span style="color:#3f8058">.</span>Kind <span style="font-weight:bold">is</span>
0087                 <span style="font-weight:bold">when</span> Ada_Base_Type_Decl <span style="color:#3f8058">=></span>
0088                     Process_Type_Decl <span style="color:#3f8058">(</span>Node<span style="color:#3f8058">.</span>As_Base_Type_Decl<span style="color:#3f8058">)</span>;
0089 
0090                 <span style="font-weight:bold">when</span> Ada_Pragma_Node <span style="color:#3f8058">=></span>
0091                     <span style="font-weight:bold">declare</span>
0092                         PN   <span style="color:#3f8058">:</span> <span style="font-weight:bold">constant</span> Pragma_Node <span style="color:#3f8058">:=</span> Node<span style="color:#3f8058">.</span>As_Pragma_Node;
0093                         Name <span style="color:#3f8058">:</span> <span style="font-weight:bold">constant</span> Text_Type <span style="color:#3f8058">:=</span> To_Lower <span style="color:#3f8058">(</span>PN<span style="color:#3f8058">.</span>F_Id<span style="color:#3f8058">.</span>Text<span style="color:#3f8058">)</span>;
0094                         Decl <span style="color:#3f8058">:</span> Ada_Node;
0095                     <span style="font-weight:bold">begin</span>
0096                         <span style="font-weight:bold">if</span> Name <span style="color:#3f8058">=</span> <span style="color:#f44f4f">"test_object_type"</span> <span style="font-weight:bold">then</span>
0097                             Decl <span style="color:#3f8058">:=</span> PN<span style="color:#3f8058">.</span>Previous_Sibling;
0098                             <span style="font-weight:bold">if</span> Decl<span style="color:#3f8058">.</span>Kind <span style="color:#3f8058">/=</span> Ada_Object_Decl <span style="font-weight:bold">then</span>
0099                                 Error
0100                                   <span style="color:#3f8058">(</span>Node<span style="color:#3f8058">,</span>
0101                                     <span style="color:#f44f4f">"previous declaration must be an object"</span>
0102                                     <span style="color:#3f8058">&amp;</span> <span style="color:#f44f4f">" declaration"</span><span style="color:#3f8058">)</span>;
0103                             <span style="font-weight:bold">end if</span>;
0104                             Process_Type_Decl
0105                               <span style="color:#3f8058">(</span>Decl<span style="color:#3f8058">.</span>As_Object_Decl
0106                                 <span style="color:#3f8058">.</span>F_Type_Expr
0107                                 <span style="color:#3f8058">.</span>P_Designated_Type_Decl<span style="color:#3f8058">)</span>;
0108                         <span style="font-weight:bold">end if</span>;
0109                         <span style="font-weight:bold">if</span> I <span style="color:#3f8058">></span> <span style="color:#f67400">1</span> <span style="font-weight:bold">then</span>
0110                             Put <span style="color:#3f8058">(</span><span style="color:#f44f4f">", "</span><span style="color:#3f8058">)</span>;
0111                         <span style="font-weight:bold">end if</span>;
0112                     <span style="font-weight:bold">end</span>;
0113 
0114                 <span style="font-weight:bold">when</span> <span style="font-weight:bold">others</span> <span style="color:#3f8058">=></span>
0115                     <span style="font-weight:bold">null</span>;
0116             <span style="font-weight:bold">end case</span>;
0117             <span style="font-weight:bold">return</span> Into;
0118         <span style="font-weight:bold">end</span> Process;
0119 
0120     <span style="font-weight:bold">begin</span>
0121         Put_Title
0122           <span style="color:#3f8058">(</span><span style="color:#3daee9">'#'</span><span style="color:#3f8058">,</span> <span style="color:#f44f4f">"Analyzing "</span> <span style="color:#3f8058">&amp;</span> Ada<span style="color:#3f8058">.</span>Directories<span style="color:#3f8058">.</span>Simple_Name <span style="color:#3f8058">(</span>Unit<span style="color:#3f8058">.</span>Get_Filename<span style="color:#3f8058">))</span>;
0123         <span style="font-weight:bold">if</span> Unit<span style="color:#3f8058">.</span>Has_Diagnostics <span style="font-weight:bold">then</span>
0124             <span style="font-weight:bold">for</span> D <span style="font-weight:bold">of</span> Unit<span style="color:#3f8058">.</span>Diagnostics <span style="font-weight:bold">loop</span>
0125                 Put_Line <span style="color:#3f8058">(</span>Unit<span style="color:#3f8058">.</span>Format_GNU_Diagnostic <span style="color:#3f8058">(</span>D<span style="color:#3f8058">))</span>;
0126             <span style="font-weight:bold">end loop</span>;
0127             New_Line;
0128             <span style="font-weight:bold">return</span>;
0129 
0130         <span style="font-weight:bold">elsif</span> <span style="font-weight:bold">not</span> Unit<span style="color:#3f8058">.</span>Root<span style="color:#3f8058">.</span>Is_Null <span style="font-weight:bold">then</span>
0131             Unit<span style="color:#3f8058">.</span>Root<span style="color:#3f8058">.</span>Traverse <span style="color:#3f8058">(</span>Process'Access<span style="color:#3f8058">)</span>;
0132         <span style="font-weight:bold">end if</span>;
0133     <span style="font-weight:bold">end</span> Process_Unit;
0134 <span style="font-weight:bold">end</span> LAL_DDA;
0135 
0136 <span style="font-weight:bold">type</span> Car <span style="font-weight:bold">is</span> <span style="font-weight:bold">record</span>
0137     Identity       <span style="color:#3f8058">:</span> <span style="color:#2980b9">Long_Long_Integer</span>;
0138     Number_Wheels  <span style="color:#3f8058">:</span> Positive <span style="font-weight:bold">range</span> <span style="color:#f67400">1</span> <span style="color:#3f8058">..</span> <span style="color:#f67400">16#</span><span style="color:#f67400">FF</span><span style="color:#f67400">#</span><span style="color:#f67400">E1</span>;
0139     Number_Wheels  <span style="color:#3f8058">:</span> Positive <span style="font-weight:bold">range</span> <span style="color:#f67400">16#</span><span style="color:#f67400">F.FF</span><span style="color:#f67400">#</span><span style="color:#f67400">E+2</span> <span style="color:#3f8058">..</span> <span style="color:#f67400">2#</span><span style="color:#f67400">1111_1111</span><span style="color:#f67400">#</span>;
0140     Paint          <span style="color:#3f8058">:</span> Color;
0141     Horse_Power_kW <span style="color:#3f8058">:</span> <span style="color:#2980b9">Float</span> <span style="font-weight:bold">range</span> <span style="color:#f67400">0.0</span> <span style="color:#3f8058">..</span> <span style="color:#f67400">2_000.0</span>;
0142     Consumption    <span style="color:#3f8058">:</span> <span style="color:#2980b9">Float</span> <span style="font-weight:bold">range</span> <span style="color:#f67400">0.0</span> <span style="color:#3f8058">..</span> <span style="color:#f67400">100.0</span>;
0143 <span style="font-weight:bold">end record</span>;
0144 
0145 <span style="font-weight:bold">type</span> Null_Record <span style="font-weight:bold">is</span> <span style="font-weight:bold">null</span> <span style="font-weight:bold">record</span>;
0146 
0147 <span style="font-weight:bold">type</span> Traffic_Light_Access <span style="font-weight:bold">is</span> <span style="font-weight:bold">access</span> Mutable_Variant_Record;
0148 Any_Traffic_Light       <span style="color:#3f8058">:</span> Traffic_Light_Access <span style="color:#3f8058">:=</span>
0149                            <span style="font-weight:bold">new</span> Mutable_Variant_Record;
0150 Aliased_Traffic_Light   <span style="color:#3f8058">:</span> <span style="font-weight:bold">aliased</span> Mutable_Variant_Record;
0151 
0152 <span style="font-weight:bold">pragma</span> <span style="color:#0099ff;font-weight:bold">Unchecked_Union</span> <span style="color:#3f8058">(</span>Union<span style="color:#3f8058">)</span>;
0153 <span style="font-weight:bold">pragma</span> <span style="color:#0099ff;font-weight:bold">Convention</span> <span style="color:#3f8058">(</span>C<span style="color:#3f8058">,</span> Union<span style="color:#3f8058">)</span>;    <span style="color:#7a7c7d">-- optional</span>
0154 
0155 <span style="font-weight:bold">type</span> Programmer <span style="font-weight:bold">is</span> <span style="font-weight:bold">new</span> Person
0156                    <span style="font-weight:bold">and</span> Printable
0157 <span style="font-weight:bold">with</span>
0158    <span style="font-weight:bold">record</span>
0159       Skilled_In <span style="color:#3f8058">:</span> Language_List;
0160    <span style="font-weight:bold">end record</span>;
0161 
0162 <span style="color:#f67400">3#</span><span style="color:#f67400">12.112</span><span style="color:#f67400">#</span><span style="color:#f67400">e3</span>
0163 <span style="color:#f67400">3#</span><span style="color:#f67400">12.11</span> <span style="font-weight:bold">use</span>
0164 <span style="color:#7a7c7d">--     ^ invalid</span>
0165 <span style="color:#f67400">3#</span><span style="color:#f67400">12.2</span>3#e3
0166 <span style="color:#7a7c7d">--    ^ invalid</span>
0167 <span style="color:#f67400">3#</span><span style="color:#f67400">12.11</span>ds#
0168 <span style="color:#7a7c7d">--     ^ invalid</span>
0169 <span style="color:#f67400">1211</span>ds
0170 <span style="color:#7a7c7d">--  ^ invalid</span>
0171 </pre></body></html>