-- --
-- B o d y --
-- --
--- --
--- Copyright (C) 1992-2001 Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2008, 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 2, or (at your option) any later ver- --
+-- 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 COPYING. If not, write --
--- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, --
--- MA 02111-1307, USA. --
+-- 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. --
loop
-- Terminating tokens are those in class Eterm and also RANGE,
-- DIGITS or DELTA if not preceded by an apostrophe (if they are
- -- preceded by an apostrophe, then they are attributes). In addiion,
+ -- preceded by an apostrophe, then they are attributes). In addition,
-- at the outer parentheses level only, we also consider a comma,
-- right parenthesis or vertical bar to terminate an expression.
procedure Resync_Init is
begin
-- The following check makes sure we do not get stuck in an infinite
- -- loop resynchonizing and getting nowhere. If we are called to do a
+ -- loop resynchronizing and getting nowhere. If we are called to do a
-- resynchronize and we are exactly at the same point that we left off
-- on the last resynchronize call, then we force at least one token to
-- be skipped so that we make progress!
end if;
end loop;
- -- Fall out of loop with resyncrhonization complete
+ -- Fall out of loop with resynchronization complete
Resync_Resume;
end Resync_Past_Semicolon;
+ -------------------------
+ -- Resync_To_Semicolon --
+ -------------------------
+
+ procedure Resync_To_Semicolon is
+ begin
+ Resync_Init;
+
+ loop
+ -- Done if we are at a semicolon
+
+ if Token = Tok_Semicolon then
+ exit;
+
+ -- Done if we are at a token which normally appears only after
+ -- a semicolon. One special glitch is that the keyword private is
+ -- in this category only if it does NOT appear after WITH.
+
+ elsif Token in Token_Class_After_SM
+ and then (Token /= Tok_Private or else Prev_Token /= Tok_With)
+ then
+ exit;
+
+ -- Otherwise keep going
+
+ else
+ Scan;
+ end if;
+ end loop;
+
+ -- Fall out of loop with resynchronization complete
+
+ Resync_Resume;
+ end Resync_To_Semicolon;
+
----------------------------------------------
-- Resync_Past_Semicolon_Or_To_Loop_Or_Then --
----------------------------------------------
-- a semicolon. One special glitch is that the keyword private is
-- in this category only if it does NOT appear after WITH.
- elsif (Token in Token_Class_After_SM
- and then (Token /= Tok_Private
- or else Prev_Token /= Tok_With))
+ elsif Token in Token_Class_After_SM
+ and then (Token /= Tok_Private or else Prev_Token /= Tok_With)
then
exit;
end if;
end loop;
- -- Fall out of loop with resyncrhonization complete
+ -- Fall out of loop with resynchronization complete
Resync_Resume;
end Resync_Past_Semicolon_Or_To_Loop_Or_Then;
end if;
end loop;
- -- Fall out of loop with resyncrhonization complete
+ -- Fall out of loop with resynchronization complete
Resync_Resume;
end Resync_To_When;