Kaydet (Commit) 25916bdc authored tarafından Jeremy Hylton's avatar Jeremy Hylton

Change cascaded if stmts to switch stmt in vgetargs1().

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.
üst 1cb7aa3e
......@@ -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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment