diff options
author | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-04-01 10:04:40 +0000 |
---|---|---|
committer | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-04-01 10:04:40 +0000 |
commit | 314a23b6eb1ed66ddce188a8e105c8050b99b87e (patch) | |
tree | b338d3df4e73cbb9b9be4f8a5366b15275287114 /gcc/ada/ali-util.adb | |
parent | ac7a21466424c6756e6670dd1943d67497962ac1 (diff) | |
download | gcc-314a23b6eb1ed66ddce188a8e105c8050b99b87e.tar.gz |
2004-04-01 Robert Dewar <dewar@gnat.com>
* checks.adb: Minor reformatting throughout
Note that prev checkin added RM reference to alignment warning
2004-04-01 Ed Schonberg <schonberg@gnat.com>
* exp_aggr.adb (Get_Component_Val): Treat a string literal as
non-static when building aggregate for bit-packed array.
* exp_ch4.adb (Expand_N_Slice): If a packed slice is an actual of a
function call that is itself the actual in a procedure call, build
temporary for it.
* exp_pakd.adb (Expand_Bit_Packed_Element_Set): If right-hand side is
a string literal, create a temporary for it, constant folding only
handles scalars here.
2004-04-01 Vincent Celier <celier@gnat.com>
* ali-util.adb (Post_Scan, Error_Msg, Error_Msg_S, Error_Msg_SC,
Error_Msg_SP): New empty procedures to instantiate the Scanner.
(Style, Scanner): Instantiations of Styleg and Scng to be able to scan
tokens.
(Accumulate_Checksum, Initialize_Checksum): Remove procedures.
(Get_File_Checksum): Use the instantiated scanner to scan all the tokens
and get the checksum.
* make.adb (Gnatmake): Do not insert into Q the Main_Source if it is
already in the Q.
Increase the Marking_Label at the end of the Multiple_Main_Loop,
instead of at the beginning.
* osint.adb (Lib_File_Name): Use Multi_Unit_Index_Character, not '~'
directly.
(Osint package elaboration): Change Multi_Unit_Index_Character to '$' if
on VMS.
* osint.ads (Multi_Unit_Index_Character): New Character global variable
* osint-c.adb (Set_Library_Info_Name): Use Multi_Unit_Index_Character,
not '~' directly.
* par.adb: Remove test on file name to detect language defined units.
Add test on unit name, after parsing, to detect language defined units
that are not compiled with -gnatg (except System.RPC and its children)
* par-ch10.adb (P_Compilation_Unit): In multi-unit sources, scan the
following units without style checking.
* switch-c.adb: Change -gnatC to -gnateI
* usage.adb: Document new switch -gnateInnn
* scng.adb (Accumulate_Token_Checksum): New procedure
(Scan): Call Accumulate_Token_Checksum after each identifier, reserved
word or literal number.
(Scan.Nlit.Scan_Integer): Do not accumulate internal '_' in litteral
numbers.
2004-04-01 Thomas Quinot <quinot@act-europe.fr>
* a-tasatt.adb,
g-comlin.adb, sinput-c.adb, s-secsta.adb, s-tpobop.adb,
switch-m.adb, 56taprop.adb, 5ginterr.adb, 5gmastop.adb,
5staprop.adb, 5vinterr.adb, 5vtaprop.adb, 5vtpopde.adb,
5vtpopde.adb: Add missing 'constant' keywords.
2004-04-01 Javier Miranda <miranda@gnat.com>
* par-ch4.adb: (P_Allocator): Code cleanup
* sem_ch3.adb (Access_Definition): Properly set the null-excluding
attribute.
* sinfo.ads: Complete documentation of previous change
2004-04-01 GNAT Script <nobody@gnat.com>
* Make-lang.in: Makefile automatically updated
2004-04-01 Pascal Obry <obry@gnat.com>
* gnatlink.adb (Process_Binder_File): Remove duplicate linker options
only on VMS. This special handling was done because an old GNU/ld bug
on Windows which has been fixed.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@80290 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/ali-util.adb')
-rw-r--r-- | gcc/ada/ali-util.adb | 288 |
1 files changed, 99 insertions, 189 deletions
diff --git a/gcc/ada/ali-util.adb b/gcc/ada/ali-util.adb index 2d5ed8d4ab8..07ed8f14c44 100644 --- a/gcc/ada/ali-util.adb +++ b/gcc/ada/ali-util.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2003 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2004 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- -- @@ -31,12 +31,39 @@ with Namet; use Namet; with Opt; use Opt; with Output; use Output; with Osint; use Osint; - -with System.CRC32; -with System.Memory; +with Scans; use Scans; +with Scng; +with Sinput.C; +with Snames; use Snames; +with Styleg; package body ALI.Util is + -- Empty procedures needed to instantiate Scng. Error procedures are + -- empty, because we don't want to report any errors when computing + -- a source checksum. + + procedure Post_Scan; + + procedure Error_Msg (Msg : String; Flag_Location : Source_Ptr); + + procedure Error_Msg_S (Msg : String); + + procedure Error_Msg_SC (Msg : String); + + procedure Error_Msg_SP (Msg : String); + + -- Instantiation of Styleg, needed to instantiate Scng + + package Style is new Styleg + (Error_Msg, Error_Msg_S, Error_Msg_SC, Error_Msg_SP); + + -- A Scanner is needed to get checksum of a source (procedure + -- Get_File_Checksum). + + package Scanner is new Scng + (Post_Scan, Error_Msg, Error_Msg_S, Error_Msg_SC, Error_Msg_SP, Style); + type Header_Num is range 0 .. 1_000; function Hash (F : File_Name_Type) return Header_Num; @@ -50,33 +77,6 @@ package body ALI.Util is Hash => Hash, Equal => "="); - ----------------------- - -- Local Subprograms -- - ----------------------- - - procedure Accumulate_Checksum (C : Character; Csum : in out Word); - pragma Inline (Accumulate_Checksum); - -- This routine accumulates the checksum given character C. During the - -- scanning of a source file, this routine is called with every character - -- in the source, excluding blanks, and all control characters (except - -- that ESC is included in the checksum). Upper case letters not in string - -- literals are folded by the caller. See Sinput spec for the documentation - -- of the checksum algorithm. Note: checksum values are only used if we - -- generate code, so it is not necessary to worry about making the right - -- sequence of calls in any error situation. - - procedure Initialize_Checksum (Csum : out Word); - -- Sets initial value of Csum before any calls to Accumulate_Checksum - - ------------------------- - -- Accumulate_Checksum -- - ------------------------- - - procedure Accumulate_Checksum (C : Character; Csum : in out Word) is - begin - System.CRC32.Update (System.CRC32.CRC32 (Csum), C); - end Accumulate_Checksum; - --------------------- -- Checksums_Match -- --------------------- @@ -86,182 +86,92 @@ package body ALI.Util is return Checksum1 = Checksum2 and then Checksum1 /= Checksum_Error; end Checksums_Match; - ----------------------- - -- Get_File_Checksum -- - ----------------------- - - function Get_File_Checksum (Fname : Name_Id) return Word is - Src : Source_Buffer_Ptr; - Hi : Source_Ptr; - Csum : Word; - Ptr : Source_Ptr; - - Bad : exception; - -- Raised if file not found, or file format error + pragma Warnings (Off); + -- To avoid warnings on non referenced parameters of the error procedures - use ASCII; - -- Make control characters visible + --------------- + -- Error_Msg -- + --------------- + procedure Error_Msg (Msg : String; Flag_Location : Source_Ptr) is begin - Read_Source_File (Fname, 0, Hi, Src); - - -- If we cannot find the file, then return an impossible checksum, - -- impossible becaues checksums have the high order bit zero, so - -- that checksums do not match. - - if Src = null then - raise Bad; - end if; - - Initialize_Checksum (Csum); - Ptr := 0; - - loop - case Src (Ptr) is - - -- Spaces and formatting information are ignored in checksum - - when ' ' | CR | LF | VT | FF | HT => - Ptr := Ptr + 1; - - -- EOF is ignored unless it is the last character - - when EOF => - if Ptr = Hi then - System.Memory.Free (Src.all'Address); - return Csum; - else - Ptr := Ptr + 1; - end if; + null; + end Error_Msg; - -- Non-blank characters that are included in the checksum + pragma Warnings (Off); + -- To avoid warnings on non referenced parameters of the error procedures - when '#' | '&' | '*' | ':' | '(' | ',' | '.' | '=' | '>' | - '<' | ')' | '/' | ';' | '|' | '!' | '+' | '_' | - '0' .. '9' | 'a' .. 'z' - => - Accumulate_Checksum (Src (Ptr), Csum); - Ptr := Ptr + 1; + ----------------- + -- Error_Msg_S -- + ----------------- - -- Upper case letters, fold to lower case - - when 'A' .. 'Z' => - Accumulate_Checksum - (Character'Val (Character'Pos (Src (Ptr)) + 32), Csum); - Ptr := Ptr + 1; - - -- Left bracket, really should do wide character thing here, - -- but for now, don't bother. - - when '[' => - raise Bad; - - -- Minus, could be comment - - when '-' => - if Src (Ptr + 1) = '-' then - Ptr := Ptr + 2; - - while Src (Ptr) >= ' ' or else Src (Ptr) = HT loop - Ptr := Ptr + 1; - end loop; - - else - Accumulate_Checksum ('-', Csum); - Ptr := Ptr + 1; - end if; - - -- String delimited by double quote - - when '"' => - Accumulate_Checksum ('"', Csum); - - loop - Ptr := Ptr + 1; - exit when Src (Ptr) = '"'; - - if Src (Ptr) < ' ' then - raise Bad; - end if; - - Accumulate_Checksum (Src (Ptr), Csum); - end loop; - - Accumulate_Checksum ('"', Csum); - Ptr := Ptr + 1; - - -- String delimited by percent - - when '%' => - Accumulate_Checksum ('%', Csum); - - loop - Ptr := Ptr + 1; - exit when Src (Ptr) = '%'; - - if Src (Ptr) < ' ' then - raise Bad; - end if; + procedure Error_Msg_S (Msg : String) is + begin + null; + end Error_Msg_S; - Accumulate_Checksum (Src (Ptr), Csum); - end loop; + ------------------ + -- Error_Msg_SC -- + ------------------ - Accumulate_Checksum ('%', Csum); - Ptr := Ptr + 1; + procedure Error_Msg_SC (Msg : String) is + begin + null; + end Error_Msg_SC; - -- Quote, could be character constant + ------------------ + -- Error_Msg_SP -- + ------------------ - when ''' => - Accumulate_Checksum (''', Csum); + procedure Error_Msg_SP (Msg : String) is + begin + null; + end Error_Msg_SP; - if Src (Ptr + 2) = ''' then - Accumulate_Checksum (Src (Ptr + 1), Csum); - Accumulate_Checksum (''', Csum); - Ptr := Ptr + 3; + pragma Warnings (On); - -- Otherwise assume attribute char. We should deal with wide - -- character cases here, but that's hard, so forget it. + ----------------------- + -- Get_File_Checksum -- + ----------------------- - else - Ptr := Ptr + 1; - end if; + function Get_File_Checksum (Fname : Name_Id) return Word is + Full_Name : Name_Id; + Source_Index : Source_File_Index; + begin + Full_Name := Find_File (Fname, Osint.Source); - -- Upper half character, more to be done here, we should worry - -- about folding Latin-1, folding other character sets, and - -- dealing with the nasty case of upper half wide encoding. + -- If we cannot find the file, then return an impossible checksum, + -- impossible becaues checksums have the high order bit zero, so + -- that checksums do not match. - when Upper_Half_Character => - Accumulate_Checksum (Src (Ptr), Csum); - Ptr := Ptr + 1; + if Full_Name = No_File then + return Checksum_Error; + end if; - -- Escape character, we should do the wide character thing here, - -- but for now, do not bother. + Source_Index := Sinput.C.Load_File (Get_Name_String (Full_Name)); - when ESC => - raise Bad; + if Source_Index = No_Source_File then + return Checksum_Error; + end if; - -- Invalid control characters + Scanner.Initialize_Scanner (Types.No_Unit, Source_Index); - when NUL | SOH | STX | ETX | EOT | ENQ | ACK | BEL | BS | SO | - SI | DLE | DC1 | DC2 | DC3 | DC4 | NAK | SYN | ETB | CAN | - EM | FS | GS | RS | US | DEL - => - raise Bad; + -- Make sure that the project language reserved words are not + -- recognized as reserved words, but as identifiers. The byte info for + -- those names have been set if we are in gnatmake. - -- Invalid graphic characters + Set_Name_Table_Byte (Name_Project, 0); + Set_Name_Table_Byte (Name_Extends, 0); + Set_Name_Table_Byte (Name_External, 0); - when '$' | '?' | '@' | '`' | '\' | - '^' | '~' | ']' | '{' | '}' - => - raise Bad; + -- Scan the complete file to compute its checksum - end case; + loop + Scanner.Scan; + exit when Token = Tok_EOF; end loop; - exception - when Bad => - System.Memory.Free (Src.all'Address); - return Checksum_Error; + return Scans.Checksum; end Get_File_Checksum; ---------- @@ -293,14 +203,14 @@ package body ALI.Util is Interfaces.Reset; end Initialize_ALI_Source; - ------------------------- - -- Initialize_Checksum -- - ------------------------- + --------------- + -- Post_Scan -- + --------------- - procedure Initialize_Checksum (Csum : out Word) is + procedure Post_Scan is begin - System.CRC32.Initialize (System.CRC32.CRC32 (Csum)); - end Initialize_Checksum; + null; + end Post_Scan; -------------- -- Read_ALI -- |