summaryrefslogtreecommitdiff
path: root/gcc/ada/prep.adb
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/ada/prep.adb')
-rw-r--r--gcc/ada/prep.adb30
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;