diff options
author | Pascal Obry <obry@gnat.com> | 2001-10-11 23:28:47 +0000 |
---|---|---|
committer | Geert Bosch <bosch@gcc.gnu.org> | 2001-10-12 01:28:47 +0200 |
commit | cfac6e9fb4ea2fc7b05ded85c805501e4d7700b9 (patch) | |
tree | 1eb5c3598cab3e28720f900ad0f6e3a309265f54 /gcc/ada/scn.adb | |
parent | 3d7a191ffc392c46a555149fd52cac6decd4e977 (diff) | |
download | gcc-cfac6e9fb4ea2fc7b05ded85c805501e4d7700b9.zip gcc-cfac6e9fb4ea2fc7b05ded85c805501e4d7700b9.tar.gz gcc-cfac6e9fb4ea2fc7b05ded85c805501e4d7700b9.tar.bz2 |
* Makefile.in:
(GNAT_ADA_OBJS): add g-crc32.o, a-tags.o, a-stream.o
(GNATBIND_OBJS): add g-crc32.o, a-tags.o, a-stream.o
(GNATLS_RTL_OBJS): add g-crc32.o
(GNATMAKE_RTL_OBJS): add g-crc32.o
* ali-util.adb:
(CRC_Match): new function.
(Get_File_Checksum): renamed Get_File_CRC. Use the GNAT.CRC32 unit
instead of the previous simple checksum algorithm.
(Time_Stamp_Mismatch): use CRC_Match for comparison.
(Set_Source_Table): idem.
* ali-util.ads:
(Get_File_Checksum): renamed Get_File_CRC as now we compute CRC
instead of simple checksum.
(CRC_Match): new function.
(CRC_Error): new constant.
* ali.adb (Scan_ALI): rename variable Chk to CRC as we are handling
a CRC now and not a simple checksum. A CRC uses lower-case hex
letters, fixes ambiguity in parsing.
* ali.ads (Sdep_Record.Checksum): renamed Sdep_Record.CRC as this
is what this variable will store.
* bcheck.adb: Change reference to chechsum in comments by CRC.
(Check_Consistency): Rename Get_File_Checksum to Get_File_CRC.
rename All_Checksum_Match to All_CRC_Match. Change due to API
renaming since now GNAT does not use a simple checksum but a
CRC using GNAT.CRC32.
* gnatls.adb: Rename Checksum to CRC in many places, we use a CRC
now and not anymore a simple checksum.
* lib-load.adb: Use Source_CRC instead of Source_Checksum in many
places.
* lib-writ.adb (Write_ALI): Use Source_CRC instead of Source_Checksum.
* scans.adb:
(Restore_Scan_State): rename Checksum to CRC.
(Save_Scan_State): idem.
* scans.ads:
With GNAT.CRC32.
(Checksum): rename to CRC.
(Saved_Scan_State): Save_Checksum field renamed to Save_CRC
* scn-nlit.adb: Rename many Accumulate_Checksum to Update (from
GNAT.CRC32). Update copyright notice.
* scn-slit.adb: Rename many Accumulate_Checksum to Update (from
GNAT.CRC32). Update copyright notice.
* scn.adb:
(Accumulate_Checksum): removed.
(Update): new procedure. Add a wide-character into the CRC.
* sinput-l.adb:
(Complete_Source_File_Entry): use CRC32 instead of simple checksum.
(Load_File): fix initialization of S (change Source_Checksum to
Source_CRC)
* sinput-p.adb (Load_Project_File): rename Source_Checksum to
Source_CRC in S initialization.
* sinput.adb (Source_Checksum): renamed to Source_CRC.
* sinput.ads (Source_Checksum): renamed to Source_CRC.
Update comments for the CRC.
* types.adb (Hex): Use lowercase for the letter part.
* types.ads (Get_Hex_String): Returns the hexadecimal representation
for a word. This is currently used only for CRC. In previous version,
the checksum was using a representation with all letter being
upper-case. With the new implementation (using CRC) we do not remove
the 32th bit of the CRC, so we can have an upper-case starting letter
in the CRC. This is not possible to parse in Scan_ALI (ali.adb).
It is ambigous since the CRC was optional and could be followed by
options like EB, EE. So now this routines uses lower-case letter for
the hexadecimal representation. Strange enough only lower case letters
where checked in Scan_ALI (even if this was not a possible case).
* gnatvsn.ads (Library_Version): changed to 3.15a.
* s-crc32.ads: Initial version from GNAT.CRC32. This is the version
for the compiler.
* s-crc32.adb: Initial version from GNAT.CRC32. This is the version
for the compiler.
* ali-util.adb: Redo previous change to avoid using word CRC everywhere
Add 2001 to copyright notice
(Accumulate_Checksum): Modify to use System.CRC32.
* ali-util.ads: Redo changes of previous revision to continue to use
the word Checksum. Add 2001 to copyright notice.
* ali.adb: Undo some of previous changes, not needed.
Keep the change for lower case letters in the checksum.
* ali.ads: Undo previous change not needed.
* bcheck.adb: Undo most of previous change, not needed.
But do use Checksums_Match for checksum comparison.
* gnatls.adb: Undo most of previous change, not needed.
But do use Checksums_Match for comparing checksums.
* lib-load.adb: Undo previous change, not needed.
* lib-writ.adb: Undo previous change, not needed.
* lib-writ.ads: Document that checksums use lower case,
not upper case letters.
* scans.adb: Undo previous change, not needed
* scans.ads: Undo previous change, not needed.
* scn-nlit.adb: Undo previous changes, not needed.
* scn-slit.adb: Undo previous change, not needed. Fix header format.
* scn.adb:
(Accumulate_Checksum): Use System.CRC32.
(Initialize_Checksum): New procedure.
Remove other changes of previous revision.
* sinput-p.adb: Undo previous change, not needed.
* sinput.adb: Undo previous change, not needed.
* sinput-l.adb: Undo previous change, not needed.
* sinput.ads: Undo previous change, not needed. Keep only comment
on new checksum algorithm
* Makefile.in: Add s-crc32 as needed, remove g-crc32.
Also remove a-tags and a-stream from GNAT sources.
* ali.adb (Scan_ALI): fix typo introduce in latest check-in.
* Makefile.in (GNATRTL_NONTASKING_OBJS): Add g-crc32.o.
From-SVN: r46206
Diffstat (limited to 'gcc/ada/scn.adb')
-rw-r--r-- | gcc/ada/scn.adb | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/gcc/ada/scn.adb b/gcc/ada/scn.adb index 146314d..af6668a 100644 --- a/gcc/ada/scn.adb +++ b/gcc/ada/scn.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- $Revision: 1.111 $ +-- $Revision$ -- -- -- Copyright (C) 1992-2001 Free Software Foundation, Inc. -- -- -- @@ -39,6 +39,7 @@ with Snames; use Snames; with Style; with Widechar; use Widechar; +with System.CRC32; with System.WCh_Con; use System.WCh_Con; package body Scn is @@ -73,6 +74,10 @@ package body Scn is -- are scanned. We use the character code rather than the ASCII characters -- so that the checksum is independent of wide character encoding method. + procedure Initialize_Checksum; + pragma Inline (Initialize_Checksum); + -- Initialize checksum value + procedure Check_End_Of_Line; -- Called when end of line encountered. Checks that line is not -- too long, and that other style checks for the end of line are met. @@ -135,20 +140,13 @@ package body Scn is procedure Accumulate_Checksum (C : Character) is begin - Checksum := Checksum + Checksum + Character'Pos (C); - - if Checksum > 16#8000_0000# then - Checksum := (Checksum + 1) and 16#7FFF_FFFF#; - end if; + System.CRC32.Update (System.CRC32.CRC32 (Checksum), C); end Accumulate_Checksum; procedure Accumulate_Checksum (C : Char_Code) is begin - Checksum := Checksum + Checksum + Char_Code'Pos (C); - - if Checksum > 16#8000_0000# then - Checksum := (Checksum + 1) and 16#7FFF_FFFF#; - end if; + Accumulate_Checksum (Character'Val (C / 256)); + Accumulate_Checksum (Character'Val (C mod 256)); end Accumulate_Checksum; ----------------------- @@ -367,6 +365,15 @@ package body Scn is Error_Msg_S ("two consecutive underlines not permitted"); end Error_No_Double_Underline; + ------------------------- + -- Initialize_Checksum -- + ------------------------- + + procedure Initialize_Checksum is + begin + System.CRC32.Initialize (System.CRC32.CRC32 (Checksum)); + end Initialize_Checksum; + ------------------------ -- Initialize_Scanner -- ------------------------ @@ -465,7 +472,8 @@ package body Scn is Token_Name := No_Name; Start_Column := Set_Start_Column; First_Non_Blank_Location := Scan_Ptr; - Checksum := 0; + + Initialize_Checksum; -- Set default for Comes_From_Source. All nodes built now until we -- reenter the analyzer will have Comes_From_Source set to True |