gh-133158: Adjust c-analyzer max_sizes for typeobject.c (GH-133159)

This also improves the error message for when a file is too large.
This commit is contained in:
Sergey Miryanov
2025-09-02 06:34:22 -07:00
committed by GitHub
parent 0a0cbd43a7
commit 33f89106d7
3 changed files with 33 additions and 5 deletions

View File

@@ -116,6 +116,8 @@ TODO:
* alt impl using a state machine (& tokenizer or split on delimiters)
"""
import textwrap
from ..info import ParsedItem
from ._info import SourceInfo
@@ -208,7 +210,27 @@ def _iter_source(lines, *, maxtext=11_000, maxlines=200, showtext=False):
return
# At this point either the file ended prematurely
# or there's "too much" text.
filename, lno, text = srcinfo.filename, srcinfo._start, srcinfo.text
filename, lno_from, lno_to = srcinfo.filename, srcinfo.start, srcinfo.end
text = srcinfo.text
if len(text) > 500:
text = text[:500] + '...'
raise Exception(f'unmatched text ({filename} starting at line {lno}):\n{text}')
if srcinfo.too_much_text(maxtext):
msg = f'''
too much text, try to increase MAX_SIZES[MAXTEXT] in cpython/_parser.py
{filename} starting at line {lno_from} to {lno_to}
has code with length {len(text)} greater than {maxtext}:
{text}
'''
raise RuntimeError(textwrap.dedent(msg))
if srcinfo.too_many_lines(maxlines):
msg = f'''
too many lines, try to increase MAX_SIZES[MAXLINES] in cpython/_parser.py
{filename} starting at line {lno_from} to {lno_to}
has code with number of lines {lno_to - lno_from} greater than {maxlines}:
{text}
'''
raise RuntimeError(textwrap.dedent(msg))
raise RuntimeError(f'unmatched text ({filename} starting at line {lno_from}):\n{text}')

View File

@@ -123,10 +123,16 @@ class SourceInfo:
def done(self):
self._set_ready()
def too_much_text(self, maxtext):
return maxtext and len(self.text) > maxtext
def too_many_lines(self, maxlines):
return maxlines and self.end - self.start > maxlines
def too_much(self, maxtext, maxlines):
if maxtext and len(self.text) > maxtext:
if self.too_much_text(maxtext):
pass
elif maxlines and self.end - self.start > maxlines:
elif self.too_many_lines(maxlines):
pass
else:
return False

View File

@@ -326,7 +326,7 @@ MAX_SIZES = {
_abs('Modules/_testcapimodule.c'): (20_000, 400),
_abs('Modules/expat/expat.h'): (10_000, 400),
_abs('Objects/stringlib/unicode_format.h'): (10_000, 400),
_abs('Objects/typeobject.c'): (35_000, 200),
_abs('Objects/typeobject.c'): (380_000, 13_000),
_abs('Python/compile.c'): (20_000, 500),
_abs('Python/optimizer.c'): (100_000, 5_000),
_abs('Python/parking_lot.c'): (40_000, 1000),