diff --git a/read.c b/read.c
index 51fa70f3..e8b505da 100644
--- a/read.c
+++ b/read.c
@@ -2629,7 +2629,7 @@ readline (struct ebuffer *ebuf)
 static enum make_word_type
 get_next_mword (char *buffer, char *delim, char **startp, unsigned int *length)
 {
-  enum make_word_type wtype = w_bogus;
+  enum make_word_type wtype;
   char *p = buffer, *beg;
   char c;
 
@@ -2639,41 +2639,42 @@ get_next_mword (char *buffer, char *delim, char **startp, unsigned int *length)
 
   beg = p;
   c = *(p++);
+
+  /* Look at the start of the word to see if it's simple.  */
   switch (c)
     {
     case '\0':
       wtype = w_eol;
-      break;
+      goto done;
 
     case ';':
       wtype = w_semicolon;
-      break;
+      goto done;
 
     case '=':
       wtype = w_varassign;
-      break;
+      goto done;
 
     case ':':
-      wtype = w_colon;
-      switch (*p)
+      if (*p == '=')
         {
-        case ':':
           ++p;
-          if (p[1] != '=')
-            wtype = w_dcolon;
-          else
-            {
-              wtype = w_varassign;
-              ++p;
-            }
-          break;
-
-        case '=':
-          ++p;
-          wtype = w_varassign;
-          break;
+          wtype = w_varassign; /* := */
         }
-      break;
+      else if (*p == ':')
+        {
+          ++p;
+          if (p[1] == '=')
+            {
+              ++p;
+              wtype = w_varassign; /* ::= */
+            }
+          else
+            wtype = w_dcolon;
+        }
+      else
+        wtype = w_colon;
+      goto done;
 
     case '+':
     case '?':
@@ -2681,20 +2682,19 @@ get_next_mword (char *buffer, char *delim, char **startp, unsigned int *length)
       if (*p == '=')
         {
           ++p;
-          wtype = w_varassign;
-          break;
+          wtype = w_varassign; /* += or ?= or != */
+          goto done;
         }
+      /* FALLTHROUGH */
 
     default:
       if (delim && strchr (delim, c))
-        wtype = w_static;
-      break;
+        {
+          wtype = w_static;
+          goto done;
+        }
     }
 
-  /* Did we find something?  If so, return now.  */
-  if (wtype != w_bogus)
-    goto done;
-
   /* This is some non-operator word.  A word consists of the longest
      string of characters that doesn't contain whitespace, one of [:=#],
      or [?+!]=, or one of the chars in the DELIM string.  */