1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171
|
<!DOCTYPE html>
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>test.adb</title>
<meta name="generator" content="KF5::SyntaxHighlighting - Definition (Ada) - Theme (Breeze Dark)"/>
</head><body style="background-color:#232629;color:#cfcfc2"><pre>
<span style="font-weight:bold">with</span> Ada<span style="color:#3f8058">.</span>Containers<span style="color:#3f8058">.</span>Vectors;
<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;
<span style="font-weight:bold">with</span> Put_Title;
<span style="font-weight:bold">procedure</span> LAL_DDA <span style="font-weight:bold">is</span>
Collection <span style="color:#3f8058">:</span> Repinfo_Collection;
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>;
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>;
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>;
<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>;
<span style="color:#7a7c7d">-- Display all representation information that is available in</span>
<span style="color:#7a7c7d">-- ``Collection`` for this type declaration.</span>
<span style="font-weight:bold">procedure</span> Process_Variants
<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>;
<span style="color:#7a7c7d">-- Display all representation information for the given record variants.</span>
<span style="color:#7a7c7d">-- ``Prefix`` is used as a prefix for all printed lines.</span>
<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>;
<span style="font-weight:bold">use</span> <span style="font-weight:bold">type</span> Expr_Vectors<span style="color:#3f8058">.</span>Vector;
<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
<span style="color:#3f8058">(</span>Positive<span style="color:#3f8058">,</span> Expr_Vectors<span style="color:#3f8058">.</span>Vector<span style="color:#3f8058">)</span>;
<span style="font-weight:bold">function</span> Test_Discriminants
<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;
<span style="color:#7a7c7d">-- Fetch the vector of discriminants to use for testing from nearby Test</span>
<span style="color:#7a7c7d">-- pragmas.</span>
<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>;
<span style="color:#7a7c7d">-- Abort the App with the given error ``Message``, contextualized using</span>
<span style="color:#7a7c7d">-- ``Node`` 's source location.</span>
<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
<span style="color:#3f8058">(</span>Name <span style="color:#3f8058">=></span> <span style="color:#f44f4f">"lal_dda"</span><span style="color:#3f8058">,</span>
Description <span style="color:#3f8058">=></span>
<span style="color:#f44f4f">"Exercize Libadalang's Data_Decomposition API on type declarations"</span><span style="color:#3f8058">,</span>
App_Setup <span style="color:#3f8058">=></span> App_Setup<span style="color:#3f8058">,</span>
Process_Unit <span style="color:#3f8058">=></span> Process_Unit<span style="color:#3f8058">)</span>;
<span style="font-weight:bold">package</span> Args <span style="font-weight:bold">is</span>
<span style="font-weight:bold">use</span> GNATCOLL<span style="color:#3f8058">.</span>Opt_Parse;
<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
<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>
Arg_Type <span style="color:#3f8058">=></span> Unbounded_String<span style="color:#3f8058">,</span>
Accumulate <span style="color:#3f8058">=></span> True<span style="color:#3f8058">,</span>
Help <span style="color:#3f8058">=></span> <span style="color:#f44f4f">"Output for the compiler's -gnatR4j option"</span><span style="color:#3f8058">)</span>;
<span style="font-weight:bold">end</span> Args;
<span style="color:#7a7c7d">---------------</span>
<span style="color:#7a7c7d">-- App_Setup --</span>
<span style="color:#7a7c7d">---------------</span>
<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>
<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>;
<span style="font-weight:bold">begin</span>
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>;
<span style="font-weight:bold">exception</span>
<span style="font-weight:bold">when</span> Exc <span style="color:#3f8058">:</span> Loading_Error <span style="color:#3f8058">=></span>
Put_Line
<span style="color:#3f8058">(</span><span style="color:#f44f4f">"Loading_Error raised while loading representation information:"</span><span style="color:#3f8058">)</span>;
Put_Line <span style="color:#3f8058">(</span>Exception_Message <span style="color:#3f8058">(</span>Exc<span style="color:#3f8058">))</span>;
New_Line;
<span style="font-weight:bold">end</span> App_Setup;
<span style="color:#7a7c7d">------------------</span>
<span style="color:#7a7c7d">-- Process_Unit --</span>
<span style="color:#7a7c7d">------------------</span>
<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>
<span style="font-weight:bold">pragma</span> Unreferenced <span style="color:#3f8058">(</span>Context<span style="color:#3f8058">)</span>;
<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">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>
<span style="font-weight:bold">begin</span>
<span style="font-weight:bold">case</span> Node<span style="color:#3f8058">.</span>Kind <span style="font-weight:bold">is</span>
<span style="font-weight:bold">when</span> Ada_Base_Type_Decl <span style="color:#3f8058">=></span>
Process_Type_Decl <span style="color:#3f8058">(</span>Node<span style="color:#3f8058">.</span>As_Base_Type_Decl<span style="color:#3f8058">)</span>;
<span style="font-weight:bold">when</span> Ada_Pragma_Node <span style="color:#3f8058">=></span>
<span style="font-weight:bold">declare</span>
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;
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>;
Decl <span style="color:#3f8058">:</span> Ada_Node;
<span style="font-weight:bold">begin</span>
<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>
Decl <span style="color:#3f8058">:=</span> PN<span style="color:#3f8058">.</span>Previous_Sibling;
<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>
Error
<span style="color:#3f8058">(</span>Node<span style="color:#3f8058">,</span>
<span style="color:#f44f4f">"previous declaration must be an object"</span>
<span style="color:#3f8058">&</span> <span style="color:#f44f4f">" declaration"</span><span style="color:#3f8058">)</span>;
<span style="font-weight:bold">end if</span>;
Process_Type_Decl
<span style="color:#3f8058">(</span>Decl<span style="color:#3f8058">.</span>As_Object_Decl
<span style="color:#3f8058">.</span>F_Type_Expr
<span style="color:#3f8058">.</span>P_Designated_Type_Decl<span style="color:#3f8058">)</span>;
<span style="font-weight:bold">end if</span>;
<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>
Put <span style="color:#3f8058">(</span><span style="color:#f44f4f">", "</span><span style="color:#3f8058">)</span>;
<span style="font-weight:bold">end if</span>;
<span style="font-weight:bold">end</span>;
<span style="font-weight:bold">when</span> <span style="font-weight:bold">others</span> <span style="color:#3f8058">=></span>
<span style="font-weight:bold">null</span>;
<span style="font-weight:bold">end case</span>;
<span style="font-weight:bold">return</span> Into;
<span style="font-weight:bold">end</span> Process;
<span style="font-weight:bold">begin</span>
Put_Title
<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">&</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>;
<span style="font-weight:bold">if</span> Unit<span style="color:#3f8058">.</span>Has_Diagnostics <span style="font-weight:bold">then</span>
<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>
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>;
<span style="font-weight:bold">end loop</span>;
New_Line;
<span style="font-weight:bold">return</span>;
<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>
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>;
<span style="font-weight:bold">end if</span>;
<span style="font-weight:bold">end</span> Process_Unit;
<span style="font-weight:bold">end</span> LAL_DDA;
<span style="font-weight:bold">type</span> Car <span style="font-weight:bold">is</span> <span style="font-weight:bold">record</span>
Identity <span style="color:#3f8058">:</span> <span style="color:#2980b9">Long_Long_Integer</span>;
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>;
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>;
Paint <span style="color:#3f8058">:</span> Color;
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>;
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>;
<span style="font-weight:bold">end record</span>;
<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>;
<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;
Any_Traffic_Light <span style="color:#3f8058">:</span> Traffic_Light_Access <span style="color:#3f8058">:=</span>
<span style="font-weight:bold">new</span> Mutable_Variant_Record;
Aliased_Traffic_Light <span style="color:#3f8058">:</span> <span style="font-weight:bold">aliased</span> Mutable_Variant_Record;
<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>;
<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>
<span style="font-weight:bold">type</span> Programmer <span style="font-weight:bold">is</span> <span style="font-weight:bold">new</span> Person
<span style="font-weight:bold">and</span> Printable
<span style="font-weight:bold">with</span>
<span style="font-weight:bold">record</span>
Skilled_In <span style="color:#3f8058">:</span> Language_List;
<span style="font-weight:bold">end record</span>;
<span style="color:#f67400">3#</span><span style="color:#f67400">12.112</span><span style="color:#f67400">#</span><span style="color:#f67400">e3</span>
<span style="color:#f67400">3#</span><span style="color:#f67400">12.11</span> <span style="font-weight:bold">use</span>
<span style="color:#7a7c7d">-- ^ invalid</span>
<span style="color:#f67400">3#</span><span style="color:#f67400">12.2</span>3#e3
<span style="color:#7a7c7d">-- ^ invalid</span>
<span style="color:#f67400">3#</span><span style="color:#f67400">12.11</span>ds#
<span style="color:#7a7c7d">-- ^ invalid</span>
<span style="color:#f67400">1211</span>ds
<span style="color:#7a7c7d">-- ^ invalid</span>
</pre></body></html>
|