OSDN Git Service

2007-04-20 Vincent Celier <celier@adacore.com>
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 6 Jun 2007 10:40:36 +0000 (10:40 +0000)
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 6 Jun 2007 10:40:36 +0000 (10:40 +0000)
* prep.ads, prep.adb (Expression): New Boolean parameter Complemented,
defaulted to False.
In the "not" case, recursive call with Complemented set to True.
Do not allow "or" or "and" operators when Complemented is True.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@125441 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ada/prep.adb
gcc/ada/prep.ads

index 09ba3bf..d6b5d0f 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 2002-2006, Free Software Foundation, Inc.         --
+--          Copyright (C) 2002-2007, Free Software Foundation, Inc.         --
 --                                                                          --
 -- 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- --
@@ -26,7 +26,6 @@
 
 with Csets;    use Csets;
 with Err_Vars; use Err_Vars;
-with Namet;    use Namet;
 with Opt;      use Opt;
 with Osint;    use Osint;
 with Output;   use Output;
@@ -191,7 +190,9 @@ package body Prep is
    function Deleting return Boolean;
    --  Return True if code should be deleted or commented out
 
-   function Expression (Evaluate_It : Boolean) return Boolean;
+   function Expression
+     (Evaluate_It  : Boolean;
+      Complemented : Boolean := False) return Boolean;
    --  Evaluate a condition in an #if or an #elsif statement.
    --  If Evaluate_It is False, the condition is effectively evaluated,
    --  otherwise, only the syntax is checked.
@@ -361,7 +362,6 @@ package body Prep is
 
       if Pp_States.Last = Ground then
          return False;
-
       else
          return Pp_States.Table (Pp_States.Last).Deleting;
       end if;
@@ -371,7 +371,10 @@ package body Prep is
    -- Expression --
    ----------------
 
-   function Expression (Evaluate_It : Boolean) return Boolean is
+   function Expression
+     (Evaluate_It  : Boolean;
+      Complemented : Boolean := False) return Boolean
+   is
       Evaluation : Boolean := Evaluate_It;
       --  Is set to False after an "or else" when left term is True and
       --  after an "and then" when left term is False.
@@ -420,7 +423,8 @@ package body Prep is
                --  not expression
 
                Scan.all;
-               Current_Result := not Expression (Evaluation);
+               Current_Result :=
+                 not Expression (Evaluation, Complemented => True);
 
             when Tok_Identifier =>
                Symbol_Name1 := Token_Name;
@@ -601,7 +605,12 @@ package body Prep is
          --  Check the next operator
 
          if Token = Tok_And then
-            if Current_Operator = Op_Or then
+            if Complemented then
+               Error_Msg
+                ("mixing NOT and AND is not allowed, parentheses are required",
+                 Token_Ptr);
+
+            elsif Current_Operator = Op_Or then
                Error_Msg ("mixing OR and AND is not allowed", Token_Ptr);
             end if;
 
@@ -617,7 +626,12 @@ package body Prep is
             end if;
 
          elsif Token = Tok_Or then
-            if Current_Operator = Op_And then
+            if Complemented then
+               Error_Msg
+                 ("mixing NOT and OR is not allowed, parentheses are required",
+                  Token_Ptr);
+
+            elsif Current_Operator = Op_And then
                Error_Msg ("mixing AND and OR is not allowed", Token_Ptr);
             end if;
 
index ab45ef2..043b87c 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 2002-2006, Free Software Foundation, Inc.         --
+--          Copyright (C) 2002-2007, Free Software Foundation, Inc.         --
 --                                                                          --
 -- 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- --
@@ -26,7 +26,8 @@
 
 with GNAT.Dynamic_Tables;
 
-with Types;  use Types;
+with Namet; use Namet;
+with Types; use Types;
 
 package Prep is