]> git.ipfire.org Git - thirdparty/gettext.git/commitdiff
libgettextpo: Remove static variables po_gram_lval, po_gram_char, po_gram_nerrs.
authorBruno Haible <bruno@clisp.org>
Sat, 11 Nov 2023 15:48:20 +0000 (16:48 +0100)
committerBruno Haible <bruno@clisp.org>
Sat, 11 Nov 2023 15:48:20 +0000 (16:48 +0100)
* gettext-tools/src/po-gram-gen.y: Request a pure parser.
* gettext-tools/src/po-lex.h (po_gram_lex): Add lval parameter.
* gettext-tools/src/po-lex.c (po_gram_lex): Add lval parameter. Store the result
in *lval instead of in po_gram_lval.
* gettext-tools/woe32dll/gettextsrc-exports.c: Remove po_gram_lval.

gettext-tools/src/po-gram-gen.y
gettext-tools/src/po-lex.c
gettext-tools/src/po-lex.h
gettext-tools/woe32dll/gettextsrc-exports.c

index 43c842d1195be7da5ec848f3a204d4b4ed46f9a6..07ebdacb1e42ff320b4ac097e1e6b1f53dddb79b 100644 (file)
@@ -77,6 +77,7 @@ do_callback_message (char *msgctxt,
 %}
 
 %require "3.0"
+%define api.pure full
 
 /* Remap parser interface names, so we can have multiple Bison
    generated parsers in the same program.  */
index 22d08849206b812b18ace9de7629bb95a9d71c3c..7be0845d3182769798ad71bb00ca5d609469d69f 100644 (file)
@@ -863,7 +863,7 @@ control_sequence ()
 /* Return the next token in the PO file.  The return codes are defined
    in "po-gram-gen2.h".  Associated data is put in 'po_gram_lval'.  */
 int
-po_gram_lex ()
+po_gram_lex (union PO_GRAM_STYPE *lval)
 {
   static char *buf;
   static size_t bufmax;
@@ -949,9 +949,9 @@ po_gram_lex ()
                   }
                 buf[bufpos] = '\0';
 
-                po_gram_lval.string.string = buf;
-                po_gram_lval.string.pos = gram_pos;
-                po_gram_lval.string.obsolete = po_lex_obsolete;
+                lval->string.string = buf;
+                lval->string.pos = gram_pos;
+                lval->string.obsolete = po_lex_obsolete;
                 po_lex_obsolete = false;
                 signal_eilseq = true;
                 return COMMENT;
@@ -1012,9 +1012,9 @@ po_gram_lex ()
                                      _("context separator <EOT> within string"));
 
             /* FIXME: Treatment of embedded \000 chars is incorrect.  */
-            po_gram_lval.string.string = xstrdup (buf);
-            po_gram_lval.string.pos = gram_pos;
-            po_gram_lval.string.obsolete = po_lex_obsolete;
+            lval->string.string = xstrdup (buf);
+            lval->string.pos = gram_pos;
+            lval->string.obsolete = po_lex_obsolete;
             return (po_lex_previous ? PREV_STRING : STRING);
 
           case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
@@ -1071,14 +1071,14 @@ po_gram_lex ()
               int k = keyword_p (buf);
               if (k == NAME)
                 {
-                  po_gram_lval.string.string = xstrdup (buf);
-                  po_gram_lval.string.pos = gram_pos;
-                  po_gram_lval.string.obsolete = po_lex_obsolete;
+                  lval->string.string = xstrdup (buf);
+                  lval->string.pos = gram_pos;
+                  lval->string.obsolete = po_lex_obsolete;
                 }
               else
                 {
-                  po_gram_lval.pos.pos = gram_pos;
-                  po_gram_lval.pos.obsolete = po_lex_obsolete;
+                  lval->pos.pos = gram_pos;
+                  lval->pos.obsolete = po_lex_obsolete;
                 }
               return k;
             }
@@ -1112,19 +1112,19 @@ po_gram_lex ()
 
             buf[bufpos] = '\0';
 
-            po_gram_lval.number.number = atol (buf);
-            po_gram_lval.number.pos = gram_pos;
-            po_gram_lval.number.obsolete = po_lex_obsolete;
+            lval->number.number = atol (buf);
+            lval->number.pos = gram_pos;
+            lval->number.obsolete = po_lex_obsolete;
             return NUMBER;
 
           case '[':
-            po_gram_lval.pos.pos = gram_pos;
-            po_gram_lval.pos.obsolete = po_lex_obsolete;
+            lval->pos.pos = gram_pos;
+            lval->pos.obsolete = po_lex_obsolete;
             return '[';
 
           case ']':
-            po_gram_lval.pos.pos = gram_pos;
-            po_gram_lval.pos.obsolete = po_lex_obsolete;
+            lval->pos.pos = gram_pos;
+            lval->pos.obsolete = po_lex_obsolete;
             return ']';
 
           default:
index 2f6df0d6a776fa63b399edc6d5975c7652ef2507..7204a406253d43c6f19f4d959410f157be87e8f6 100644 (file)
@@ -74,8 +74,9 @@ extern void lex_start (FILE *fp, const char *real_filename,
 extern void lex_end (void);
 
 /* Return the next token in the PO file.  The return codes are defined
-   in "po-gram-gen2.h".  Associated data is put in 'po_gram_lval'.  */
-extern int po_gram_lex (void);
+   in "po-gram-gen2.h".  Associated data is put in '*lval'.  */
+union PO_GRAM_STYPE;
+extern int po_gram_lex (union PO_GRAM_STYPE *lval);
 
 /* po_gram_lex() can return comments as COMMENT.  Switch this on or off.  */
 extern void po_lex_pass_comments (bool flag);
index 90066316f4039074ca34eccd766b7b1eb9e762ff..b439b79c0e46c2c34f80e2d438464055f89c2a8d 100644 (file)
@@ -77,7 +77,6 @@ VARIABLE(po_charset_ascii)
 VARIABLE(po_charset_utf8)
 VARIABLE(po_error)
 VARIABLE(po_error_at_line)
-VARIABLE(po_gram_lval)
 VARIABLE(po_lex_charset)
 VARIABLE(po_lex_isolate_start)
 VARIABLE(po_lex_isolate_end)