diff options
author | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-06-06 10:40:36 +0000 |
---|---|---|
committer | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-06-06 10:40:36 +0000 |
commit | d3ac8b3a5c0c76eba7ad2f6c0d00bfabf6cddabd (patch) | |
tree | be45f9bbf5629efc95fca1d2011930badfdacb2e /gcc/ada/prep.adb | |
parent | 5b28f9a47c45c0096e82495c7a494f6475613749 (diff) | |
download | gcc-d3ac8b3a5c0c76eba7ad2f6c0d00bfabf6cddabd.tar.gz |
2007-04-20 Vincent Celier <celier@adacore.com>
* 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
Diffstat (limited to 'gcc/ada/prep.adb')
-rw-r--r-- | gcc/ada/prep.adb | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/gcc/ada/prep.adb b/gcc/ada/prep.adb index 09ba3bfb197..d6b5d0fa297 100644 --- a/gcc/ada/prep.adb +++ b/gcc/ada/prep.adb @@ -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; |