From 25916bdc11c7d96ada294a25cff3510ef72ddb75 Mon Sep 17 00:00:00 2001 From: Jeremy Hylton Date: Tue, 29 May 2001 17:46:19 +0000 Subject: 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. --- Python/getargs.c | 44 +++++++++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/Python/getargs.c b/Python/getargs.c index c112386..8c00b0e 100644 --- a/Python/getargs.c +++ b/Python/getargs.c @@ -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) -- cgit v0.12