Mercurial > cpython-lru_cache-weakref
diff Python/compile.c @ 33272:bac997b79b19 legacy-trunk
Bypass peepholing of code with lineno tables having intervals >= 255.
Allows the lineno fixup code to remain simple and not have to deal with
multibyte codings.
* Add an assertion to that effect.
* Remove the XXX comment on the subject.
| author | Raymond Hettinger <python@rcn.com> |
|---|---|
| date | Wed, 25 Aug 2004 17:19:38 +0000 |
| parents | 3dbdbd572d94 |
| children | f7474d31ba3f |
line wrap: on
line diff
--- a/Python/compile.c Wed Aug 25 15:15:56 2004 +0000 +++ b/Python/compile.c Wed Aug 25 17:19:38 2004 +0000 @@ -435,6 +435,13 @@ unsigned int *blocks; char *name; + /* Bypass optimization when the lineno table is too complex */ + assert(PyString_Check(lineno_obj)); + lineno = PyString_AS_STRING(lineno_obj); + tabsiz = PyString_GET_SIZE(lineno_obj); + if (memchr(lineno, 255, tabsiz) != NULL) + goto exitUnchanged; + if (!PyString_Check(code)) goto exitUnchanged; @@ -614,15 +621,12 @@ } /* Fixup linenotab */ - /* XXX make sure this handles intervals > 256 */ - assert(PyString_Check(lineno_obj)); - lineno = PyString_AS_STRING(lineno_obj); - tabsiz = PyString_GET_SIZE(lineno_obj); cum_orig_line = 0; last_line = 0; for (i=0 ; i < tabsiz ; i+=2) { cum_orig_line += lineno[i]; new_line = addrmap[cum_orig_line]; + assert (new_line - last_line < 255); lineno[i] =((unsigned char)(new_line - last_line)); last_line = new_line; }
