From 607b41f22e1294a35332ab81f8f43d8627fa505a Mon Sep 17 00:00:00 2001
From: peter <peter@freepascal.org>
Date: Thu, 22 Jan 2004 17:24:49 +0000
Subject: [PATCH]   * except is also an end of block token   * after a label
 don't try to parse a statement when the next token     is an end token

---
 compiler/pbase.pas    |  9 +++++++--
 compiler/pstatmnt.pas | 12 ++++++++++--
 2 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/compiler/pbase.pas b/compiler/pbase.pas
index 0f79deb313..34729ae63f 100644
--- a/compiler/pbase.pas
+++ b/compiler/pbase.pas
@@ -35,7 +35,7 @@ interface
     const
        { tokens that end a block or statement. And don't require
          a ; on the statement before }
-       endtokens = [_SEMICOLON,_END,_ELSE,_UNTIL];
+       endtokens = [_SEMICOLON,_END,_ELSE,_UNTIL,_EXCEPT];
 
        { true, if we are after an assignement }
        afterassignment : boolean = false;
@@ -270,7 +270,12 @@ implementation
 end.
 {
   $Log$
-  Revision 1.25  2003-09-23 17:56:05  peter
+  Revision 1.26  2004-01-22 17:24:49  peter
+    * except is also an end of block token
+    * after a label don't try to parse a statement when the next token
+      is an end token
+
+  Revision 1.25  2003/09/23 17:56:05  peter
     * locals and paras are allocated in the code generation
     * tvarsym.localloc contains the location of para/local when
       generating code for the current procedure
diff --git a/compiler/pstatmnt.pas b/compiler/pstatmnt.pas
index f1f5f34039..e1fbe3cbd4 100644
--- a/compiler/pstatmnt.pas
+++ b/compiler/pstatmnt.pas
@@ -939,7 +939,10 @@ implementation
               begin
                 { the pointer to the following instruction }
                 { isn't a very clean way                   }
-                tlabelnode(p).left:=statement{$ifdef FPCPROCVAR}(){$endif};
+                if token in endtokens then
+                  tlabelnode(p).left:=cnothingnode.create
+                else
+                  tlabelnode(p).left:=statement{$ifdef FPCPROCVAR}(){$endif};
                 { be sure to have left also resulttypepass }
                 resulttypepass(tlabelnode(p).left);
               end;
@@ -1084,7 +1087,12 @@ implementation
 end.
 {
   $Log$
-  Revision 1.125  2004-01-12 16:36:53  peter
+  Revision 1.126  2004-01-22 17:24:49  peter
+    * except is also an end of block token
+    * after a label don't try to parse a statement when the next token
+      is an end token
+
+  Revision 1.125  2004/01/12 16:36:53  peter
     * removed asmmode_direct
 
   Revision 1.124  2003/12/07 16:40:45  jonas