aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/g-awk.ads
diff options
context:
space:
mode:
authorBob Duff <duff@adacore.com>2006-10-31 18:58:48 +0100
committerArnaud Charlet <charlet@gcc.gnu.org>2006-10-31 18:58:48 +0100
commit88b32fc3a7728aac518bb52c53cb7596c49b720c (patch)
treeb27b24d9bf1dfcca04c420002e7632e08960845e /gcc/ada/g-awk.ads
parentbae7876b4d3c0e1c5532b00f744a86d1f31d403e (diff)
downloadgcc-88b32fc3a7728aac518bb52c53cb7596c49b720c.zip
gcc-88b32fc3a7728aac518bb52c53cb7596c49b720c.tar.gz
gcc-88b32fc3a7728aac518bb52c53cb7596c49b720c.tar.bz2
g-awk.adb (Default_Session, [...]): Compile this file in Ada 95 mode, because it violates the new rules for AI-318.
2006-10-31 Bob Duff <duff@adacore.com> Robert Dewar <dewar@adacore.com> Ed Schonberg <schonberg@adacore.com> * g-awk.adb (Default_Session, Current_Session): Compile this file in Ada 95 mode, because it violates the new rules for AI-318. * g-awk.ads: Use overloaded subprograms in every case where we used to have a default of Current_Session. This makes the code closer to be correct for both Ada 95 and 2005. * g-moreex.adb (Occurrence): Turn off warnings for illegal-in-Ada-2005 code, relying on the fact that the compiler generates a warning instead of an error in -gnatg mode. * lib-xref.ads (Xref_Entity_Letters): Add entry for new E_Return_Statement entity kind. Add an entry for E_Incomplete_Subtype in Xref_Entity_Letters. * par.adb (P_Interface_Type_Definition): Addition of one formal to report an error if the reserved word abstract has been previously found. (SS_End_Type): Add E_Return for new extended_return_statement syntax. * par-ch4.adb (P_Aggregate_Or_Paren_Expr): Improve message for parenthesized range attribute usage (P_Expression_No_Right_Paren): Add missing comment about error recovery. * par-ch6.adb (P_Return_Object_Declaration): AI-318: Allow "constant" in the syntax for extended_return_statement. This is not in the latest RM, but the ARG is expected to issue an AI allowing this. (P_Return_Subtype_Indication,P_Return_Subtype_Indication): Remove N_Return_Object_Declaration. We now use N_Object_Declaration instead. (P_Return_Object_Declaration, P_Return_Subtype_Indication, P_Return_Statement): Parse the new syntax for extended_return_statement. * par-endh.adb (Check_End, Output_End_Deleted, Output_End_Expected, Output_End_Missing): Add error-recovery code for the new extended_return_statement syntax; that is, the new E_Return entry on the scope stack. * s-auxdec-vms_64.ads, s-auxdec.ads (AST_Handler): Change type from limited to nonlimited, because otherwise we violate the new Ada 2005 rules about returning limited types in function Create_AST_Handler in s-asthan.adb. * sem.adb (Analyze): Add cases for new node kinds N_Extended_Return_Statement and N_Return_Object_Declaration. * sem_aggr.adb (Aggregate_Constraint_Checks): Verify that component type is in the same category as type of context before applying check, to prevent anomalies in instantiations. (Resolve_Aggregate): Remove test for limited components in aggregates. It's unnecessary in Ada 95, because if it has limited components, then it must be limited. It's wrong in Ada 2005, because limited aggregates are now allowed. (Resolve_Record_Aggregate): Move check for limited types later, because OK_For_Limited_Init requires its argument to have been resolved. (Get_Value): When copying the component default expression for a defaulted association in an aggregate, use the sloc of the aggregate and not that of the original expression, to prevent spurious elaboration errors, when the expression includes function calls. (Check_Non_Limited_Type): Correct code for AI-287, extension aggregates were missing. We also didn't handle qualified expressions. Now also allow function calls. Use new common routine OK_For_Limited_Init. (Resolve_Extension_Aggregate): Minor fix to bad error message (started with space can upper case letter). * sem_ch3.ads, sem_ch3.adb (Create_Constrained_Components): Set Has_Static_Discriminants flag (Record_Type_Declaration): Diagnose an attempt to declare an interface type with discriminants. (Process_Range_Expr_In_Decl): Do validity checks on range (Build_Discriminant_Constraints): Use updated form of Denotes_Discriminant. (Process_Subtype): If the subtype is a private subtype whose full view is a concurrent subtype, introduce an itype reference to prevent scope anomalies in gigi. (Build_Derived_Record_Type, Collect_Interface_Primitives, Record_Type_Declaration): The functionality of the subprograms Collect_Abstract_Interfaces and Collect_All_Abstract_Interfaces is now performed by a single routine. (Build_Derived_Record_Type): If the type definition includes an explicit indication of limitedness, then the type must be marked as limited here to ensure that any access discriminants will not be treated as having a local anonymous access type. (Check_Abstract_Overriding): Issue a detailed error message when an abstract subprogram was not overridden due to incorrect mode of its first parameter. (Analyze_Private_Extension_Declaration): Add support for the analysis of synchronized private extension declarations. Verify that the ancestor is a limited or synchronized interface or in the generic case, the ancestor is a tagged limited type or synchronized interface and all progenitors are either limited or synchronized interfaces. Derived_Type_Declaration): Check for presence of private extension when dealing with synchronized formal derived types. Process_Full_View): Enchance the check done on the usage of "limited" by testing whether the private view is synchronized. Verify that a synchronized private view is completed by a protected or task type. (OK_For_Limited_Init_In_05): New function. (Analyze_Object_Declaration): Move check for limited types later, because OK_For_Limited_Init requires its argument to have been resolved. Add -gnatd.l --Use Ada 95 semantics for limited function returns, in order to alleviate the upward compatibility introduced by AI-318. (Constrain_Corresponding_Record): If the constraint is for a component subtype, mark the itype as frozen, to avoid out-of-scope references to discriminants in the back-end. (Collect_Implemented_Interfaces): Protect the recursive algorithm of this subprogram against wrong sources. (Get_Discr_Value, Is_Discriminant): Handle properly references to a discriminant of limited type completed with a protected type, when the discriminant is used to constrain a private component of the type, and expansion is disabled. (Find_Type_Of_Object): Do not treat a return subtype that is an anonymous subtype as a local_anonymous_type, because its accessibility level is the return type of the enclosing function. (Check_Initialization): In -gnatg mode, turn the error "cannot initialize entities of limited type" into a warning. (OK_For_Limited_Init): Return true for generated nodes, since it sometimes violates the legality rules. (Make_Incomplete_Declaration): If the type for which an incomplete declaration is created happens to be the currently visible entity, preserve the homonym chain when removing it from visibility. (Check_Conventions): Add support for Ada 2005 (AI-430): Conventions of inherited subprograms. (Access_Definition): If this is an access to function that is the return type of an access_to_function definition, context is a type declaration and the scope of the anonymous type is the current one. (Analyze_Subtype_Declaration): Add the defining identifier of a regular incomplete subtype to the set of private dependents of the original incomplete type. (Constrain_Discriminated_Type): Emit an error message whenever an incomplete subtype is being constrained. (Process_Incomplete_Dependents): Transform an incomplete subtype into a corresponding subtype of the full view of the original incomplete type. (Check_Incomplete): Properly detect invalid usage of incomplete types and subtypes. From-SVN: r118273
Diffstat (limited to 'gcc/ada/g-awk.ads')
-rw-r--r--gcc/ada/g-awk.ads138
1 files changed, 106 insertions, 32 deletions
diff --git a/gcc/ada/g-awk.ads b/gcc/ada/g-awk.ads
index 346da5e..a854489 100644
--- a/gcc/ada/g-awk.ads
+++ b/gcc/ada/g-awk.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 2000-2005, AdaCore --
+-- Copyright (C) 2000-2006, AdaCore --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -38,7 +38,7 @@
-- that a record cannot span multiple lines. The operating procedure is to
-- read files line by line, with each line being presented to the user of
-- the package. The interface provides services to access specific fields
--- in the line. Thus it is possible to control actions takn on a line based
+-- in the line. Thus it is possible to control actions taken on a line based
-- on values of some fields. This can be achieved directly or by registering
-- callbacks triggered on programmed conditions.
--
@@ -83,8 +83,8 @@
--
-- Examples of these three approaches appear below
--
--- There is many ways to use this package. The following discussion shows
--- three approaches, using the three iterator forms, to using this package.
+-- There are many ways to use this package. The following discussion shows
+-- three approaches to using this package, using the three iterator forms.
-- All examples will use the following file (computer.db):
--
-- Pluton;Windows-NT;Pentium III
@@ -242,7 +242,9 @@ package GNAT.AWK is
procedure Set_Field_Separators
(Separators : String := Default_Separators;
- Session : Session_Type := Current_Session);
+ Session : Session_Type);
+ procedure Set_Field_Separators
+ (Separators : String := Default_Separators);
-- Set the field separators. Each character in the string is a field
-- separator. When a line is read it will be split by field using the
-- separators set here. Separators can be changed at any point and in this
@@ -253,13 +255,18 @@ package GNAT.AWK is
procedure Set_FS
(Separators : String := Default_Separators;
- Session : Session_Type := Current_Session)
+ Session : Session_Type)
+ renames Set_Field_Separators;
+ procedure Set_FS
+ (Separators : String := Default_Separators)
renames Set_Field_Separators;
-- FS is the AWK abbreviation for above service
procedure Set_Field_Widths
(Field_Widths : Widths_Set;
- Session : Session_Type := Current_Session);
+ Session : Session_Type);
+ procedure Set_Field_Widths
+ (Field_Widths : Widths_Set);
-- This is another way to split a line by giving the length (in number of
-- characters) of each field in a line. Field widths can be changed at any
-- point and in this case the current line is split according to the new
@@ -270,7 +277,9 @@ package GNAT.AWK is
procedure Add_File
(Filename : String;
- Session : Session_Type := Current_Session);
+ Session : Session_Type);
+ procedure Add_File
+ (Filename : String);
-- Add Filename to the list of file to be processed. There is no limit on
-- the number of files that can be added. Files are processed in the order
-- they have been added (i.e. the filename list is FIFO). If Filename does
@@ -280,7 +289,11 @@ package GNAT.AWK is
(Directory : String;
Filenames : String;
Number_Of_Files_Added : out Natural;
- Session : Session_Type := Current_Session);
+ Session : Session_Type);
+ procedure Add_Files
+ (Directory : String;
+ Filenames : String;
+ Number_Of_Files_Added : out Natural);
-- Add all files matching the regular expression Filenames in the specified
-- directory to the list of file to be processed. There is no limit on
-- the number of files that can be added. Each file is processed in
@@ -293,44 +306,60 @@ package GNAT.AWK is
-------------------------------------
function Number_Of_Fields
- (Session : Session_Type := Current_Session) return Count;
+ (Session : Session_Type) return Count;
+ function Number_Of_Fields
+ return Count;
pragma Inline (Number_Of_Fields);
-- Returns the number of fields in the current record. It returns 0 when
-- no file is being processed.
function NF
- (Session : Session_Type := Current_Session) return Count
+ (Session : Session_Type) return Count
+ renames Number_Of_Fields;
+ function NF
+ return Count
renames Number_Of_Fields;
-- AWK abbreviation for above service
function Number_Of_File_Lines
- (Session : Session_Type := Current_Session) return Count;
+ (Session : Session_Type) return Count;
+ function Number_Of_File_Lines
+ return Count;
pragma Inline (Number_Of_File_Lines);
-- Returns the current line number in the processed file. It returns 0 when
-- no file is being processed.
- function FNR (Session : Session_Type := Current_Session) return Count
+ function FNR (Session : Session_Type) return Count
+ renames Number_Of_File_Lines;
+ function FNR return Count
renames Number_Of_File_Lines;
-- AWK abbreviation for above service
function Number_Of_Lines
- (Session : Session_Type := Current_Session) return Count;
+ (Session : Session_Type) return Count;
+ function Number_Of_Lines
+ return Count;
pragma Inline (Number_Of_Lines);
-- Returns the number of line processed until now. This is equal to number
-- of line in each already processed file plus FNR. It returns 0 when
-- no file is being processed.
- function NR (Session : Session_Type := Current_Session) return Count
+ function NR (Session : Session_Type) return Count
+ renames Number_Of_Lines;
+ function NR return Count
renames Number_Of_Lines;
-- AWK abbreviation for above service
function Number_Of_Files
- (Session : Session_Type := Current_Session) return Natural;
+ (Session : Session_Type) return Natural;
+ function Number_Of_Files
+ return Natural;
pragma Inline (Number_Of_Files);
-- Returns the number of files associated with Session. This is the total
-- number of files added with Add_File and Add_Files services.
- function File (Session : Session_Type := Current_Session) return String;
+ function File (Session : Session_Type) return String;
+ function File return String;
-- Returns the name of the file being processed. It returns the empty
-- string when no file is being processed.
@@ -340,21 +369,27 @@ package GNAT.AWK is
function Field
(Rank : Count;
- Session : Session_Type := Current_Session) return String;
+ Session : Session_Type) return String;
+ function Field
+ (Rank : Count) return String;
-- Returns field number Rank value of the current record. If Rank = 0 it
-- returns the current record (i.e. the line as read in the file). It
-- raises Field_Error if Rank > NF or if Session is not open.
function Field
(Rank : Count;
- Session : Session_Type := Current_Session) return Integer;
+ Session : Session_Type) return Integer;
+ function Field
+ (Rank : Count) return Integer;
-- Returns field number Rank value of the current record as an integer. It
-- raises Field_Error if Rank > NF or if Session is not open. It
-- raises Data_Error if the field value cannot be converted to an integer.
function Field
(Rank : Count;
- Session : Session_Type := Current_Session) return Float;
+ Session : Session_Type) return Float;
+ function Field
+ (Rank : Count) return Float;
-- Returns field number Rank value of the current record as a float. It
-- raises Field_Error if Rank > NF or if Session is not open. It
-- raises Data_Error if the field value cannot be converted to a float.
@@ -363,7 +398,11 @@ package GNAT.AWK is
type Discrete is (<>);
function Discrete_Field
(Rank : Count;
- Session : Session_Type := Current_Session) return Discrete;
+ Session : Session_Type) return Discrete;
+ generic
+ type Discrete is (<>);
+ function Discrete_Field_Current_Session
+ (Rank : Count) return Discrete;
-- Returns field number Rank value of the current record as a type
-- Discrete. It raises Field_Error if Rank > NF. It raises Data_Error if
-- the field value cannot be converted to type Discrete.
@@ -398,7 +437,11 @@ package GNAT.AWK is
(Field : Count;
Pattern : String;
Action : Action_Callback;
- Session : Session_Type := Current_Session);
+ Session : Session_Type);
+ procedure Register
+ (Field : Count;
+ Pattern : String;
+ Action : Action_Callback);
-- Register an Action associated with a Pattern. The pattern here is a
-- simple string that must match exactly the field number specified.
@@ -406,7 +449,11 @@ package GNAT.AWK is
(Field : Count;
Pattern : GNAT.Regpat.Pattern_Matcher;
Action : Action_Callback;
- Session : Session_Type := Current_Session);
+ Session : Session_Type);
+ procedure Register
+ (Field : Count;
+ Pattern : GNAT.Regpat.Pattern_Matcher;
+ Action : Action_Callback);
-- Register an Action associated with a Pattern. The pattern here is a
-- simple regular expression which must match the field number specified.
@@ -414,7 +461,11 @@ package GNAT.AWK is
(Field : Count;
Pattern : GNAT.Regpat.Pattern_Matcher;
Action : Match_Action_Callback;
- Session : Session_Type := Current_Session);
+ Session : Session_Type);
+ procedure Register
+ (Field : Count;
+ Pattern : GNAT.Regpat.Pattern_Matcher;
+ Action : Match_Action_Callback);
-- Same as above but it pass the set of matches to the action
-- procedure. This is useful to analyse further why and where a regular
-- expression did match.
@@ -422,7 +473,10 @@ package GNAT.AWK is
procedure Register
(Pattern : Pattern_Callback;
Action : Action_Callback;
- Session : Session_Type := Current_Session);
+ Session : Session_Type);
+ procedure Register
+ (Pattern : Pattern_Callback;
+ Action : Action_Callback);
-- Register an Action associated with a Pattern. The pattern here is a
-- function that must return a boolean. Action callback will be called if
-- the pattern callback returns True and nothing will happen if it is
@@ -431,7 +485,9 @@ package GNAT.AWK is
procedure Register
(Action : Action_Callback;
- Session : Session_Type := Current_Session);
+ Session : Session_Type);
+ procedure Register
+ (Action : Action_Callback);
-- Register an Action that will be called for every line. This is
-- equivalent to a Pattern_Callback function always returning True.
@@ -442,7 +498,10 @@ package GNAT.AWK is
procedure Parse
(Separators : String := Use_Current;
Filename : String := Use_Current;
- Session : Session_Type := Current_Session);
+ Session : Session_Type);
+ procedure Parse
+ (Separators : String := Use_Current;
+ Filename : String := Use_Current);
-- Launch the iterator, it will read every line in all specified
-- session's files. Registered callbacks are then called if the associated
-- pattern match. It is possible to specify a filename and a set of
@@ -482,7 +541,10 @@ package GNAT.AWK is
procedure Open
(Separators : String := Use_Current;
Filename : String := Use_Current;
- Session : Session_Type := Current_Session);
+ Session : Session_Type);
+ procedure Open
+ (Separators : String := Use_Current;
+ Filename : String := Use_Current);
-- Open the first file and initialize the unit. This must be called once
-- before using Get_Line. It is possible to specify a filename and a set of
-- separators directly. This offer a quick way to parse a single file.
@@ -493,7 +555,9 @@ package GNAT.AWK is
procedure Get_Line
(Callbacks : Callback_Mode := None;
- Session : Session_Type := Current_Session);
+ Session : Session_Type);
+ procedure Get_Line
+ (Callbacks : Callback_Mode := None);
-- Read a line from the current input file. If the file index is at the
-- end of the current input file (i.e. End_Of_File is True) then the
-- following file is opened. If there is no more file to be processed,
@@ -512,14 +576,18 @@ package GNAT.AWK is
-- or by an instantiation of For_Every_Line (see below).
function End_Of_Data
- (Session : Session_Type := Current_Session) return Boolean;
+ (Session : Session_Type) return Boolean;
+ function End_Of_Data
+ return Boolean;
pragma Inline (End_Of_Data);
-- Returns True if there is no more data to be processed in Session. It
-- means that the latest session's file is being processed and that
-- there is no more data to be read in this file (End_Of_File is True).
function End_Of_File
- (Session : Session_Type := Current_Session) return Boolean;
+ (Session : Session_Type) return Boolean;
+ function End_Of_File
+ return Boolean;
pragma Inline (End_Of_File);
-- Returns True when there is no more data to be processed on the current
-- session's file.
@@ -542,7 +610,13 @@ package GNAT.AWK is
(Separators : String := Use_Current;
Filename : String := Use_Current;
Callbacks : Callback_Mode := None;
- Session : Session_Type := Current_Session);
+ Session : Session_Type);
+ generic
+ with procedure Action (Quit : in out Boolean);
+ procedure For_Every_Line_Current_Session
+ (Separators : String := Use_Current;
+ Filename : String := Use_Current;
+ Callbacks : Callback_Mode := None);
-- This is another iterator. Action will be called for each new
-- record. The iterator's termination can be controlled by setting Quit
-- to True. It is by default set to False. It is possible to specify a