summaryrefslogtreecommitdiff
path: root/gcc/ada/scng.adb
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/ada/scng.adb')
-rw-r--r--gcc/ada/scng.adb330
1 files changed, 263 insertions, 67 deletions
diff --git a/gcc/ada/scng.adb b/gcc/ada/scng.adb
index f0a9013a8b8..3e2d7fa03fa 100644
--- a/gcc/ada/scng.adb
+++ b/gcc/ada/scng.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2015, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2016, 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- --
@@ -149,45 +149,131 @@ package body Scng is
-- Token_Type are detected by the compiler.
case Token is
- when Tok_Integer_Literal | Tok_Real_Literal | Tok_String_Literal |
- Tok_Char_Literal | Tok_Operator_Symbol | Tok_Identifier |
- Tok_Double_Asterisk | Tok_Ampersand | Tok_Minus | Tok_Plus |
- Tok_Asterisk | Tok_Mod | Tok_Rem | Tok_Slash | Tok_New |
- Tok_Abs | Tok_Others | Tok_Null | Tok_Dot | Tok_Apostrophe |
- Tok_Left_Paren | Tok_Delta | Tok_Digits | Tok_Range |
- Tok_Right_Paren | Tok_Comma | Tok_And | Tok_Or | Tok_Xor |
- Tok_Less | Tok_Equal | Tok_Greater | Tok_Not_Equal |
- Tok_Greater_Equal | Tok_Less_Equal | Tok_In | Tok_Not |
- Tok_Box | Tok_Colon_Equal | Tok_Colon | Tok_Greater_Greater |
- Tok_Abstract | Tok_Access | Tok_Aliased | Tok_All | Tok_Array |
- Tok_At | Tok_Body | Tok_Constant | Tok_Do | Tok_Is |
- Tok_Interface | Tok_Limited | Tok_Of | Tok_Out | Tok_Record |
- Tok_Renames | Tok_Reverse =>
-
+ when Tok_Abs
+ | Tok_Abstract
+ | Tok_Access
+ | Tok_Aliased
+ | Tok_All
+ | Tok_Ampersand
+ | Tok_And
+ | Tok_Apostrophe
+ | Tok_Array
+ | Tok_Asterisk
+ | Tok_At
+ | Tok_Body
+ | Tok_Box
+ | Tok_Char_Literal
+ | Tok_Colon
+ | Tok_Colon_Equal
+ | Tok_Comma
+ | Tok_Constant
+ | Tok_Delta
+ | Tok_Digits
+ | Tok_Do
+ | Tok_Dot
+ | Tok_Double_Asterisk
+ | Tok_Equal
+ | Tok_Greater
+ | Tok_Greater_Equal
+ | Tok_Greater_Greater
+ | Tok_Identifier
+ | Tok_In
+ | Tok_Integer_Literal
+ | Tok_Interface
+ | Tok_Is
+ | Tok_Left_Paren
+ | Tok_Less
+ | Tok_Less_Equal
+ | Tok_Limited
+ | Tok_Minus
+ | Tok_Mod
+ | Tok_New
+ | Tok_Not
+ | Tok_Not_Equal
+ | Tok_Null
+ | Tok_Of
+ | Tok_Operator_Symbol
+ | Tok_Or
+ | Tok_Others
+ | Tok_Out
+ | Tok_Plus
+ | Tok_Range
+ | Tok_Real_Literal
+ | Tok_Record
+ | Tok_Rem
+ | Tok_Renames
+ | Tok_Reverse
+ | Tok_Right_Paren
+ | Tok_Slash
+ | Tok_String_Literal
+ | Tok_Xor
+ =>
System.CRC32.Update
(System.CRC32.CRC32 (Checksum),
Character'Val (Token_Type'Pos (Token)));
when Tok_Some =>
-
System.CRC32.Update
(System.CRC32.CRC32 (Checksum),
Character'Val (Token_Type'Pos (Tok_Identifier)));
- when Tok_Tagged | Tok_Then | Tok_Less_Less | Tok_Abort | Tok_Accept |
- Tok_Case | Tok_Delay | Tok_Else | Tok_Elsif | Tok_End |
- Tok_Exception | Tok_Exit | Tok_Goto | Tok_If | Tok_Pragma |
- Tok_Raise | Tok_Requeue | Tok_Return | Tok_Select |
- Tok_Terminate | Tok_Until | Tok_When | Tok_Begin | Tok_Declare |
- Tok_For | Tok_Loop | Tok_While | Tok_Entry | Tok_Protected |
- Tok_Task | Tok_Type | Tok_Subtype | Tok_Overriding |
- Tok_Synchronized | Tok_Use | Tok_Function | Tok_Generic |
- Tok_Package | Tok_Procedure | Tok_Private | Tok_With |
- Tok_Separate | Tok_EOF | Tok_Semicolon | Tok_Arrow |
- Tok_Vertical_Bar | Tok_Dot_Dot | Tok_Project | Tok_Extends |
- Tok_External | Tok_External_As_List | Tok_Comment |
- Tok_End_Of_Line | Tok_Special | Tok_SPARK_Hide | No_Token =>
-
+ when No_Token
+ | Tok_Abort
+ | Tok_Accept
+ | Tok_Arrow
+ | Tok_Begin
+ | Tok_Case
+ | Tok_Comment
+ | Tok_Declare
+ | Tok_Delay
+ | Tok_Dot_Dot
+ | Tok_Else
+ | Tok_Elsif
+ | Tok_End
+ | Tok_End_Of_Line
+ | Tok_Entry
+ | Tok_EOF
+ | Tok_Exception
+ | Tok_Exit
+ | Tok_Extends
+ | Tok_External
+ | Tok_External_As_List
+ | Tok_For
+ | Tok_Function
+ | Tok_Generic
+ | Tok_Goto
+ | Tok_If
+ | Tok_Less_Less
+ | Tok_Loop
+ | Tok_Overriding
+ | Tok_Package
+ | Tok_Pragma
+ | Tok_Private
+ | Tok_Procedure
+ | Tok_Project
+ | Tok_Protected
+ | Tok_Raise
+ | Tok_Requeue
+ | Tok_Return
+ | Tok_Select
+ | Tok_Semicolon
+ | Tok_Separate
+ | Tok_SPARK_Hide
+ | Tok_Special
+ | Tok_Subtype
+ | Tok_Synchronized
+ | Tok_Tagged
+ | Tok_Task
+ | Tok_Terminate
+ | Tok_Then
+ | Tok_Type
+ | Tok_Until
+ | Tok_Use
+ | Tok_Vertical_Bar
+ | Tok_When
+ | Tok_While
+ | Tok_With
+ =>
System.CRC32.Update
(System.CRC32.CRC32 (Checksum),
Character'Val (Token_Type'Pos (Token_Type'Pred (Token))));
@@ -205,54 +291,142 @@ package body Scng is
-- Token_Type are detected by the compiler.
case Token is
- when Tok_Integer_Literal | Tok_Real_Literal | Tok_String_Literal |
- Tok_Char_Literal | Tok_Operator_Symbol | Tok_Identifier |
- Tok_Double_Asterisk | Tok_Ampersand | Tok_Minus | Tok_Plus |
- Tok_Asterisk | Tok_Mod | Tok_Rem | Tok_Slash | Tok_New |
- Tok_Abs | Tok_Others | Tok_Null | Tok_Dot | Tok_Apostrophe |
- Tok_Left_Paren | Tok_Delta | Tok_Digits | Tok_Range |
- Tok_Right_Paren | Tok_Comma | Tok_And | Tok_Or | Tok_Xor |
- Tok_Less | Tok_Equal | Tok_Greater | Tok_Not_Equal |
- Tok_Greater_Equal | Tok_Less_Equal | Tok_In | Tok_Not |
- Tok_Box | Tok_Colon_Equal | Tok_Colon | Tok_Greater_Greater |
- Tok_Abstract | Tok_Access | Tok_Aliased | Tok_All | Tok_Array |
- Tok_At | Tok_Body | Tok_Constant | Tok_Do | Tok_Is =>
-
+ when Tok_Abs
+ | Tok_Abstract
+ | Tok_Access
+ | Tok_Aliased
+ | Tok_All
+ | Tok_Ampersand
+ | Tok_And
+ | Tok_Apostrophe
+ | Tok_Array
+ | Tok_Asterisk
+ | Tok_At
+ | Tok_Body
+ | Tok_Box
+ | Tok_Char_Literal
+ | Tok_Colon
+ | Tok_Colon_Equal
+ | Tok_Comma
+ | Tok_Constant
+ | Tok_Delta
+ | Tok_Digits
+ | Tok_Do
+ | Tok_Dot
+ | Tok_Double_Asterisk
+ | Tok_Equal
+ | Tok_Greater
+ | Tok_Greater_Equal
+ | Tok_Greater_Greater
+ | Tok_Identifier
+ | Tok_In
+ | Tok_Integer_Literal
+ | Tok_Is
+ | Tok_Left_Paren
+ | Tok_Less
+ | Tok_Less_Equal
+ | Tok_Minus
+ | Tok_Mod
+ | Tok_New
+ | Tok_Not
+ | Tok_Not_Equal
+ | Tok_Null
+ | Tok_Operator_Symbol
+ | Tok_Or
+ | Tok_Others
+ | Tok_Plus
+ | Tok_Range
+ | Tok_Real_Literal
+ | Tok_Rem
+ | Tok_Right_Paren
+ | Tok_Slash
+ | Tok_String_Literal
+ | Tok_Xor
+ =>
System.CRC32.Update
(System.CRC32.CRC32 (Checksum),
Character'Val (Token_Type'Pos (Token)));
- when Tok_Interface | Tok_Some | Tok_Overriding | Tok_Synchronized =>
+ when Tok_Interface
+ | Tok_Overriding
+ | Tok_Some
+ | Tok_Synchronized
+ =>
System.CRC32.Update
(System.CRC32.CRC32 (Checksum),
Character'Val (Token_Type'Pos (Tok_Identifier)));
- when Tok_Limited | Tok_Of | Tok_Out | Tok_Record |
- Tok_Renames | Tok_Reverse =>
-
+ when Tok_Limited
+ | Tok_Of
+ | Tok_Out
+ | Tok_Record
+ | Tok_Renames
+ | Tok_Reverse
+ =>
System.CRC32.Update
(System.CRC32.CRC32 (Checksum),
Character'Val (Token_Type'Pos (Token) - 1));
- when Tok_Tagged | Tok_Then | Tok_Less_Less | Tok_Abort | Tok_Accept |
- Tok_Case | Tok_Delay | Tok_Else | Tok_Elsif | Tok_End |
- Tok_Exception | Tok_Exit | Tok_Goto | Tok_If | Tok_Pragma |
- Tok_Raise | Tok_Requeue | Tok_Return | Tok_Select |
- Tok_Terminate | Tok_Until | Tok_When | Tok_Begin | Tok_Declare |
- Tok_For | Tok_Loop | Tok_While | Tok_Entry | Tok_Protected |
- Tok_Task | Tok_Type | Tok_Subtype =>
-
+ when Tok_Abort
+ | Tok_Accept
+ | Tok_Begin
+ | Tok_Case
+ | Tok_Declare
+ | Tok_Delay
+ | Tok_Else
+ | Tok_Elsif
+ | Tok_End
+ | Tok_Entry
+ | Tok_Exception
+ | Tok_Exit
+ | Tok_For
+ | Tok_Goto
+ | Tok_If
+ | Tok_Less_Less
+ | Tok_Loop
+ | Tok_Pragma
+ | Tok_Protected
+ | Tok_Raise
+ | Tok_Requeue
+ | Tok_Return
+ | Tok_Select
+ | Tok_Subtype
+ | Tok_Tagged
+ | Tok_Task
+ | Tok_Terminate
+ | Tok_Then
+ | Tok_Type
+ | Tok_Until
+ | Tok_When
+ | Tok_While
+ =>
System.CRC32.Update
(System.CRC32.CRC32 (Checksum),
Character'Val (Token_Type'Pos (Token) - 2));
- when Tok_Use | Tok_Function | Tok_Generic |
- Tok_Package | Tok_Procedure | Tok_Private | Tok_With |
- Tok_Separate | Tok_EOF | Tok_Semicolon | Tok_Arrow |
- Tok_Vertical_Bar | Tok_Dot_Dot | Tok_Project | Tok_Extends |
- Tok_External | Tok_External_As_List | Tok_Comment |
- Tok_End_Of_Line | Tok_Special | Tok_SPARK_Hide | No_Token =>
-
+ when No_Token
+ | Tok_Arrow
+ | Tok_Comment
+ | Tok_Dot_Dot
+ | Tok_End_Of_Line
+ | Tok_EOF
+ | Tok_Extends
+ | Tok_External
+ | Tok_External_As_List
+ | Tok_Function
+ | Tok_Generic
+ | Tok_Package
+ | Tok_Private
+ | Tok_Procedure
+ | Tok_Project
+ | Tok_Semicolon
+ | Tok_Separate
+ | Tok_SPARK_Hide
+ | Tok_Special
+ | Tok_Use
+ | Tok_Vertical_Bar
+ | Tok_With
+ =>
System.CRC32.Update
(System.CRC32.CRC32 (Checksum),
Character'Val (Token_Type'Pos (Token) - 4));
@@ -2217,9 +2391,32 @@ package body Scng is
-- Invalid control characters
- when NUL | SOH | STX | ETX | EOT | ENQ | ACK | BEL | BS | ASCII.SO |
- SI | DLE | DC1 | DC2 | DC3 | DC4 | NAK | SYN | ETB | CAN |
- EM | FS | GS | RS | US | DEL
+ when ACK
+ | ASCII.SO
+ | BEL
+ | BS
+ | CAN
+ | DC1
+ | DC2
+ | DC3
+ | DC4
+ | DEL
+ | DLE
+ | EM
+ | ENQ
+ | EOT
+ | ETB
+ | ETX
+ | FS
+ | GS
+ | NAK
+ | NUL
+ | RS
+ | SI
+ | SOH
+ | STX
+ | SYN
+ | US
=>
Error_Illegal_Character;
@@ -2322,7 +2519,6 @@ package body Scng is
-- initial character of a wide character sequence.
<<Scan_Wide_Character>>
-
declare
Code : Char_Code;
Cat : Category;