* src/expr.c (mbs_logical_cspn, main, trace, docolon, eval7, eval6)
(eval5, eval4, eval3, eval2, eval1, eval): Declare variables where they
are used instead of at the start of the function.
---
 src/expr.c | 123 ++++++++++++++++++++---------------------------------
 1 file changed, 46 insertions(+), 77 deletions(-)

diff --git a/src/expr.c b/src/expr.c
index 021db1f1e..7f797a559 100644
--- a/src/expr.c
+++ b/src/expr.c
@@ -115,14 +115,13 @@ static void printv (VALUE *v);
 static size_t
 mbs_logical_cspn (char const *s, char const *accept)
 {
-  size_t idx = 0;
-
   if (accept[0] == '\0')
     return 0;
 
   /* General case.  */
   if (MB_CUR_MAX > 1)
     {
+      size_t idx = 0;
       for (char const *p = s; *p; )
         {
           ++idx;
@@ -306,8 +305,6 @@ or 0, 2 if EXPRESSION is syntactically invalid, and 3 if an 
error occurred.\n\
 int
 main (int argc, char **argv)
 {
-  VALUE *v;
-
   initialize_main (&argc, &argv);
   set_program_name (argv[0]);
   setlocale (LC_ALL, "");
@@ -336,7 +333,7 @@ main (int argc, char **argv)
 
   args = argv + 1;
 
-  v = eval (true);
+  VALUE *v = eval (true);
   if (!nomoreargs ())
     error (EXPR_INVALID, 0, _("syntax error: unexpected argument %s"),
            quotearg_n_style (0, locale_quoting_style, *args));
@@ -554,10 +551,8 @@ require_more_args (void)
 static void
 trace (char const *fxn)
 {
-  char **a;
-
   printf ("%s:", fxn);
-  for (a = args; *a; a++)
+  for (char **a = args; *a; a++)
     printf (" %s", *a);
   putchar ('\n');
 }
@@ -570,32 +565,31 @@ trace (char const *fxn)
 static VALUE *
 docolon (VALUE *sv, VALUE *pv)
 {
-  VALUE *v;
-  char const *errmsg;
-  struct re_pattern_buffer re_buffer;
-  char fastmap[UCHAR_MAX + 1];
-  struct re_registers re_regs;
-  regoff_t matchlen;
-
   tostring (sv);
   tostring (pv);
 
+  struct re_registers re_regs;
   re_regs.num_regs = 0;
   re_regs.start = NULL;
   re_regs.end = NULL;
 
+  struct re_pattern_buffer re_buffer;
+  char fastmap[UCHAR_MAX + 1];
   re_buffer.buffer = NULL;
   re_buffer.allocated = 0;
   re_buffer.fastmap = fastmap;
   re_buffer.translate = NULL;
-  re_syntax_options =
-    RE_SYNTAX_POSIX_BASIC & ~RE_CONTEXT_INVALID_DUP & ~RE_NO_EMPTY_RANGES;
-  errmsg = re_compile_pattern (pv->u.s, strlen (pv->u.s), &re_buffer);
+  re_syntax_options = (RE_SYNTAX_POSIX_BASIC & ~RE_CONTEXT_INVALID_DUP
+                       & ~RE_NO_EMPTY_RANGES);
+  char const *errmsg = re_compile_pattern (pv->u.s, strlen (pv->u.s),
+                                           &re_buffer);
   if (errmsg)
     error (EXPR_INVALID, 0, "%s", (errmsg));
   re_buffer.newline_anchor = 0;
 
-  matchlen = re_match (&re_buffer, sv->u.s, strlen (sv->u.s), 0, &re_regs);
+  VALUE *v;
+  regoff_t matchlen = re_match (&re_buffer, sv->u.s, strlen (sv->u.s), 0,
+                                &re_regs);
   if (0 <= matchlen)
     {
       /* Were \(...\) used? */
@@ -647,8 +641,6 @@ docolon (VALUE *sv, VALUE *pv)
 static VALUE *
 eval7 (bool evaluate)
 {
-  VALUE *v;
-
 #ifdef EVAL_TRACE
   trace ("eval7");
 #endif
@@ -656,7 +648,7 @@ eval7 (bool evaluate)
 
   if (nextarg ("("))
     {
-      v = eval (evaluate);
+      VALUE *v = eval (evaluate);
       if (nomoreargs ())
         error (EXPR_INVALID, 0, _("syntax error: expecting ')' after %s"),
                quotearg_n_style (0, locale_quoting_style, *(args - 1)));
@@ -677,12 +669,6 @@ eval7 (bool evaluate)
 static VALUE *
 eval6 (bool evaluate)
 {
-  VALUE *l;
-  VALUE *r;
-  VALUE *v;
-  VALUE *i1;
-  VALUE *i2;
-
 #ifdef EVAL_TRACE
   trace ("eval6");
 #endif
@@ -693,16 +679,17 @@ eval6 (bool evaluate)
     }
   else if (nextarg ("length"))
     {
-      r = eval6 (evaluate);
+      VALUE *r = eval6 (evaluate);
       tostring (r);
-      v = int_value (mbslen (r->u.s));
+      VALUE *v = int_value (mbslen (r->u.s));
       freev (r);
       return v;
     }
   else if (nextarg ("match"))
     {
-      l = eval6 (evaluate);
-      r = eval6 (evaluate);
+      VALUE *l = eval6 (evaluate);
+      VALUE *r = eval6 (evaluate);
+      VALUE *v;
       if (evaluate)
         {
           v = docolon (l, r);
@@ -715,25 +702,24 @@ eval6 (bool evaluate)
     }
   else if (nextarg ("index"))
     {
-      size_t pos;
-
-      l = eval6 (evaluate);
-      r = eval6 (evaluate);
+      VALUE *l = eval6 (evaluate);
+      VALUE *r = eval6 (evaluate);
       tostring (l);
       tostring (r);
-      pos = mbs_logical_cspn (l->u.s, r->u.s);
-      v = int_value (pos);
+      size_t pos = mbs_logical_cspn (l->u.s, r->u.s);
+      VALUE *v = int_value (pos);
       freev (l);
       freev (r);
       return v;
     }
   else if (nextarg ("substr"))
     {
-      l = eval6 (evaluate);
-      i1 = eval6 (evaluate);
-      i2 = eval6 (evaluate);
+      VALUE *l = eval6 (evaluate);
+      VALUE *i1 = eval6 (evaluate);
+      VALUE *i2 = eval6 (evaluate);
       tostring (l);
 
+      VALUE *v;
       if (!toarith (i1) || !toarith (i2))
         v = str_value ("");
       else
@@ -760,22 +746,18 @@ eval6 (bool evaluate)
 static VALUE *
 eval5 (bool evaluate)
 {
-  VALUE *l;
-  VALUE *r;
-  VALUE *v;
-
 #ifdef EVAL_TRACE
   trace ("eval5");
 #endif
-  l = eval6 (evaluate);
+  VALUE *l = eval6 (evaluate);
   while (true)
     {
       if (nextarg (":"))
         {
-          r = eval6 (evaluate);
+          VALUE *r = eval6 (evaluate);
           if (evaluate)
             {
-              v = docolon (l, r);
+              VALUE *v = docolon (l, r);
               freev (l);
               l = v;
             }
@@ -791,16 +773,14 @@ eval5 (bool evaluate)
 static VALUE *
 eval4 (bool evaluate)
 {
-  VALUE *l;
-  VALUE *r;
-  enum { multiply, divide, mod } fxn;
-
 #ifdef EVAL_TRACE
   trace ("eval4");
 #endif
-  l = eval5 (evaluate);
+  VALUE *l = eval5 (evaluate);
   while (true)
     {
+      enum { multiply, divide, mod } fxn;
+
       if (nextarg ("*"))
         fxn = multiply;
       else if (nextarg ("/"))
@@ -809,7 +789,7 @@ eval4 (bool evaluate)
         fxn = mod;
       else
         return l;
-      r = eval5 (evaluate);
+      VALUE *r = eval5 (evaluate);
       if (evaluate)
         {
           if (!toarith (l) || !toarith (r))
@@ -830,23 +810,21 @@ eval4 (bool evaluate)
 static VALUE *
 eval3 (bool evaluate)
 {
-  VALUE *l;
-  VALUE *r;
-  enum { plus, minus } fxn;
-
 #ifdef EVAL_TRACE
   trace ("eval3");
 #endif
-  l = eval4 (evaluate);
+  VALUE *l = eval4 (evaluate);
   while (true)
     {
+      enum { plus, minus } fxn;
+
       if (nextarg ("+"))
         fxn = plus;
       else if (nextarg ("-"))
         fxn = minus;
       else
         return l;
-      r = eval4 (evaluate);
+      VALUE *r = eval4 (evaluate);
       if (evaluate)
         {
           if (!toarith (l) || !toarith (r))
@@ -862,20 +840,16 @@ eval3 (bool evaluate)
 static VALUE *
 eval2 (bool evaluate)
 {
-  VALUE *l;
-
 #ifdef EVAL_TRACE
   trace ("eval2");
 #endif
-  l = eval3 (evaluate);
+  VALUE *l = eval3 (evaluate);
   while (true)
     {
-      VALUE *r;
       enum
         {
           less_than, less_equal, equal, not_equal, greater_equal, greater_than
         } fxn;
-      bool val = false;
 
       if (nextarg ("<"))
         fxn = less_than;
@@ -891,14 +865,15 @@ eval2 (bool evaluate)
         fxn = greater_than;
       else
         return l;
-      r = eval3 (evaluate);
+      VALUE *r = eval3 (evaluate);
 
+      bool val = false;
       if (evaluate)
         {
-          int cmp;
           tostring (l);
           tostring (r);
 
+          int cmp;
           if (looks_like_integer (l->u.s) && looks_like_integer (r->u.s))
             cmp = strintcmp (l->u.s, r->u.s);
           else
@@ -940,18 +915,15 @@ eval2 (bool evaluate)
 static VALUE *
 eval1 (bool evaluate)
 {
-  VALUE *l;
-  VALUE *r;
-
 #ifdef EVAL_TRACE
   trace ("eval1");
 #endif
-  l = eval2 (evaluate);
+  VALUE *l = eval2 (evaluate);
   while (true)
     {
       if (nextarg ("&"))
         {
-          r = eval2 (evaluate && !null (l));
+          VALUE *r = eval2 (evaluate && !null (l));
           if (null (l) || null (r))
             {
               freev (l);
@@ -971,18 +943,15 @@ eval1 (bool evaluate)
 static VALUE *
 eval (bool evaluate)
 {
-  VALUE *l;
-  VALUE *r;
-
 #ifdef EVAL_TRACE
   trace ("eval");
 #endif
-  l = eval1 (evaluate);
+  VALUE *l = eval1 (evaluate);
   while (true)
     {
       if (nextarg ("|"))
         {
-          r = eval1 (evaluate && null (l));
+          VALUE *r = eval1 (evaluate && null (l));
           if (null (l))
             {
               freev (l);
-- 
2.53.0


Reply via email to