]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Change cascaded if stmts to switch stmt in vgetargs1().
authorJeremy Hylton <jeremy@alum.mit.edu>
Tue, 29 May 2001 17:46:19 +0000 (17:46 +0000)
committerJeremy Hylton <jeremy@alum.mit.edu>
Tue, 29 May 2001 17:46:19 +0000 (17:46 +0000)
In the default branch, keep three ifs that are used if level == 0, the
most common case.  Note that first if here is a slight optimization
for the 'O' format.

Second part of SF patch 426072.

Python/getargs.c

index c112386a41188009acd7617079abab27b226ad19..8c00b0ee1a10f2a4b38fe574810891559f855254 100644 (file)
@@ -80,44 +80,50 @@ vgetargs1(PyObject *args, char *format, va_list *p_va, int compat)
        int min = -1;
        int max = 0;
        int level = 0;
+       int endfmt = 0;
        char *formatsave = format;
        int i, len;
        char *msg;
        
        assert(compat || (args != (PyObject*)NULL));
 
-       for (;;) {
+       while (endfmt == 0) {
                int c = *format++;
-               if (c == '(' /* ')' */) {
+               switch (c) {
+               case '(':
                        if (level == 0)
                                max++;
                        level++;
-               }
-               else if (/* '(' */ c == ')') {
+                       break;
+               case ')':
                        if (level == 0)
-                               Py_FatalError(/* '(' */
-                                     "excess ')' in getargs format");
+                               Py_FatalError("excess ')' in getargs format");
                        else
                                level--;
-               }
-               else if (c == '\0')
                        break;
-               else if (c == ':') {
+               case '\0':
+                       endfmt = 1;
+                       break;
+               case ':':
                        fname = format;
+                       endfmt = 1;
                        break;
-               }
-               else if (c == ';') {
+               case ';':
                        message = format;
+                       endfmt = 1;
+                       break;
+               default:
+                       if (level == 0) {
+                               if (c == 'O')
+                                       max++;
+                               else if (isalpha(c)) {
+                                       if (c != 'e') /* skip encoded */
+                                               max++;
+                               } else if (c == '|')
+                                       min = max;
+                       }
                        break;
                }
-               else if (level != 0)
-                       ; /* Pass */
-               else if (c == 'e')
-                       ; /* Pass */
-               else if (isalpha(c))
-                       max++;
-               else if (c == '|')
-                       min = max;
        }
        
        if (level != 0)