b740cf2853
gcc/ada/ * alloc.ads, aspects.adb, aspects.ads, atree.adb, atree.ads, casing.adb, casing.ads, csets.adb, csets.ads, debug.adb, debug.ads, einfo.adb, einfo.ads, elists.adb, elists.ads, fname.adb, fname.ads, gnatvsn.adb, gnatvsn.ads, hostparm.ads, indepsw-aix.adb, indepsw-darwin.adb, indepsw-gnu.adb, indepsw.adb, indepsw.ads, krunch.adb, krunch.ads, lib-list.adb, lib-sort.adb, lib.adb, lib.ads, namet-sp.adb, namet-sp.ads, namet.adb, namet.ads, nlists.adb, nlists.ads, opt.adb, opt.ads, output.adb, output.ads, rident.ads, scans.adb, scans.ads, scil_ll.adb, scil_ll.ads, sem_aux.ads, sem_aux.adb, sfn_scan.adb, sinfo.adb, sinfo.ads, sinput.adb, sinput.ads, snames.adb-tmpl, snames.ads-tmpl, stand.ads, stringt.adb, stringt.ads, table.adb, table.ads, types.adb, types.ads, uintp.adb, uintp.ads, uname.adb, uname.ads, urealp.adb, urealp.ads, vast.adb, vast.ads, widechar.adb, widechar.ads: Update header.
202 lines
8.8 KiB
Ada
202 lines
8.8 KiB
Ada
------------------------------------------------------------------------------
|
|
-- --
|
|
-- GNAT COMPILER COMPONENTS --
|
|
-- --
|
|
-- S C A N S --
|
|
-- --
|
|
-- B o d y --
|
|
-- --
|
|
-- Copyright (C) 1992-2020, 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- --
|
|
-- ware Foundation; either version 3, or (at your option) any later ver- --
|
|
-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
|
|
-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
|
|
-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
|
|
-- for more details. You should have received a copy of the GNU General --
|
|
-- Public License distributed with GNAT; see file COPYING3. If not, go to --
|
|
-- http://www.gnu.org/licenses for a complete copy of the license. --
|
|
-- --
|
|
-- GNAT was originally developed by the GNAT team at New York University. --
|
|
-- Extensive contributions were provided by Ada Core Technologies Inc. --
|
|
-- --
|
|
------------------------------------------------------------------------------
|
|
|
|
with Snames; use Snames;
|
|
|
|
package body Scans is
|
|
|
|
-----------------------------
|
|
-- Initialize_Ada_Keywords --
|
|
-----------------------------
|
|
|
|
procedure Initialize_Ada_Keywords is
|
|
procedure Set_Reserved (N : Name_Id; T : Token_Type);
|
|
pragma Inline (Set_Reserved);
|
|
-- Set given name as a reserved word (T is the corresponding token)
|
|
|
|
------------------
|
|
-- Set_Reserved --
|
|
------------------
|
|
|
|
procedure Set_Reserved (N : Name_Id; T : Token_Type) is
|
|
begin
|
|
-- Set up Token_Type values in Names table entries for reserved
|
|
-- words. We use the Pos value of the Token_Type value. Note that
|
|
-- Is_Keyword_Name relies on the fact that Token_Type'Val (0) is not
|
|
-- a reserved word.
|
|
|
|
Set_Name_Table_Byte (N, Token_Type'Pos (T));
|
|
end Set_Reserved;
|
|
|
|
-- Start of processing for Initialize_Ada_Keywords
|
|
|
|
begin
|
|
-- Establish reserved words
|
|
|
|
Set_Reserved (Name_Abort, Tok_Abort);
|
|
Set_Reserved (Name_Abs, Tok_Abs);
|
|
Set_Reserved (Name_Abstract, Tok_Abstract);
|
|
Set_Reserved (Name_Accept, Tok_Accept);
|
|
Set_Reserved (Name_Access, Tok_Access);
|
|
Set_Reserved (Name_And, Tok_And);
|
|
Set_Reserved (Name_Aliased, Tok_Aliased);
|
|
Set_Reserved (Name_All, Tok_All);
|
|
Set_Reserved (Name_Array, Tok_Array);
|
|
Set_Reserved (Name_At, Tok_At);
|
|
Set_Reserved (Name_Begin, Tok_Begin);
|
|
Set_Reserved (Name_Body, Tok_Body);
|
|
Set_Reserved (Name_Case, Tok_Case);
|
|
Set_Reserved (Name_Constant, Tok_Constant);
|
|
Set_Reserved (Name_Declare, Tok_Declare);
|
|
Set_Reserved (Name_Delay, Tok_Delay);
|
|
Set_Reserved (Name_Delta, Tok_Delta);
|
|
Set_Reserved (Name_Digits, Tok_Digits);
|
|
Set_Reserved (Name_Do, Tok_Do);
|
|
Set_Reserved (Name_Else, Tok_Else);
|
|
Set_Reserved (Name_Elsif, Tok_Elsif);
|
|
Set_Reserved (Name_End, Tok_End);
|
|
Set_Reserved (Name_Entry, Tok_Entry);
|
|
Set_Reserved (Name_Exception, Tok_Exception);
|
|
Set_Reserved (Name_Exit, Tok_Exit);
|
|
Set_Reserved (Name_For, Tok_For);
|
|
Set_Reserved (Name_Function, Tok_Function);
|
|
Set_Reserved (Name_Generic, Tok_Generic);
|
|
Set_Reserved (Name_Goto, Tok_Goto);
|
|
Set_Reserved (Name_If, Tok_If);
|
|
Set_Reserved (Name_In, Tok_In);
|
|
Set_Reserved (Name_Is, Tok_Is);
|
|
Set_Reserved (Name_Limited, Tok_Limited);
|
|
Set_Reserved (Name_Loop, Tok_Loop);
|
|
Set_Reserved (Name_Mod, Tok_Mod);
|
|
Set_Reserved (Name_New, Tok_New);
|
|
Set_Reserved (Name_Not, Tok_Not);
|
|
Set_Reserved (Name_Null, Tok_Null);
|
|
Set_Reserved (Name_Of, Tok_Of);
|
|
Set_Reserved (Name_Or, Tok_Or);
|
|
Set_Reserved (Name_Others, Tok_Others);
|
|
Set_Reserved (Name_Out, Tok_Out);
|
|
Set_Reserved (Name_Package, Tok_Package);
|
|
Set_Reserved (Name_Pragma, Tok_Pragma);
|
|
Set_Reserved (Name_Private, Tok_Private);
|
|
Set_Reserved (Name_Procedure, Tok_Procedure);
|
|
Set_Reserved (Name_Protected, Tok_Protected);
|
|
Set_Reserved (Name_Raise, Tok_Raise);
|
|
Set_Reserved (Name_Range, Tok_Range);
|
|
Set_Reserved (Name_Record, Tok_Record);
|
|
Set_Reserved (Name_Rem, Tok_Rem);
|
|
Set_Reserved (Name_Renames, Tok_Renames);
|
|
Set_Reserved (Name_Requeue, Tok_Requeue);
|
|
Set_Reserved (Name_Return, Tok_Return);
|
|
Set_Reserved (Name_Reverse, Tok_Reverse);
|
|
Set_Reserved (Name_Select, Tok_Select);
|
|
Set_Reserved (Name_Separate, Tok_Separate);
|
|
Set_Reserved (Name_Subtype, Tok_Subtype);
|
|
Set_Reserved (Name_Tagged, Tok_Tagged);
|
|
Set_Reserved (Name_Task, Tok_Task);
|
|
Set_Reserved (Name_Terminate, Tok_Terminate);
|
|
Set_Reserved (Name_Then, Tok_Then);
|
|
Set_Reserved (Name_Type, Tok_Type);
|
|
Set_Reserved (Name_Until, Tok_Until);
|
|
Set_Reserved (Name_Use, Tok_Use);
|
|
Set_Reserved (Name_When, Tok_When);
|
|
Set_Reserved (Name_While, Tok_While);
|
|
Set_Reserved (Name_With, Tok_With);
|
|
Set_Reserved (Name_Xor, Tok_Xor);
|
|
|
|
-- Ada 2005 reserved words
|
|
|
|
Set_Reserved (Name_Interface, Tok_Interface);
|
|
Set_Reserved (Name_Overriding, Tok_Overriding);
|
|
Set_Reserved (Name_Synchronized, Tok_Synchronized);
|
|
|
|
-- Ada 2012 reserved words
|
|
|
|
Set_Reserved (Name_Some, Tok_Some);
|
|
end Initialize_Ada_Keywords;
|
|
|
|
------------------
|
|
-- Keyword_Name --
|
|
------------------
|
|
|
|
function Keyword_Name (Token : Token_Type) return Name_Id is
|
|
Tok : String := Token'Img;
|
|
pragma Assert (Tok (1 .. 4) = "TOK_");
|
|
Name : String renames Tok (5 .. Tok'Last);
|
|
|
|
begin
|
|
-- Convert to lower case. We don't want to add a dependence on a
|
|
-- general-purpose To_Lower routine, so we convert "by hand" here.
|
|
-- All keywords use 7-bit ASCII letters only, so this works.
|
|
|
|
for J in Name'Range loop
|
|
pragma Assert (Name (J) in 'A' .. 'Z');
|
|
Name (J) :=
|
|
Character'Val (Character'Pos (Name (J)) +
|
|
(Character'Pos ('a') - Character'Pos ('A')));
|
|
end loop;
|
|
|
|
return Name_Find (Name);
|
|
end Keyword_Name;
|
|
|
|
------------------------
|
|
-- Restore_Scan_State --
|
|
------------------------
|
|
|
|
procedure Restore_Scan_State (Saved_State : Saved_Scan_State) is
|
|
begin
|
|
Scan_Ptr := Saved_State.Save_Scan_Ptr;
|
|
Token := Saved_State.Save_Token;
|
|
Token_Ptr := Saved_State.Save_Token_Ptr;
|
|
Current_Line_Start := Saved_State.Save_Current_Line_Start;
|
|
Start_Column := Saved_State.Save_Start_Column;
|
|
Checksum := Saved_State.Save_Checksum;
|
|
First_Non_Blank_Location := Saved_State.Save_First_Non_Blank_Location;
|
|
Token_Node := Saved_State.Save_Token_Node;
|
|
Token_Name := Saved_State.Save_Token_Name;
|
|
Prev_Token := Saved_State.Save_Prev_Token;
|
|
Prev_Token_Ptr := Saved_State.Save_Prev_Token_Ptr;
|
|
end Restore_Scan_State;
|
|
|
|
---------------------
|
|
-- Save_Scan_State --
|
|
---------------------
|
|
|
|
procedure Save_Scan_State (Saved_State : out Saved_Scan_State) is
|
|
begin
|
|
Saved_State.Save_Scan_Ptr := Scan_Ptr;
|
|
Saved_State.Save_Token := Token;
|
|
Saved_State.Save_Token_Ptr := Token_Ptr;
|
|
Saved_State.Save_Current_Line_Start := Current_Line_Start;
|
|
Saved_State.Save_Start_Column := Start_Column;
|
|
Saved_State.Save_Checksum := Checksum;
|
|
Saved_State.Save_First_Non_Blank_Location := First_Non_Blank_Location;
|
|
Saved_State.Save_Token_Node := Token_Node;
|
|
Saved_State.Save_Token_Name := Token_Name;
|
|
Saved_State.Save_Prev_Token := Prev_Token;
|
|
Saved_State.Save_Prev_Token_Ptr := Prev_Token_Ptr;
|
|
end Save_Scan_State;
|
|
|
|
end Scans;
|