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));
 	}