]> mj.ucw.cz Git - umpf.git/commitdiff
do not unget EOF
authorAnicka Bernathova <anicka@anicka.net>
Thu, 3 Jul 2008 11:16:30 +0000 (13:16 +0200)
committerAnicka Bernathova <anicka@anicka.net>
Thu, 3 Jul 2008 11:16:30 +0000 (13:16 +0200)
cond.y

diff --git a/cond.y b/cond.y
index 1dc42c379982c252051b215516cdb8d328b20462..cb995c631ea60f9ce6e9917e1e26144342059ee1 100644 (file)
--- a/cond.y
+++ b/cond.y
@@ -109,6 +109,16 @@ get_string_out(char delim)
        return s;
 }
 
+int
+safe_unget(char c)
+{
+       if (c==EOF)
+               return 0;
+
+       ungetc(c,stdin);
+       return 1;
+}
+
 int
 yylex(void)
 {
@@ -147,39 +157,38 @@ yylex(void)
                else if (c == '~')
                        return NRE;
                else
-                       ungetc(c,stdin);
+                       if (! safe_unget(c))
+                               return c;
        }
 
        if (c == '<'){
                if ((c = getchar ()) == '=')
                        return LE;
-               else {
-                       ungetc(c,stdin);
-                       return LT;
-               }
+               else
+                       return (safe_unget(c) ? LT : c); 
        }
 
        if (c == '>'){
                if ((c = getchar ()) == '=')
                        return GE;
-               else {
-                       ungetc(c,stdin);
-                       return GT;
-               }
+               else
+                       return (safe_unget(c) ? GT : c); 
        }
 
        if (c == '='){
                if ((c = getchar ()) == '=')
                        return EQ;
                else
-                       ungetc(c,stdin);
+                       if (! safe_unget(c))
+                               return c;
        }
 
        if (c == '~'){
                if ((c = getchar ()) == '~')
                        return RE;
                else
-                       ungetc(c,stdin);
+                       if (! safe_unget(c))
+                               return c;
        }
        
        if (c == EOF)