diff options
author | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-12-09 17:20:41 +0000 |
---|---|---|
committer | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-12-09 17:20:41 +0000 |
commit | 639e37b099987c5cfa784ba45bb4f4fb436f2d6c (patch) | |
tree | 21428c113344d95601e83f6467ff99bcce3dbd88 /gcc/ada/sem_prag.adb | |
parent | ee894fd4190387d507b5e53635416215b7d00858 (diff) | |
download | gcc-639e37b099987c5cfa784ba45bb4f4fb436f2d6c.tar.gz |
2005-12-05 Robert Dewar <dewar@adacore.com>
* sem_prag.adb: Processing for new pragma Complete_Representation
(Analyze_Pragma, case Debug): Implement two argument form.
* par-prag.adb: Entry for new pragma Complete_Representation
(Prag, case Debug): Recognize two argument form of pragma Debug
New interface for Set_Style_Check_Options.
* sem_ch13.adb: Implement new pragma Complete_Representation.
* snames.adb, snames.ads, snames.h: Entry for new pragma
Complete_Representation.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@108299 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/sem_prag.adb')
-rw-r--r-- | gcc/ada/sem_prag.adb | 61 |
1 files changed, 50 insertions, 11 deletions
diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb index b06f117e158..1610c2848a7 100644 --- a/gcc/ada/sem_prag.adb +++ b/gcc/ada/sem_prag.adb @@ -4967,6 +4967,21 @@ package body Sem_Prag is end if; end Compile_Time_Warning; + ----------------------------- + -- Complete_Representation -- + ----------------------------- + + -- pragma Complete_Representation; + + when Pragma_Complete_Representation => + GNAT_Pragma; + Check_Arg_Count (0); + + if Nkind (Parent (N)) /= N_Record_Representation_Clause then + Error_Pragma + ("pragma & must appear within record representation clause"); + end if; + ---------------------------- -- Complex_Representation -- ---------------------------- @@ -5573,18 +5588,39 @@ package body Sem_Prag is -- Debug -- ----------- - -- pragma Debug (PROCEDURE_CALL_STATEMENT); + -- pragma Debug ([boolean_EXPRESSION,] PROCEDURE_CALL_STATEMENT); + + when Pragma_Debug => Debug : declare + Cond : Node_Id; - when Pragma_Debug => Debug : begin + begin GNAT_Pragma; - -- Rewrite into a conditional with a static condition + Cond := + New_Occurrence_Of + (Boolean_Literals (Debug_Pragmas_Enabled and Expander_Active), + Loc); + + if Arg_Count = 2 then + Cond := + Make_And_Then (Loc, + Left_Opnd => Relocate_Node (Cond), + Right_Opnd => Expression (Arg1)); + end if; + + -- Rewrite into a conditional with an appropriate condition. We + -- wrap the procedure call in a block so that overhead from e.g. + -- use of the secondary stack does not generate execution overhead + -- for suppressed conditions. Rewrite (N, Make_Implicit_If_Statement (N, - Condition => New_Occurrence_Of (Boolean_Literals ( - Debug_Pragmas_Enabled and Expander_Active), Loc), - Then_Statements => New_List ( - Relocate_Node (Debug_Statement (N))))); + Condition => Cond, + Then_Statements => New_List ( + Make_Block_Statement (Loc, + Handled_Statement_Sequence => + Make_Handled_Sequence_Of_Statements (Loc, + Statements => New_List ( + Relocate_Node (Debug_Statement (N)))))))); Analyze (N); end Debug; @@ -9587,17 +9623,20 @@ package body Sem_Prag is exit when not In_Character_Range (C); Options (J) := Get_Character (C); + -- If at end of string, set options. As per discussion + -- above, no need to check for errors, since we issued + -- them in the parser. + if J = Slen then Set_Style_Check_Options (Options); exit; - else - J := J + 1; end if; + + J := J + 1; end loop; end; elsif Nkind (A) = N_Identifier then - if Chars (A) = Name_All_Checks then Set_Default_Style_Check_Options; @@ -9606,7 +9645,6 @@ package body Sem_Prag is elsif Chars (A) = Name_Off then Style_Check := False; - end if; end if; end if; @@ -10664,6 +10702,7 @@ package body Sem_Prag is Pragma_Comment => 0, Pragma_Common_Object => -1, Pragma_Compile_Time_Warning => -1, + Pragma_Complete_Representation => 0, Pragma_Complex_Representation => 0, Pragma_Component_Alignment => -1, Pragma_Controlled => 0, |