From: Arnaud Charlet Date: Mon, 24 Feb 2014 17:01:19 +0000 (+0100) Subject: [multiple changes] X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f1a3590ee2fbbd4b4c7ccd43867cc37b07c1f4c7;p=gcc.git [multiple changes] 2014-02-24 Thomas Quinot * s-os_lib.adb (Errno_Message): Do not depend on Integer'Image. * s-oscons-tmplt.c: On VxWorks, include adaint.h only after vxWorks.h has been included. Also ensure that file attributes related definitions are output even in cases where socket support is not enabled. * a-tags.adb: Code clean up. * Make-generated.in (OSCONS_CPP, OSCONS_EXTRACT): Use -iquote instead of -I to add the main ada source directory to the header search path, in order to avoid conflict between our own "types.h" and VxWork's . 2014-02-24 Robert Dewar * atree.ads, atree.adb (Copy_Separate_Tree): Add Syntax_Only parameter. * debug.adb: Remove documentation of -gnatd.X, no longer used. * freeze.adb (Wrap_Imported_Subprogram): Fixed and activated. 2014-02-24 Bob Duff * gnat_ugn.texi: Improve documentation of gnatpp. From-SVN: r208083 --- diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index c07dcd8782e..26865cf251b 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,26 @@ +2014-02-24 Thomas Quinot + + * s-os_lib.adb (Errno_Message): Do not depend on Integer'Image. + * s-oscons-tmplt.c: On VxWorks, include adaint.h only after + vxWorks.h has been included. Also ensure that file attributes + related definitions are output even in cases where socket support + is not enabled. + * a-tags.adb: Code clean up. + * Make-generated.in (OSCONS_CPP, OSCONS_EXTRACT): Use -iquote + instead of -I to add the main ada source directory to the header + search path, in order to avoid conflict between our own "types.h" + and VxWork's . + +2014-02-24 Robert Dewar + + * atree.ads, atree.adb (Copy_Separate_Tree): Add Syntax_Only parameter. + * debug.adb: Remove documentation of -gnatd.X, no longer used. + * freeze.adb (Wrap_Imported_Subprogram): Fixed and activated. + +2014-02-24 Bob Duff + + * gnat_ugn.texi: Improve documentation of gnatpp. + 2014-02-24 Thomas Quinot * g-stheme.adb, g-socthi-vms.adb, g-socthi-vms.ads, diff --git a/gcc/ada/Make-generated.in b/gcc/ada/Make-generated.in index 5c5812c94c9..412e18b58c0 100644 --- a/gcc/ada/Make-generated.in +++ b/gcc/ada/Make-generated.in @@ -67,12 +67,20 @@ $(ADA_GEN_SUBDIR)/stamp-nmake: $(ADA_GEN_SUBDIR)/sinfo.ads $(ADA_GEN_SUBDIR)/nma touch $(ADA_GEN_SUBDIR)/stamp-nmake # GCC_FOR_TARGET has paths relative to the gcc directory, so we need to adjust -# for running it from $(ADA_GEN_SUBDIR)/bldtools/oscons +# for running it from $(ADA_GEN_SUBDIR)/bldtools/oscons. + OSCONS_CC=$(subst ./xgcc,../../../xgcc,$(subst -B./, -B../../../,$(GCC_FOR_TARGET))) + +# The main ada source directory must be on the include path for #include "..." +# because s-oscons-tmplt.c requires adaint.h, gsocket.h, and any file included +# by these headers. However note that we must use -iquote, not -I, so that +# ada/types.h does not conflict with a same-named system header (VxWorks +# has a header). + OSCONS_SRCDIR=$${_oscons_srcdir} OSCONS_CPP=$(OSCONS_CC) $(GNATLIBCFLAGS) -E -C \ - -DTARGET=\"$(target)\" -I$(OSCONS_SRCDIR) s-oscons-tmplt.c > s-oscons-tmplt.i -OSCONS_EXTRACT=$(OSCONS_CC) -I$(OSCONS_SRCDIR) -S s-oscons-tmplt.i + -DTARGET=\"$(target)\" -iquote $(OSCONS_SRCDIR) s-oscons-tmplt.c > s-oscons-tmplt.i +OSCONS_EXTRACT=$(OSCONS_CC) -iquote $(OSCONS_SRCDIR) -S s-oscons-tmplt.i # Note: if you need to build with a non-GNU compiler, you could adapt the # following definitions (written for VMS DEC-C) diff --git a/gcc/ada/a-tags.adb b/gcc/ada/a-tags.adb index 6c096c00b41..8e19d8378d4 100644 --- a/gcc/ada/a-tags.adb +++ b/gcc/ada/a-tags.adb @@ -31,7 +31,6 @@ with Ada.Exceptions; with Ada.Unchecked_Conversion; -with System.CRTL; use System.CRTL; with System.HTable; with System.Storage_Elements; use System.Storage_Elements; with System.WCh_Con; use System.WCh_Con; @@ -57,6 +56,10 @@ package body Ada.Tags is -- table. This is Inline_Always since it is called from other Inline_ -- Always subprograms where we want no out of line code to be generated. + function Length (Str : Cstring_Ptr) return Natural; + -- Length of string represented by the given pointer (treating the string + -- as a C-style string, which is Nul terminated). + function OSD (T : Tag) return Object_Specific_Data_Ptr; -- Ada 2005 (AI-251): Given a pointer T to a secondary dispatch table, -- retrieve the address of the record containing the Object Specific @@ -270,11 +273,10 @@ package body Ada.Tags is function Hash (F : System.Address) return HTable_Headers is function H is new System.HTable.Hash (HTable_Headers); - Str : String (1 .. Integer (strlen (F))); - for Str'Address use F; - pragma Import (Ada, Str); + Str : constant Cstring_Ptr := To_Cstring_Ptr (F); + Res : constant HTable_Headers := H (Str (1 .. Length (Str))); begin - return H (Str); + return Res; end Hash; ----------------- @@ -283,9 +285,9 @@ package body Ada.Tags is procedure Set_HT_Link (T : Tag; Next : Tag) is TSD_Ptr : constant Addr_Ptr := - To_Addr_Ptr (To_Address (T) - DT_Typeinfo_Ptr_Size); + To_Addr_Ptr (To_Address (T) - DT_Typeinfo_Ptr_Size); TSD : constant Type_Specific_Data_Ptr := - To_Type_Specific_Data_Ptr (TSD_Ptr.all); + To_Type_Specific_Data_Ptr (TSD_Ptr.all); begin TSD.HT_Link.all := Next; end Set_HT_Link; @@ -308,10 +310,8 @@ package body Ada.Tags is procedure Check_TSD (TSD : Type_Specific_Data_Ptr) is T : Tag; - E_Tag_Len : constant Integer := - Integer (strlen (TSD.External_Tag.all'Address)); - - E_Tag : String (1 .. E_Tag_Len); + E_Tag_Len : constant Integer := Length (TSD.External_Tag); + E_Tag : String (1 .. E_Tag_Len); for E_Tag'Address use TSD.External_Tag.all'Address; pragma Import (Ada, E_Tag); @@ -486,7 +486,7 @@ package body Ada.Tags is TSD_Ptr := To_Addr_Ptr (To_Address (T) - DT_Typeinfo_Ptr_Size); TSD := To_Type_Specific_Data_Ptr (TSD_Ptr.all); Result := TSD.Expanded_Name; - return Result (1 .. Integer (strlen (Result.all'Address))); + return Result (1 .. Length (Result)); end Expanded_Name; ------------------ @@ -506,7 +506,7 @@ package body Ada.Tags is TSD_Ptr := To_Addr_Ptr (To_Address (T) - DT_Typeinfo_Ptr_Size); TSD := To_Type_Specific_Data_Ptr (TSD_Ptr.all); Result := TSD.External_Tag; - return Result (1 .. Integer (strlen (Result.all'Address))); + return Result (1 .. Length (Result)); end External_Tag; --------------------- @@ -730,6 +730,27 @@ package body Ada.Tags is and then D_TSD.Access_Level = A_TSD.Access_Level; end Is_Descendant_At_Same_Level; + ------------ + -- Length -- + ------------ + + -- Note: This unit is used in the Ravenscar runtime library, so it cannot + -- depend on System.CTRL. Furthermore, this happens on CPUs where the GCC + -- intrinsic strlen may not be available, so we need to recode our own Ada + -- version here. + + function Length (Str : Cstring_Ptr) return Natural is + Len : Integer; + + begin + Len := 1; + while Str (Len) /= ASCII.NUL loop + Len := Len + 1; + end loop; + + return Len - 1; + end Length; + ------------------- -- Offset_To_Top -- ------------------- diff --git a/gcc/ada/atree.adb b/gcc/ada/atree.adb index 2e3f76b5c64..8b0ef2be839 100644 --- a/gcc/ada/atree.adb +++ b/gcc/ada/atree.adb @@ -772,7 +772,10 @@ package body Atree is -- Copy_Separate_Tree -- ------------------------ - function Copy_Separate_Tree (Source : Node_Id) return Node_Id is + function Copy_Separate_Tree + (Source : Node_Id; + Syntax_Only : Boolean := False) return Node_Id + is New_Id : Node_Id; function Copy_Entity (E : Entity_Id) return Entity_Id; @@ -793,6 +796,10 @@ package body Atree is New_Ent : Entity_Id; begin + -- Build appropriate node. Note that in this case, we do not need to + -- do any special casing for Syntax_Only, since the new node has no + -- Etype set, and is always unanalyzed. + case N_Entity (Nkind (E)) is when N_Defining_Identifier => New_Ent := New_Entity (N_Defining_Identifier, Sloc (E)); @@ -828,7 +835,7 @@ package body Atree is if Has_Extension (E) then Append (Copy_Entity (E), NL); else - Append (Copy_Separate_Tree (E), NL); + Append (Copy_Separate_Tree (E, Syntax_Only), NL); end if; Next (E); @@ -847,7 +854,8 @@ package body Atree is begin if Field in Node_Range then - New_N := Union_Id (Copy_Separate_Tree (Node_Id (Field))); + New_N := + Union_Id (Copy_Separate_Tree (Node_Id (Field), Syntax_Only)); if Parent (Node_Id (Field)) = Source then Set_Parent (Node_Id (New_N), New_Id); @@ -898,6 +906,47 @@ package body Atree is Set_Entity (New_Id, Empty); end if; + -- This is the point at which we do the special processing for + -- the Syntax_Only flag being set: + + if Syntax_Only then + + -- Reset all Etype fields and Analyzed flags + + if Nkind (New_Id) in N_Has_Etype then + Set_Etype (New_Id, Empty); + end if; + + Set_Analyzed (New_Id, False); + + -- Rather special case, if we have an expanded name, then change + -- it back into a selected component, so that the tree looks the + -- way it did coming out of the parser. This will change back + -- when we analyze the selected component node. + + if Nkind (New_Id) = N_Expanded_Name then + + -- The following code is a bit kludgy. It would be cleaner to + -- Add an entry Change_Expanded_Name_To_Selected_Component to + -- Sinfo.CN, but that's an earthquake, because it has the wrong + -- license, and Atree is used outside the compiler, e.g. in the + -- binder and in ASIS, so we don't want to add that dependency. + + -- Consequently we have no choice but to hold our noses and do + -- the change manually. At least we are Atree, so this odd use + -- of Atree.Unchecked_Access is at least all in the family. + + -- Change the node type + + Atree.Unchecked_Access.Set_Nkind (New_Id, N_Selected_Component); + + -- Clear the Chars field which is not present in a selected + -- component node, so we don't want a junk value around. + + Set_Node1 (New_Id, Empty); + end if; + end if; + -- All done, return copied node return New_Id; diff --git a/gcc/ada/atree.ads b/gcc/ada/atree.ads index ba110825b39..1a369575d21 100644 --- a/gcc/ada/atree.ads +++ b/gcc/ada/atree.ads @@ -494,7 +494,9 @@ package Atree is -- is thus still attached to the tree. It is valid for Source to be Empty, -- in which case Relocate_Node simply returns Empty as the result. - function Copy_Separate_Tree (Source : Node_Id) return Node_Id; + function Copy_Separate_Tree + (Source : Node_Id; + Syntax_Only : Boolean := False) return Node_Id; -- Given a node that is the root of a subtree, Copy_Separate_Tree copies -- the entire syntactic subtree, including recursively any descendants -- whose parent field references a copied node (descendants not linked to @@ -505,6 +507,33 @@ package Atree is -- is called on an unanalyzed tree, and no semantic information is copied. -- However, to ensure that no entities are shared between the two when the -- source is already analyzed, entity fields in the copy are zeroed out. + -- + -- In addition, if Syntax_Only is set True, then when Copy_Separate_Tree + -- is applied Identical to Copy_Separate_Tree except that in the case of + -- applying it to an already analyzed tree, all Etype fields are reset, + -- and all Analyzed flags are set False. In addition, Expanded_Name + -- nodes are converted back into the original parser form (where they are + -- Selected_Components), so that renalysis does the right thing. + -- + -- Note: it really seems like Copy_Separate_Tree could do these identical + -- steps unconditionally, and that nearly works, except for this one known + -- test case that fails: + -- + -- 1. procedure III is + -- 2. procedure Proc2 is + -- 3. pragma Inline_Always (Proc2); + -- | + -- >>> argument of "INLINE_ALWAYS" must be entity in + -- current scope + -- + -- 4. begin + -- 5. null; + -- 6. end Proc2; + -- 7. begin + -- 8. null; + -- 9. end III; + -- + -- To be investigated ??? function Copy_Separate_List (Source : List_Id) return List_Id; -- Applies Copy_Separate_Tree to each element of the Source list, returning diff --git a/gcc/ada/debug.adb b/gcc/ada/debug.adb index a6506932982..11237e23dc9 100644 --- a/gcc/ada/debug.adb +++ b/gcc/ada/debug.adb @@ -141,7 +141,7 @@ package body Debug is -- d.U Ignore indirect calls for static elaboration -- d.V -- d.W Print out debugging information for Walk_Library_Items - -- d.X Activate wrapping of imported subprograms with pre/post conditions + -- d.X -- d.Y -- d.Z @@ -664,9 +664,6 @@ package body Debug is -- the order in which units are walked. This is primarily for use in -- debugging CodePeer mode. - -- d.X Activates Wrap_Imported_Subprogram in Freeze (not yet working so - -- this allows checkin of partial implementation). - -- d1 Error messages have node numbers where possible. Normally error -- messages have only source locations. This option is useful when -- debugging errors caused by expanded code, where the source location diff --git a/gcc/ada/freeze.adb b/gcc/ada/freeze.adb index 716a96b42a6..a10290fb73a 100644 --- a/gcc/ada/freeze.adb +++ b/gcc/ada/freeze.adb @@ -3400,6 +3400,7 @@ package body Freeze is procedure Wrap_Imported_Subprogram (E : Entity_Id) is Loc : constant Source_Ptr := Sloc (E); + CE : constant Name_Id := Chars (E); Spec : Node_Id; Parms : List_Id; Stmt : Node_Id; @@ -3412,29 +3413,30 @@ package body Freeze is if not Is_Imported (E) then return; - end if; -- Test enabling conditions for wrapping - if Is_Subprogram (E) + elsif Is_Subprogram (E) and then Present (Contract (E)) and then Present (Pre_Post_Conditions (Contract (E))) and then not GNATprove_Mode then - -- For now, activate this only if -gnatd.X is set, because there - -- are problems with this procedure, it is not working yet, but - -- we would like to be able to check it in ??? + -- Here we do the wrap - if not Debug_Flag_Dot_XX then - Error_Msg_NE - ("pre/post conditions on imported subprogram are not " - & "enforced??", E, Pre_Post_Conditions (Contract (E))); - goto Not_Wrapped; - end if; + -- Note on calls to Copy_Separate_Tree. The trees we are copying + -- here are fully analyzed, but we definitely want fully syntactic + -- unanalyzed trees in the body we construct, so that the analysis + -- generates the right visibility. So this is a case in which we + -- set Syntax_Only. See spec of Copy_Separate_Tree for details on + -- the use of this flag. + + -- Acquire copy of Inline pragma + + Iprag := + Copy_Separate_Tree (Import_Pragma (E), Syntax_Only => True); -- Fix up spec to be not imported any more - Iprag := Import_Pragma (E); Set_Is_Imported (E, False); Set_Interface_Name (E, Empty); Set_Has_Completion (E, False); @@ -3449,7 +3451,7 @@ package body Freeze is Parms := New_List; Forml := First_Formal (E); while Present (Forml) loop - Append_To (Parms, New_Occurrence_Of (Forml, Loc)); + Append_To (Parms, Make_Identifier (Loc, Chars (Forml))); Next_Formal (Forml); end loop; @@ -3460,13 +3462,13 @@ package body Freeze is Make_Simple_Return_Statement (Loc, Expression => Make_Function_Call (Loc, - Name => New_Occurrence_Of (E, Loc), + Name => Make_Identifier (Loc, CE), Parameter_Associations => Parms)); else Stmt := Make_Procedure_Call_Statement (Loc, - Name => New_Occurrence_Of (E, Loc), + Name => Make_Identifier (Loc, CE), Parameter_Associations => Parms); end if; @@ -3474,33 +3476,34 @@ package body Freeze is Bod := Make_Subprogram_Body (Loc, - Specification => Copy_Separate_Tree (Spec), + Specification => + Copy_Separate_Tree (Spec, Syntax_Only => True), Declarations => New_List ( Make_Subprogram_Declaration (Loc, - Specification => Copy_Separate_Tree (Spec)), - Copy_Separate_Tree (Iprag)), + Specification => + Copy_Separate_Tree (Spec, Syntax_Only => True)), + Iprag), Handled_Statement_Sequence => Make_Handled_Sequence_Of_Statements (Loc, Statements => New_List (Stmt), - End_Label => New_Occurrence_Of (E, Loc))); + End_Label => Make_Identifier (Loc, CE))); -- Append the body to freeze result Add_To_Result (Bod); return; - end if; -- Case of imported subprogram that does not get wrapped - <> - - -- Set Is_Public. All imported entities need an external symbol - -- created for them since they are always referenced from another - -- object file. Note this used to be set when we set Is_Imported - -- back in Sem_Prag, but now we delay it to this point, since we - -- don't want to set this flag if we wrap an imported subprogram. + else + -- Set Is_Public. All imported entities need an external symbol + -- created for them since they are always referenced from another + -- object file. Note this used to be set when we set Is_Imported + -- back in Sem_Prag, but now we delay it to this point, since we + -- don't want to set this flag if we wrap an imported subprogram. - Set_Is_Public (E); + Set_Is_Public (E); + end if; end Wrap_Imported_Subprogram; -- Start of processing for Freeze_Entity diff --git a/gcc/ada/gnat_ugn.texi b/gcc/ada/gnat_ugn.texi index a57715a8a26..6fc86ab524a 100644 --- a/gcc/ada/gnat_ugn.texi +++ b/gcc/ada/gnat_ugn.texi @@ -11319,7 +11319,7 @@ to be processed. @item -X@var{name}=@var{value} @cindex @option{-X} @command{gnatelim} Indicates that external variable @var{name} in the argument project -has the @var{value} value. Has no effect if no project is specified as +has the value @var{value}. Has no effect if no project is specified as tool argument. @item ^-files^/FILES^=@var{filename} @@ -14076,25 +14076,23 @@ is now available. To invoke the old formatting algorithms, use the @option{--pp-old} switch. Support for @option{--pp-old} will be removed in some future version. -To produce a reformatted file, @command{gnatpp} generates and uses the ASIS -tree for the input source and thus requires the input to be syntactically and -semantically legal. -If this condition is not met, @command{gnatpp} will terminate with an -error message; no output file will be generated. +To produce a reformatted file, @command{gnatpp} invokes the Ada +compiler and generates and uses the ASIS tree for the input source; +thus the input must be legal Ada code. @command{gnatpp} cannot process sources that contain preprocessing directives. -If the compilation unit -contained in the input source depends semantically upon units located -outside the current directory, you have to provide the source search path -when invoking @command{gnatpp}, if these units are contained in files with -names that do not follow the GNAT file naming rules, you have to provide -the configuration file describing the corresponding naming scheme; -see the description of the @command{gnatpp} -switches below. Another possibility is to use a project file and to -call @command{gnatpp} through the @command{gnat} driver -(see @ref{The GNAT Driver and Project Files}). +If the compilation unit contained in the input source depends +semantically upon units located outside the current directory, you +have to provide the source search path when invoking +@command{gnatpp}. If these units are contained in files with names +that do not follow the GNAT file naming rules, you have to provide a +configuration file describing the corresponding naming scheme; see the +description of the @command{gnatpp} switches below. Another +possibility is to use a project file and to call @command{gnatpp} +through the @command{gnat} driver (see @ref{The GNAT Driver and +Project Files}). The @command{gnatpp} command has the form @@ -14114,18 +14112,16 @@ output source file @item @var{filename} is the name (including the extension) of the source file to -reformat; ``wildcards'' or several file names on the same gnatpp command are -allowed. The file name may contain path information; it does not have to +reformat; wildcards or several file names on the same gnatpp command are +allowed. The file name may contain path information; it does not have to follow the GNAT file naming rules @item @samp{@var{gcc_switches}} is a list of switches for @command{gcc}. They will be passed on to all compiler invocations made by -@command{gnatelim} to generate the ASIS trees. Here you can provide +@command{gnatpp} to generate the ASIS trees. Here you can provide @option{^-I^/INCLUDE_DIRS=^} switches to form the source search path, -use the @option{-gnatec} switch to set the configuration file, -use the @option{-gnat05} switch if sources should be compiled in -Ada 2005 mode etc. +use the @option{-gnatec} switch to set the configuration file, etc. @end itemize @node Switches for gnatpp @@ -14149,10 +14145,6 @@ You may supply several such switches to @command{gnatpp}, but then each must be specified in full, with both the name and the value. Abbreviated forms (the name appearing once, followed by each value) are not permitted. -For example, to set -the alignment of the assignment delimiter both in declarations and in -assignment statements, you must write @option{-A2A3} -(or @option{-A2 -A3}), but not @option{-A23}. @end ifclear @ifset vms @@ -14162,21 +14154,11 @@ word may have exactly one option, which specifies either upper case, lower case, or mixed case), and thus exactly one such option can be in effect for an invocation of @command{gnatpp}. If more than one is supplied, the last one is used. -However, some qualifiers have options that are mutually compatible, -and then you may then supply several such options when invoking -@command{gnatpp}. @end ifset -In most cases, it is obvious whether or not the -^values for a switch with a given name^options for a given qualifier^ -are compatible with each other. -When the semantics might not be evident, the summaries below explicitly -indicate the effect. - @menu * Alignment Control:: * Casing Control:: -* Construct Layout Control:: * General Text Layout Control:: * Other Formatting Options:: * Setting the Source Search Path:: @@ -14190,44 +14172,22 @@ indicate the effect. @noindent Programs can be easier to read if certain constructs are vertically aligned. -By default all alignments are set ON. -Through the @option{^-A0^/ALIGN=OFF^} switch you may reset the default to -OFF, and then use one or more of the other -^@option{-A@var{n}} switches^@option{/ALIGN} options^ -to activate alignment for specific constructs. +By default alignment of the following constructs is set ON: +@code{:} in declarations, @code{:=} in initializations in declarations +@code{:=} in assignment statements, @code{=>} in associations, and +@code{at} keywords in the component clauses in record +representation clauses. @table @option @cindex @option{^-A@var{n}^/ALIGN^} (@command{gnatpp}) -@ifset vms -@item /ALIGN=ON -Set all alignments to ON -@end ifset - @item ^-A0^/ALIGN=OFF^ -Set all alignments to OFF - -@item ^-A1^/ALIGN=COLONS^ -Align @code{:} in declarations - -@item ^-A2^/ALIGN=DECLARATIONS^ -Align @code{:=} in initializations in declarations +Set alignment to OFF -@item ^-A3^/ALIGN=STATEMENTS^ -Align @code{:=} in assignment statements - -@item ^-A4^/ALIGN=ARROWS^ -Align @code{=>} in associations - -@item ^-A5^/ALIGN=COMPONENT_CLAUSES^ -Align @code{at} keywords in the component clauses in record -representation clauses +@item ^-A1^/ALIGN=ON^ +Set alignment to ON @end table -@noindent -The @option{^-A^/ALIGN^} switches are mutually compatible; any combination -is allowed. - @node Casing Control @subsection Casing Control @cindex Casing control in @command{gnatpp} @@ -14240,10 +14200,6 @@ general rule for name casing but also override this rule via a set of dictionary files. Three types of casing are supported: lower case, upper case, and mixed case. -Lower and upper case are self-explanatory (but since some letters in -Latin1 and other GNAT-supported character sets -exist only in lower-case form, an upper case conversion will have no -effect on them.) ``Mixed case'' means that the first letter, and also each letter immediately following an underscore, are converted to their uppercase forms; all the other letters are converted to their lowercase forms. @@ -14369,10 +14325,6 @@ The @option{^-D-^/SPECIFIC_CASING^} and @option{^-D@var{file}^/DICTIONARY=@var{file}^} switches are mutually compatible. -@node Construct Layout Control -@subsection Construct Layout Control -@cindex Layout control in @command{gnatpp} - @noindent This group of @command{gnatpp} switches controls the layout of comments and complex syntactic constructs. See @ref{Formatting Comments} for details @@ -14381,53 +14333,31 @@ on their effect. @table @option @cindex @option{^-c@var{n}^/COMMENTS_LAYOUT^} (@command{gnatpp}) @item ^-c0^/COMMENTS_LAYOUT=UNTOUCHED^ -All the comments remain unchanged +All comments remain unchanged. @item ^-c1^/COMMENTS_LAYOUT=DEFAULT^ -GNAT-style comment line indentation (this is the default). - -@item ^-c2^/COMMENTS_LAYOUT=STANDARD_INDENT^ -Reference-manual comment line indentation. +GNAT-style comment line indentation. +This is the default. @item ^-c3^/COMMENTS_LAYOUT=GNAT_BEGINNING^ -GNAT-style comment beginning +GNAT-style comment beginning. @item ^-c4^/COMMENTS_LAYOUT=REFORMAT^ -Reformat comment blocks +Fill comment blocks. @item ^-c5^/COMMENTS_LAYOUT=KEEP_SPECIAL^ -Keep unchanged special form comments +Keep unchanged special form comments. +This is the default. @item --comments-only @cindex @option{--comments-only} @command{gnatpp} Format just the comments. -@cindex @option{^-l@var{n}^/CONSTRUCT_LAYOUT^} (@command{gnatpp}) -@item ^-l1^/CONSTRUCT_LAYOUT=GNAT^ -GNAT-style layout (this is the default) - -@item ^-l2^/CONSTRUCT_LAYOUT=COMPACT^ -Compact layout - -@item ^-l3^/CONSTRUCT_LAYOUT=UNCOMPACT^ -Uncompact layout - -@cindex @option{^-N^/NOTABS^} (@command{gnatpp}) -@item ^-N^/NOTABS^ -All the VT characters are removed from the comment text. All the HT characters -are expanded with the sequences of space characters to get to the next tab -stops. - @cindex @option{^--no-separate-is^/NO_SEPARATE_IS^} (@command{gnatpp}) @item ^--no-separate-is^/NO_SEPARATE_IS^ Do not place the keyword @code{is} on a separate line in a subprogram body in case if the spec occupies more than one line. -@cindex @option{^--separate-label^/SEPARATE_LABEL^} (@command{gnatpp}) -@item ^--separate-label^/SEPARATE_LABEL^ -Place statement label(s) on a separate line, with the following statement -on the next line. - @cindex @option{^--separate-loop-then^/SEPARATE_LOOP_THEN^} (@command{gnatpp}) @item ^--separate-loop-then^/SEPARATE_LOOP_THEN^ Place the keyword @code{loop} in FOR and WHILE loop statements and the @@ -14443,11 +14373,6 @@ incompatible with @option{^--separate-loop-then^/SEPARATE_LOOP_THEN^} option. @item ^--use-on-new-line^/USE_ON_NEW_LINE^ Start each USE clause in a context clause from a separate line. -@cindex @option{^--separate-stmt-name^/STMT_NAME_ON_NEW_LINE^} (@command{gnatpp}) -@item ^--separate-stmt-name^/STMT_NAME_ON_NEW_LINE^ -Use a separate line for a loop or block statement name, but do not use an extra -indentation level for the statement itself. - @cindex @option{^--insert-blank-lines^/INSERT_BLANK_LINES^} (@command{gnatpp}) @item ^--insert-blank-lines^/INSERT_BLANK_LINES^ Insert blank lines where appropriate (between bodies and other large @@ -14462,28 +14387,16 @@ multiple blank lines down to one. @ifclear vms @noindent -The @option{-c1} and @option{-c2} switches are incompatible. -The @option{-c3} and @option{-c4} switches are compatible with each other and -also with @option{-c1} and @option{-c2}. The @option{-c0} switch disables all -the other comment formatting switches. - -The @option{-l1}, @option{-l2}, and @option{-l3} switches are incompatible. +The @option{-c} switches are compatible with one another, except that +the @option{-c0} switch disables all other comment formatting +switches. @end ifclear @ifset vms @noindent -For the @option{/COMMENTS_LAYOUT} qualifier: -@itemize @bullet -@item -The @option{DEFAULT} and @option{STANDARD_INDENT} options are incompatible. -@item -The @option{GNAT_BEGINNING} and @option{REFORMAT} options are compatible with -each other and also with @option{DEFAULT} and @option{STANDARD_INDENT}. -@end itemize - -@noindent -The @option{GNAT}, @option{COMPACT}, and @option{UNCOMPACT} options for the -@option{/CONSTRUCT_LAYOUT} qualifier are incompatible. +For the @option{/COMMENTS_LAYOUT} qualifier, +The @option{GNAT_BEGINNING}, @option{REFORMAT}, and @option{DEFAULT} +options are compatible with one another. @end ifset @node General Text Layout Control @@ -14515,8 +14428,7 @@ line indentation is also 1) @subsection Other Formatting Options @noindent -These switches control the inclusion of missing end/exit labels, and -the indentation level in @b{case} statements, etc. +These switches control other formatting not listed above. @table @option @item --decimal-grouping=@var{n} @@ -14533,36 +14445,21 @@ Same as @code{--decimal-grouping}, but for based literals. For example, with @code{--based-grouping=4}, @code{16#0001FFFE#} will be changed to @code{16#0001_FFFE#}. -@item ^-e^/NO_MISSED_LABELS^ -@cindex @option{^-e^/NO_MISSED_LABELS^} (@command{gnatpp}) -Do not insert missing end/exit labels. An end label is the name of -a construct that may optionally be repeated at the end of the -construct's declaration; -e.g., the names of packages, subprograms, and tasks. -An exit label is the name of a loop that may appear as target -of an exit statement within the loop. -By default, @command{gnatpp} inserts these end/exit labels when -they are absent from the original source. This option suppresses such -insertion, so that the formatted source reflects the original. +@item ^--RM-style-spacing^/RM_STYLE_SPACING^ +@cindex @option{^--RM-style-spacing^/RM_STYLE_SPACING^} (@command{gnatpp}) +Do not insert an extra blank before various occurrences of +`(' and `:'. This also turns off alignment. @item ^-ff^/FORM_FEED_AFTER_PRAGMA_PAGE^ @cindex @option{^-ff^/FORM_FEED_AFTER_PRAGMA_PAGE^} (@command{gnatpp}) Insert a Form Feed character after a pragma Page. -@item ^-T@var{nnn}^/MAX_INDENT=@var{nnn}^ -@cindex @option{^-T^/MAX_INDENT^} (@command{gnatpp}) -Do not use an additional indentation level for @b{case} alternatives -and variants if there are @var{nnn} or more (the default -value is 10). -If @var{nnn} is 0, an additional indentation level is -used for @b{case} alternatives and variants regardless of their number. - @item ^--call_threshold=@var{nnn}^/MAX_ACT=@var{nnn}^ @cindex @option{^--call_threshold^/MAX_ACT^} (@command{gnatpp}) If the number of parameter associations is greater than @var{nnn} and if at least one association uses named notation, start each association from a new line. If @var{nnn} is 0, no check for the number of associations -is made, this is the default. +is made; this is the default. @item ^--par_threshold=@var{nnn}^/MAX_PAR=@var{nnn}^ @cindex @option{^--par_threshold^/MAX_PAR^} (@command{gnatpp}) @@ -14576,24 +14473,20 @@ a new line. The default for @var{nnn} is 3. @noindent To define the search path for the input source file, @command{gnatpp} -uses the same switches as the GNAT compiler, with the same effects. +uses the same switches as the GNAT compiler, with the same effects: @table @option @item ^-I^/SEARCH=^@var{dir} @cindex @option{^-I^/SEARCH^} (@command{gnatpp}) -The same as the corresponding gcc switch @item ^-I-^/NOCURRENT_DIRECTORY^ @cindex @option{^-I-^/NOCURRENT_DIRECTORY^} (@command{gnatpp}) -The same as the corresponding gcc switch @item ^-gnatec^/CONFIGURATION_PRAGMAS_FILE^=@var{path} @cindex @option{^-gnatec^/CONFIGURATION_PRAGMAS_FILE^} (@command{gnatpp}) -The same as the corresponding gcc switch @item ^--RTS^/RUNTIME_SYSTEM^=@var{path} @cindex @option{^--RTS^/RUNTIME_SYSTEM^} (@command{gnatpp}) -The same as the corresponding gcc switch @end table @@ -14601,9 +14494,9 @@ The same as the corresponding gcc switch @subsection Output File Control @noindent -By default the output is sent to the file whose name is obtained by appending -the ^@file{.pp}^@file{$PP}^ suffix to the name of the input file -(if the file with this name already exists, it is unconditionally overwritten). +By default the output is sent to a file whose name is obtained by appending +the ^@file{.pp}^@file{$PP}^ suffix to the name of the input file. +If the file with this name already exists, it is overwritten. Thus if the input file is @file{^my_ada_proc.adb^MY_ADA_PROC.ADB^} then @command{gnatpp} will produce @file{^my_ada_proc.adb.pp^MY_ADA_PROC.ADB$PP^} as output file. @@ -14645,12 +14538,12 @@ creating any backup copy of the input source. @item ^--eol=@var{xxx}^/END_OF_LINE=@var{xxx}^ @cindex @option{^--eol^/END_OF_LINE^} (@code{gnatpp}) -Specifies the format of the reformatted output file. The @var{xxx} -^string specified with the switch^option^ may be either +Specifies the line-ending style of the reformatted output file. The @var{xxx} +^string specified with the switch^option^ may be: @itemize @bullet @item ``@option{^dos^DOS^}'' MS DOS style, lines end with CR LF characters @item ``@option{^crlf^CRLF^}'' -the same as @option{^crlf^CRLF^} +the same as @option{^dos^DOS^} @item ``@option{^unix^UNIX^}'' UNIX style, lines end with LF character @item ``@option{^lf^LF^}'' the same as @option{^unix^UNIX^} @@ -14658,8 +14551,7 @@ the same as @option{^unix^UNIX^} @item ^-W^/RESULT_ENCODING=^@var{e} @cindex @option{^-W^/RESULT_ENCODING=^} (@command{gnatpp}) -Specify the wide character encoding method used to write the code in the -result file +Specify the wide character encoding method for the input and output files. @var{e} is one of the following: @itemize @bullet @@ -14686,8 +14578,7 @@ Brackets encoding (default value) @end table @noindent -Options @option{^-pipe^/STANDARD_OUTPUT^}, -@option{^-o^/OUTPUT^} and +Options @option{^-o^/OUTPUT^} and @option{^-of^/FORCED_OUTPUT^} are allowed only if the call to gnatpp contains only one file to reformat. Option @@ -14706,7 +14597,7 @@ The additional @command{gnatpp} switches are defined in this subsection. @table @option @item --version @cindex @option{--version} @command{gnatpp} -Display Copyright and version, then exit disregarding all other options. +Display copyright and version, then exit disregarding all other options. @item --help @cindex @option{--help} @command{gnatpp} @@ -14716,7 +14607,7 @@ Display usage, then exit disregarding all other options. @cindex @option{-P} @command{gnatpp} Indicates the name of the project file that describes the set of sources to be processed. The exact set of argument sources depends on other options -specified, see below. +specified; see below. @item -U @cindex @option{-U} @command{gnatpp} @@ -14734,7 +14625,7 @@ has no effect. @item -X@var{name}=@var{value} @cindex @option{-X} @command{gnatpp} Indicates that external variable @var{name} in the argument project -has the @var{value} value. Has no effect if no project is specified as +has the value @var{value}. Has no effect if no project is specified as tool argument. @item --pp-off=@var{xxx} @@ -14774,16 +14665,12 @@ This option cannot be used together with @option{^-r^/REPLACE^}, Print out execution time. @item ^-v^/VERBOSE^ -@cindex @option{^-v^/VERBOSE^} (@code{gnatpp}) -Verbose mode; -@command{gnatpp} generates version information and then -a trace of the actions it takes to produce or obtain the ASIS tree. - -@item ^-w^/WARNINGS^ -@cindex @option{^-w^/WARNINGS^} (@code{gnatpp}) -Warning mode; -@command{gnatpp} generates a warning whenever it cannot provide -a required layout in the result source. +@cindex @option{^-v^/VERBOSE^} (@command{gnatpp}) +Verbose mode + +@item ^-q^/QUIET^ +@cindex @option{^-q^/QUIET^} (@command{gnatpp}) +Quiet mode @end table @noindent @@ -14797,15 +14684,14 @@ all the immediate units of the argument project. @section Formatting Rules @noindent -The following subsections show how @command{gnatpp} treats ``white space'', +The following subsections show how @command{gnatpp} treats white space, comments, program layout, and name casing. -They provide the detailed descriptions of the switches shown above. +They provide detailed descriptions of the switches shown above. @menu * Disabling Pretty Printing:: * White Space and Empty Lines:: * Formatting Comments:: -* Construct Layout:: * Name Casing:: @end menu @@ -14832,7 +14718,7 @@ be followed by arbitrary additional text. For example: @cartouche package Interrupts is --!pp off -- turn off pretty printing so "Interrupt_Kind" lines up - type Interrupt_Kind is + type Interrupt_Kind is (Asynchronous_Interrupt_Kind, Synchronous_Interrupt_Kind, Green_Interrupt_Kind); @@ -14842,12 +14728,12 @@ package Interrupts is @end cartouche @end smallexample -You can specify different comment strings using the gnatpp -@code{--pp-off} and @code{--pp-on} switches. For example, if you say -@code{gnatpp --pp-off=' pp-' *.ad?} then gnatpp will recognize -comments of the form @code{-- pp-} instead of @code{--!pp off} for -disabling pretty printing. Note that the leading @code{--} of the -comment is not included in the argument to these switches. +You can specify different comment strings using the @code{--pp-off} +and @code{--pp-on} switches. For example, if you say @code{gnatpp +--pp-off=' pp-' *.ad?} then gnatpp will recognize comments of the form +@code{-- pp-} instead of @code{--!pp off} for disabling pretty +printing. Note that the leading @code{--} of the comment is not +included in the argument to these switches. @node White Space and Empty Lines @subsection White Space and Empty Lines @@ -14856,31 +14742,17 @@ comment is not included in the argument to these switches. @command{gnatpp} does not have an option to control space characters. It will add or remove spaces according to the style illustrated by the examples in the @cite{Ada Reference Manual}. - -The only format effectors -(see @cite{Ada Reference Manual}, paragraph 2.1(13)) -that will appear in the output file are platform-specific line breaks, -and also format effectors within (but not at the end of) comments. -In particular, each horizontal tab character that is not inside -a comment will be treated as a space and thus will appear in the -output file as zero or more spaces depending on -the reformatting of the line in which it appears. -The only exception is a Form Feed character, which is inserted after a -pragma @code{Page} when @option{-ff} is set. - -The output file will contain no lines with trailing ``white space'' (spaces, -format effectors). - -Empty lines in the original source are preserved -only if they separate declarations or statements. -In such contexts, a -sequence of two or more empty lines is replaced by exactly one empty line. -Note that a blank line will be removed if it separates two ``comment blocks'' -(a comment block is a sequence of whole-line comments). -In order to preserve a visual separation between comment blocks, use an -``empty comment'' (a line comprising only hyphens) rather than an empty line. -Likewise, if for some reason you wish to have a sequence of empty lines, -use a sequence of empty comments instead. +The output file will contain no lines with trailing white space. + +By default, a sequence of one or more blank lines in the input is +converted to a single blank line in the output; multiple blank lines +are squeezed down to one. +The @option{^--preserve-blank-lines^/PRESERVE_BLANK_LINES^} option +turns off the squeezing; each blank line in the input is copied +to the output. +The @option{^--insert-blank-lines^/INSERT_BLANK_LINES^} option +causes additional blank lines to be inserted if not already +present in the input (e.g. between bodies). @node Formatting Comments @subsection Formatting Comments @@ -14890,82 +14762,26 @@ Comments in Ada code are of two kinds: @itemize @bullet @item a @emph{whole-line comment}, which appears by itself (possibly preceded by -``white space'') on a line +white space) on a line @item -an @emph{end-of-line comment}, which follows some other Ada lexical element -on the same line. +an @emph{end-of-line comment}, which follows some other Ada code on +the same line. @end itemize @noindent -The indentation of a whole-line comment is that of either -the preceding or following line in -the formatted source, depending on switch settings as will be described below. - -For an end-of-line comment, @command{gnatpp} leaves the same number of spaces -between the end of the preceding Ada lexical element and the beginning -of the comment as appear in the original source, -unless either the comment has to be split to -satisfy the line length limitation, or else the next line contains a -whole line comment that is considered a continuation of this end-of-line -comment (because it starts at the same position). -In the latter two -cases, the start of the end-of-line comment is moved right to the nearest -multiple of the indentation level. -This may result in a ``line overflow'' (the right-shifted comment extending -beyond the maximum line length), in which case the comment is split as -described below. - -There is a difference between @option{^-c1^/COMMENTS_LAYOUT=DEFAULT^} -(GNAT-style comment line indentation) -and @option{^-c2^/COMMENTS_LAYOUT=STANDARD_INDENT^} -(reference-manual comment line indentation). -With reference-manual style, a whole-line comment is indented as if it -were a declaration or statement at the same place -(i.e., according to the indentation of the preceding line(s)). -With GNAT style, a whole-line comment that is immediately followed by an -@b{if} or @b{case} statement alternative, a record variant, or the reserved -word @b{begin}, is indented based on the construct that follows it. - -For example: -@smallexample @c ada -@cartouche -if A then - null; - -- some comment -else - null; -end if; -@end cartouche -@end smallexample - -@noindent -Reference-manual indentation produces: - -@smallexample @c ada -@cartouche -if A then - null; - -- some comment -else - null; -end if; -@end cartouche -@end smallexample - -@noindent -while GNAT-style indentation produces: +A whole-line comment is indented according to the surrounding code, +with some exceptions. +Comments that start in column 1 are kept there. +If possible, comments are not moved so far to the right that the maximum +line length is exceeded. +The @option{^-c0^/COMMENTS_LAYOUT=UNTOUCHED^} option +turns off comment formatting. +Special-form comments such as SPARK-style @code{--#...} are left alone. -@smallexample @c ada -@cartouche -if A then - null; --- some comment -else - null; -end if; -@end cartouche -@end smallexample +For an end-of-line comment, @command{gnatpp} tries to leave the same +number of spaces between the end of the preceding Ada code and the +beginning of the comment as appear in the original source. @noindent The @option{^-c3^/COMMENTS_LAYOUT=GNAT_BEGINNING^} switch @@ -14981,57 +14797,10 @@ first non-blank character of the comment. @end itemize @noindent -For an end-of-line comment, if in the original source the next line is a -whole-line comment that starts at the same position -as the end-of-line comment, -then the whole-line comment (and all whole-line comments -that follow it and that start at the same position) -will start at this position in the output file. - -@noindent -That is, if in the original source we have: - -@smallexample @c ada -@cartouche -begin -A := B + C; -- B must be in the range Low1..High1 - -- C must be in the range Low2..High2 - --B+C will be in the range Low1+Low2..High1+High2 -X := X + 1; -@end cartouche -@end smallexample - -@noindent -Then in the formatted source we get - -@smallexample @c ada -@cartouche -begin - A := B + C; -- B must be in the range Low1..High1 - -- C must be in the range Low2..High2 - -- B+C will be in the range Low1+Low2..High1+High2 - X := X + 1; -@end cartouche -@end smallexample - -@noindent -A comment that exceeds the line length limit will be split. -Unless switch -@option{^-c4^/COMMENTS_LAYOUT=REFORMAT^} (reformat comment blocks) is set and -the line belongs to a reformattable block, splitting the line generates a -@command{gnatpp} warning. -The @option{^-c4^/COMMENTS_LAYOUT=REFORMAT^} switch specifies that whole-line -comments may be reformatted in typical -word processor style (that is, moving words between lines and putting as -many words in a line as possible). - -@noindent -The @option{^-c5^/COMMENTS_LAYOUT=KEEP_SPECIAL^} switch specifies, that comments -that has a special format (that is, a character that is neither a letter nor digit -not white space nor line break immediately following the leading @code{--} of -the comment) should be without any change moved from the argument source -into reformatted source. This switch allows to preserve comments that are used -as a special marks in the code (e.g.@: SPARK annotation). +The @option{^-c4^/COMMENTS_LAYOUT=REFORMAT^} switch specifies that +whole-line comments that form a paragraph will be filled in typical +word processor style (that is, moving words between lines to make the +lines other than the last similar in length ). @noindent The @option{--comments-only} switch specifies that only the comments @@ -15044,157 +14813,6 @@ spaces after @code{--}, and @option{--comments-only -c3 -c4} does both. If @option{--comments-only} is given without @option{-c3} or @option{-c4}, then gnatpp doesn't format anything. -@node Construct Layout -@subsection Construct Layout - -@noindent -In several cases the suggested layout in the Ada Reference Manual includes -an extra level of indentation that many programmers prefer to avoid. The -affected cases include: - -@itemize @bullet - -@item Record type declaration (RM 3.8) - -@item Record representation clause (RM 13.5.1) - -@item Loop statement in case if a loop has a statement identifier (RM 5.6) - -@item Block statement in case if a block has a statement identifier (RM 5.6) -@end itemize - -@noindent -In compact mode (when GNAT style layout or compact layout is set), -the pretty printer uses one level of indentation instead -of two. This is achieved in the record definition and record representation -clause cases by putting the @code{record} keyword on the same line as the -start of the declaration or representation clause, and in the block and loop -case by putting the block or loop header on the same line as the statement -identifier. - -@noindent -The difference between GNAT style @option{^-l1^/CONSTRUCT_LAYOUT=GNAT^} -and compact @option{^-l2^/CONSTRUCT_LAYOUT=COMPACT^} -layout on the one hand, and uncompact layout -@option{^-l3^/CONSTRUCT_LAYOUT=UNCOMPACT^} on the other hand, -can be illustrated by the following examples: - -@iftex -@cartouche -@multitable @columnfractions .5 .5 -@item @i{GNAT style, compact layout} @tab @i{Uncompact layout} - -@item -@smallexample @c ada -type q is record - a : integer; - b : integer; -end record; -@end smallexample -@tab -@smallexample @c ada -type q is - record - a : integer; - b : integer; - end record; -@end smallexample - -@item -@smallexample @c ada -for q use record - a at 0 range 0 .. 31; - b at 4 range 0 .. 31; -end record; -@end smallexample -@tab -@smallexample @c ada -for q use - record - a at 0 range 0 .. 31; - b at 4 range 0 .. 31; - end record; -@end smallexample - -@item -@smallexample @c ada -Block : declare - A : Integer := 3; -begin - Proc (A, A); -end Block; -@end smallexample -@tab -@smallexample @c ada -Block : - declare - A : Integer := 3; - begin - Proc (A, A); - end Block; -@end smallexample - -@item -@smallexample @c ada -Clear : for J in 1 .. 10 loop - A (J) := 0; -end loop Clear; -@end smallexample -@tab -@smallexample @c ada -Clear : - for J in 1 .. 10 loop - A (J) := 0; - end loop Clear; -@end smallexample -@end multitable -@end cartouche -@end iftex - -@ifnottex -@smallexample -@cartouche -GNAT style, compact layout Uncompact layout - -type q is record type q is - a : integer; record - b : integer; a : integer; -end record; b : integer; - end record; - -for q use record for q use - a at 0 range 0 .. 31; record - b at 4 range 0 .. 31; a at 0 range 0 .. 31; -end record; b at 4 range 0 .. 31; - end record; - -Block : declare Block : - A : Integer := 3; declare -begin A : Integer := 3; - Proc (A, A); begin -end Block; Proc (A, A); - end Block; - -Clear : for J in 1 .. 10 loop Clear : - A (J) := 0; for J in 1 .. 10 loop -end loop Clear; A (J) := 0; - end loop Clear; -@end cartouche -@end smallexample -@end ifnottex - -@noindent -A further difference between GNAT style layout and compact layout is that -GNAT style layout inserts empty lines as separation for -compound statements, return statements and bodies. - -Note that the layout specified by -@option{^--separate-stmt-name^/STMT_NAME_ON_NEW_LINE^} -for named block and loop statements overrides the layout defined by these -constructs by @option{^-l1^/CONSTRUCT_LAYOUT=GNAT^}, -@option{^-l2^/CONSTRUCT_LAYOUT=COMPACT^} or -@option{^-l3^/CONSTRUCT_LAYOUT=UNCOMPACT^} option. - @node Name Casing @subsection Name Casing @@ -15230,6 +14848,19 @@ Thus @command{gnatpp} acts as though the @option{^-n^/NAME_CASING^} switch had affected the casing for the defining occurrence of the name. +The options +@option{^-a@var{x}^/ATTRIBUTE^}, +@option{^-k@var{x}^/KEYWORD_CASING^}, +@option{^-ne@var{x}^/ENUM_CASING^}, +@option{^-nt@var{x}^/TYPE_CASING^}, +@option{^-nn@var{x}^/NUMBER_CASING^}, and +@option{^-p@var{x}^/PRAGMA_CASING^} +allow finer-grained control over casing for +attributes, keywords, enumeration literals, +types, named numbers and pragmas, respectively. +@option{^-nt@var{x}^/TYPE_CASING^} covers subtypes and +task and protected bodies as well. + Some names may need to be spelled with casing conventions that are not covered by the upper-, lower-, and mixed-case transformations. You can arrange correct casing by placing such names in a @@ -15241,25 +14872,23 @@ any @option{^-n^/NAME_CASING^} switch. To handle the casing of Ada predefined names and the names from GNAT libraries, @command{gnatpp} assumes a default dictionary file. The name of each predefined entity is spelled with the same casing as is used -for the entity in the @cite{Ada Reference Manual}. +for the entity in the @cite{Ada Reference Manual} (usually mixed case). The name of each entity in the GNAT libraries is spelled with the same casing as is used in the declaration of that entity. -The @w{@option{^-D-^/SPECIFIC_CASING^}} switch suppresses the use of the -default dictionary file. -Instead, the casing for predefined and GNAT-defined names will be established -by the @option{^-n^/NAME_CASING^} switch or explicit dictionary files. -For example, by default the names @code{Ada.Text_IO} and @code{GNAT.OS_Lib} -will appear as just shown, -even in the presence of a @option{^-nU^/NAME_CASING=UPPER_CASE^} switch. -To ensure that even such names are rendered in uppercase, -additionally supply the @w{@option{^-D-^/SPECIFIC_CASING^}} switch -(or else, less conveniently, place these names in upper case in a dictionary -file). - -A dictionary file is -a plain text file; each line in this file can be either a blank line -(containing only space characters and ASCII.HT characters), an Ada comment +The @w{@option{^-D-^/SPECIFIC_CASING^}} switch suppresses the use of +the default dictionary file. Instead, the casing for predefined and +GNAT-defined names will be established by the +@option{^-n^/NAME_CASING^} switch or explicit dictionary files. For +example, by default the names @code{Ada.Text_IO} and +@code{GNAT.OS_Lib} will appear as just shown, even in the presence of +a @option{^-nU^/NAME_CASING=UPPER_CASE^} switch. To ensure that even +such names are rendered in uppercase, additionally supply the +@w{@option{^-D-^/SPECIFIC_CASING^}} switch (or else place these names +in upper case in a dictionary file). + +A dictionary file is a plain text file; each line in this file can be +either a blank line (containing only space characters), an Ada comment line, or the specification of exactly one @emph{casing schema}. A casing schema is a string that has the following syntax: @@ -15435,7 +15064,7 @@ Options: Otherwise this option has no effect. -X@var{name}=@var{value} -- indicates that external variable @var{name} in - the argument project has the @var{value} value. Has no effect if no + the argument project has the value @var{value}. Has no effect if no project is specified as tool argument. -mdir -- generate one .xml file for each Ada source file, in directory @@ -16817,7 +16446,7 @@ has no effect. @item -X@var{name}=@var{value} @cindex @option{-X} @command{gnatmetric} Indicates that external variable @var{name} in the argument project -has the @var{value} value. Has no effect if no project is specified as +has the value @var{value}. Has no effect if no project is specified as tool argument. @item --subdirs=@var{dir} @@ -19712,7 +19341,7 @@ to be processed. @item -X@var{name}=@var{value} @cindex @option{-X} @command{gnatstub} Indicates that external variable @var{name} in the argument project -has the @var{value} value. Has no effect if no project is specified as +has the value @var{value}. Has no effect if no project is specified as tool argument. @item ^-f^/FULL^ diff --git a/gcc/ada/s-os_lib.adb b/gcc/ada/s-os_lib.adb index 0f1b4d115ef..0d0fba7955f 100644 --- a/gcc/ada/s-os_lib.adb +++ b/gcc/ada/s-os_lib.adb @@ -924,8 +924,35 @@ package body System.OS_Lib is if C_Msg = Null_Address then if Default /= "" then return Default; + else - return "errno =" & Err'Img; + -- Note: for bootstrap reasons, it is impractical + -- to use Integer'Image here. + + declare + Val : Integer; + First : Integer; + Buf : String (1 .. 20); + -- Buffer large enough to hold image of largest Integer values + + begin + Val := abs Err; + First := Buf'Last; + loop + Buf (First) := + Character'Val (Character'Pos ('0') + Val mod 10); + Val := Val / 10; + exit when Val = 0; + First := First - 1; + end loop; + + if Err < 0 then + First := First - 1; + Buf (First) := '-'; + end if; + + return "errno = " & Buf (First .. Buf'Last); + end; end if; else diff --git a/gcc/ada/s-oscons-tmplt.c b/gcc/ada/s-oscons-tmplt.c index deb1855d366..5a034d58457 100644 --- a/gcc/ada/s-oscons-tmplt.c +++ b/gcc/ada/s-oscons-tmplt.c @@ -89,7 +89,6 @@ pragma Style_Checks ("M32766"); /* Include gsocket.h before any system header so it can redefine FD_SETSIZE */ #include "gsocket.h" -#include "adaint.h" #include #include @@ -114,12 +113,15 @@ pragma Style_Checks ("M32766"); /** ** For VxWorks, always include vxWorks.h (gsocket.h provides it only for - ** the case of runtime libraries that support sockets). + ** the case of runtime libraries that support sockets). Note: this must + ** be done before including adaint.h. **/ # include #endif +#include "adaint.h" + #ifdef DUMMY # if defined (TARGET) @@ -1344,30 +1346,6 @@ CND(SIZEOF_struct_servent, "struct servent") CND(SIZEOF_sigset, "sigset") #endif -/** - ** Note: this constant can be used in the GNAT runtime library. In compiler - ** units on the other hand, System.OS_Constants is not available, so we - ** declare an Ada constant (Osint.File_Attributes_Size) independently, which - ** is at least as large as sizeof (struct file_attributes), and we have an - ** assertion at initialization of Osint checking that the size is indeed at - ** least sufficient. - **/ -#define SIZEOF_struct_file_attributes (sizeof (struct file_attributes)) -CND(SIZEOF_struct_file_attributes, "struct file_attributes") - -/** - ** Maximal size of buffer for struct dirent. Note: Since POSIX.1 does not - ** specify the size of the d_name field, and other nonstandard fields may - ** precede that field within the dirent structure, we must make a conservative - ** computation. - **/ -{ - struct dirent dent; -#define SIZEOF_struct_dirent_alloc \ - ((char*) &dent.d_name - (char*) &dent) + NAME_MAX + 1 -CND(SIZEOF_struct_dirent_alloc, "struct dirent allocation") -} - /* -- Fields of struct msghdr @@ -1508,6 +1486,38 @@ CND(PTHREAD_ONCE_SIZE, "pthread_once_t") #endif /* __APPLE__ || __linux__ */ +/* + + -------------------------------- + -- File and directory support -- + -------------------------------- + +*/ + +/** + ** Note: this constant can be used in the GNAT runtime library. In compiler + ** units on the other hand, System.OS_Constants is not available, so we + ** declare an Ada constant (Osint.File_Attributes_Size) independently, which + ** is at least as large as sizeof (struct file_attributes), and we have an + ** assertion at initialization of Osint checking that the size is indeed at + ** least sufficient. + **/ +#define SIZEOF_struct_file_attributes (sizeof (struct file_attributes)) +CND(SIZEOF_struct_file_attributes, "struct file_attributes") + +/** + ** Maximal size of buffer for struct dirent. Note: Since POSIX.1 does not + ** specify the size of the d_name field, and other nonstandard fields may + ** precede that field within the dirent structure, we must make a conservative + ** computation. + **/ +{ + struct dirent dent; +#define SIZEOF_struct_dirent_alloc \ + ((char*) &dent.d_name - (char*) &dent) + NAME_MAX + 1 +CND(SIZEOF_struct_dirent_alloc, "struct dirent allocation") +} + /** ** System-specific constants follow ** Each section should be activated if compiling for the corresponding