Mercurial > cpython-lru_cache-weakref
diff Python/compile.c @ 16006:51811d78a9da legacy-trunk
SF Patch #103250, by pj99: Optimize a strspn() out of startup.
Minor startup speedup: avoid a call to strspn().
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Fri, 19 Jan 2001 00:24:06 +0000 |
| parents | 433458651eb4 |
| children | c832ef72499d |
line wrap: on
line diff
--- a/Python/compile.c Thu Jan 18 23:47:15 2001 +0000 +++ b/Python/compile.c Fri Jan 19 00:24:06 2001 +0000 @@ -164,6 +164,26 @@ #define NAME_CHARS \ "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz" +/* all_name_chars(s): true iff all chars in s are valid NAME_CHARS */ + +static int +all_name_chars(unsigned char *s) +{ + static char ok_name_char[256]; + static unsigned char *name_chars = NAME_CHARS; + + if (ok_name_char[*name_chars] == 0) { + unsigned char *p; + for (p = name_chars; *p; p++) + ok_name_char[*p] = 1; + } + while (*s) { + if (ok_name_char[*s++] == 0) + return 0; + } + return 1; +} + PyCodeObject * PyCode_New(int argcount, int nlocals, int stacksize, int flags, PyObject *code, PyObject *consts, PyObject *names, @@ -214,12 +234,9 @@ /* Intern selected string constants */ for (i = PyTuple_Size(consts); --i >= 0; ) { PyObject *v = PyTuple_GetItem(consts, i); - char *p; if (!PyString_Check(v)) continue; - p = PyString_AsString(v); - if (strspn(p, NAME_CHARS) - != (size_t)PyString_Size(v)) + if (!all_name_chars((unsigned char *)PyString_AsString(v))) continue; PyString_InternInPlace(&PyTuple_GET_ITEM(consts, i)); }
