]> git.sur5r.net Git - cc65/commitdiff
Fix parsing of push/pop so that #pragma warn works without.
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 2 Oct 2010 19:43:18 +0000 (19:43 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 2 Oct 2010 19:43:18 +0000 (19:43 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@4824 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/cc65/pragma.c

index 2a4e1085a9909d6355a5160f2f75293b0c4fb108..4b690d7a9e3a688d337422f2db2599954c381676 100644 (file)
@@ -6,7 +6,7 @@
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 1998-2009, Ullrich von Bassewitz                                      */
+/* (C) 1998-2010, Ullrich von Bassewitz                                      */
 /*                Roemerstrasse 52                                           */
 /*                D-70794 Filderstadt                                        */
 /* EMail:         uz@cc65.org                                                */
@@ -238,7 +238,7 @@ static IntStack* GetWarning (StrBuf* B)
 
     /* Done */
     return S;
-}                
+}
 
 
 
@@ -266,6 +266,8 @@ static PushPopResult ParsePushPop (StrBuf* B)
     StrBuf Ident      = AUTO_STRBUF_INITIALIZER;
     PushPopResult Res = PP_NONE;
 
+    /* Remember the current string index, so we can go back in case of errors */
+    unsigned Index = SB_GetIndex (B);
 
     /* Try to read an identifier */
     if (SB_GetSym (B, &Ident, 0)) {
@@ -282,14 +284,14 @@ static PushPopResult ParsePushPop (StrBuf* B)
 
             /* Skip the following comma */
             if (!GetComma (B)) {
+                /* Error already flagged by GetComma */
                 Res = PP_ERROR;
             }
 
         } else {
 
-            /* Unknown keyword */
-            Error ("Invalid pragma arguments");
-            Res = PP_ERROR;
+            /* Unknown keyword, roll back */
+            SB_SetIndex (B, Index);
         }
     }