SF Patch #103250, by pj99: Optimize a strspn() out of startup.
Minor startup speedup: avoid a call to strspn().
This commit is contained in:
parent
2312024eb7
commit
fc5ce61abd
@ -164,6 +164,26 @@ PyTypeObject PyCode_Type = {
|
|||||||
#define NAME_CHARS \
|
#define NAME_CHARS \
|
||||||
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"
|
"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 *
|
PyCodeObject *
|
||||||
PyCode_New(int argcount, int nlocals, int stacksize, int flags,
|
PyCode_New(int argcount, int nlocals, int stacksize, int flags,
|
||||||
PyObject *code, PyObject *consts, PyObject *names,
|
PyObject *code, PyObject *consts, PyObject *names,
|
||||||
@ -214,12 +234,9 @@ PyCode_New(int argcount, int nlocals, int stacksize, int flags,
|
|||||||
/* Intern selected string constants */
|
/* Intern selected string constants */
|
||||||
for (i = PyTuple_Size(consts); --i >= 0; ) {
|
for (i = PyTuple_Size(consts); --i >= 0; ) {
|
||||||
PyObject *v = PyTuple_GetItem(consts, i);
|
PyObject *v = PyTuple_GetItem(consts, i);
|
||||||
char *p;
|
|
||||||
if (!PyString_Check(v))
|
if (!PyString_Check(v))
|
||||||
continue;
|
continue;
|
||||||
p = PyString_AsString(v);
|
if (!all_name_chars((unsigned char *)PyString_AsString(v)))
|
||||||
if (strspn(p, NAME_CHARS)
|
|
||||||
!= (size_t)PyString_Size(v))
|
|
||||||
continue;
|
continue;
|
||||||
PyString_InternInPlace(&PyTuple_GET_ITEM(consts, i));
|
PyString_InternInPlace(&PyTuple_GET_ITEM(consts, i));
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user