From 71167fe15c06337de12e05d2413522256342940e Mon Sep 17 00:00:00 2001 From: Eric Snow Date: Wed, 17 Aug 2022 13:43:08 -0600 Subject: [PATCH 1/7] Stop excluding initconfig.c. --- Tools/c-analyzer/cpython/_parser.py | 1 - 1 file changed, 1 deletion(-) diff --git a/Tools/c-analyzer/cpython/_parser.py b/Tools/c-analyzer/cpython/_parser.py index 14ab6198ff258c..42a10a250570ed 100644 --- a/Tools/c-analyzer/cpython/_parser.py +++ b/Tools/c-analyzer/cpython/_parser.py @@ -111,7 +111,6 @@ def clean_lines(text): Modules/cjkcodecs/_codecs_*.c Modules/expat/xmlrole.c Modules/expat/xmlparse.c -Python/initconfig.c ''') INCL_DIRS = clean_lines(''' From cda5d54c6a856e0e34d9b3e98c396b647eb21bc6 Mon Sep 17 00:00:00 2001 From: Eric Snow Date: Wed, 17 Aug 2022 14:17:56 -0600 Subject: [PATCH 2/7] Treat a signature as a vartype. --- Tools/c-analyzer/c_parser/info.py | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/Tools/c-analyzer/c_parser/info.py b/Tools/c-analyzer/c_parser/info.py index a1d349dc0b0ddb..e9783ccc953553 100644 --- a/Tools/c-analyzer/c_parser/info.py +++ b/Tools/c-analyzer/c_parser/info.py @@ -385,6 +385,9 @@ def get_parsed_vartype(decl): elif isinstance(decl, Variable): storage = decl.storage typequal, typespec, abstract = decl.vartype + elif isinstance(decl, Signature): + storage = None + typequal, typespec, abstract = decl.returntype elif isinstance(decl, Function): storage = decl.storage typequal, typespec, abstract = decl.signature.returntype @@ -1012,6 +1015,18 @@ def __str__(self): def returns(self): return self.returntype + @property + def typequal(self): + return self.returntype.typequal + + @property + def typespec(self): + return self.returntype.typespec + + @property + def abstract(self): + return self.returntype.abstract + class Function(Declaration): kind = KIND.FUNCTION @@ -1106,9 +1121,16 @@ class TypeDef(TypeDeclaration): def _resolve_data(cls, data): if not data: raise NotImplementedError(data) - vartype = dict(data) - del vartype['storage'] - return VarType(**vartype), None + kwargs = dict(data) + del kwargs['storage'] + if 'returntype' in kwargs: + vartype = kwargs['returntype'] + del vartype['storage'] + kwargs['returntype'] = VarType(**vartype) + datacls = Signature + else: + datacls = VarType + return datacls(**kwargs), None @classmethod def _raw_data(self, data): From b2588c2c35a41cc786744666fa68909379a80185 Mon Sep 17 00:00:00 2001 From: Eric Snow Date: Wed, 17 Aug 2022 14:26:37 -0600 Subject: [PATCH 3/7] Stop excluding xmlrole.c. --- Tools/c-analyzer/cpython/_parser.py | 1 - Tools/c-analyzer/cpython/ignored.tsv | 52 ++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/Tools/c-analyzer/cpython/_parser.py b/Tools/c-analyzer/cpython/_parser.py index 42a10a250570ed..8c6108c72aa9e0 100644 --- a/Tools/c-analyzer/cpython/_parser.py +++ b/Tools/c-analyzer/cpython/_parser.py @@ -109,7 +109,6 @@ def clean_lines(text): Modules/_dbmmodule.c Modules/cjkcodecs/_codecs_*.c -Modules/expat/xmlrole.c Modules/expat/xmlparse.c ''') diff --git a/Tools/c-analyzer/cpython/ignored.tsv b/Tools/c-analyzer/cpython/ignored.tsv index bc3b37dd7da0a5..7c319022b8c7e6 100644 --- a/Tools/c-analyzer/cpython/ignored.tsv +++ b/Tools/c-analyzer/cpython/ignored.tsv @@ -307,6 +307,58 @@ Objects/object.c - _PyLineIterator - Objects/object.c - _PyPositionsIterator - Python/importdl.h - _PyImport_DynLoadFiletab - +Modules/expat/xmlrole.c - prolog0 - +Modules/expat/xmlrole.c - prolog1 - +Modules/expat/xmlrole.c - prolog2 - +Modules/expat/xmlrole.c - doctype0 - +Modules/expat/xmlrole.c - doctype1 - +Modules/expat/xmlrole.c - doctype2 - +Modules/expat/xmlrole.c - doctype3 - +Modules/expat/xmlrole.c - doctype4 - +Modules/expat/xmlrole.c - doctype5 - +Modules/expat/xmlrole.c - internalSubset - +Modules/expat/xmlrole.c - entity0 - +Modules/expat/xmlrole.c - entity1 - +Modules/expat/xmlrole.c - entity2 - +Modules/expat/xmlrole.c - entity3 - +Modules/expat/xmlrole.c - entity4 - +Modules/expat/xmlrole.c - entity5 - +Modules/expat/xmlrole.c - entity6 - +Modules/expat/xmlrole.c - entity7 - +Modules/expat/xmlrole.c - entity8 - +Modules/expat/xmlrole.c - entity9 - +Modules/expat/xmlrole.c - entity10 - +Modules/expat/xmlrole.c - notation0 - +Modules/expat/xmlrole.c - notation1 - +Modules/expat/xmlrole.c - notation2 - +Modules/expat/xmlrole.c - notation3 - +Modules/expat/xmlrole.c - notation4 - +Modules/expat/xmlrole.c - attlist0 - +Modules/expat/xmlrole.c - attlist1 - +Modules/expat/xmlrole.c - attlist2 - +Modules/expat/xmlrole.c - attlist3 - +Modules/expat/xmlrole.c - attlist4 - +Modules/expat/xmlrole.c - attlist5 - +Modules/expat/xmlrole.c - attlist6 - +Modules/expat/xmlrole.c - attlist7 - +Modules/expat/xmlrole.c - attlist8 - +Modules/expat/xmlrole.c - attlist9 - +Modules/expat/xmlrole.c - element0 - +Modules/expat/xmlrole.c - element1 - +Modules/expat/xmlrole.c - element2 - +Modules/expat/xmlrole.c - element3 - +Modules/expat/xmlrole.c - element4 - +Modules/expat/xmlrole.c - element5 - +Modules/expat/xmlrole.c - element6 - +Modules/expat/xmlrole.c - element7 - +Modules/expat/xmlrole.c - externalSubset0 - +Modules/expat/xmlrole.c - externalSubset1 - +Modules/expat/xmlrole.c - condSect0 - +Modules/expat/xmlrole.c - condSect1 - +Modules/expat/xmlrole.c - condSect2 - +Modules/expat/xmlrole.c - declClose - +Modules/expat/xmlrole.c - error - + ################################## # test code From e6efd2427494e69f911ffe1f38b70a9781b74380 Mon Sep 17 00:00:00 2001 From: Eric Snow Date: Wed, 17 Aug 2022 14:38:35 -0600 Subject: [PATCH 4/7] Make logging a little clearer. --- Tools/c-analyzer/c_parser/parser/_common.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Tools/c-analyzer/c_parser/parser/_common.py b/Tools/c-analyzer/c_parser/parser/_common.py index 40c36039f3f47d..d468d5442a939f 100644 --- a/Tools/c-analyzer/c_parser/parser/_common.py +++ b/Tools/c-analyzer/c_parser/parser/_common.py @@ -9,7 +9,11 @@ def log_match(group, m): from . import _logger - _logger.debug(f'matched <{group}> ({m.group(0)})') + text = m.group(0) + if text.startswith(('(', ')')) or text.endswith(('(', ')')): + _logger.debug(f'matched <{group}> ({text!r})') + else: + _logger.debug(f'matched <{group}> ({text})') ############################# From 962645e7681ebc2a7f3c97d065e4613427ff6a34 Mon Sep 17 00:00:00 2001 From: Eric Snow Date: Wed, 17 Aug 2022 15:17:17 -0600 Subject: [PATCH 5/7] Stop excluding stdlib_module_names.h. --- Tools/c-analyzer/cpython/_parser.py | 2 +- Tools/c-analyzer/cpython/ignored.tsv | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Tools/c-analyzer/cpython/_parser.py b/Tools/c-analyzer/cpython/_parser.py index 8c6108c72aa9e0..93edb93a20d901 100644 --- a/Tools/c-analyzer/cpython/_parser.py +++ b/Tools/c-analyzer/cpython/_parser.py @@ -87,7 +87,6 @@ def clean_lines(text): Python/deepfreeze/*.c Python/frozen_modules/*.h Python/opcode_targets.h -Python/stdlib_module_names.h # @end=conf@ ''') @@ -308,6 +307,7 @@ def clean_lines(text): _abs('Python/compile.c'): (20_000, 500), _abs('Python/pylifecycle.c'): (500_000, 5000), _abs('Python/pystate.c'): (500_000, 5000), + _abs('Python/stdlib_module_names.h'): (5_000, 500), } diff --git a/Tools/c-analyzer/cpython/ignored.tsv b/Tools/c-analyzer/cpython/ignored.tsv index 7c319022b8c7e6..04c540f8864d8a 100644 --- a/Tools/c-analyzer/cpython/ignored.tsv +++ b/Tools/c-analyzer/cpython/ignored.tsv @@ -1985,4 +1985,5 @@ Python/specialize.c - adaptive_opcodes - Python/specialize.c - cache_requirements - Python/specialize.c - compare_masks - Python/specialize.c - _PyOpcode_Adaptive - +Python/stdlib_module_names.h - _Py_stdlib_module_names - Python/sysmodule.c - whatstrings - From 7046eb58f547b13af649a114a12538ca73c648ed Mon Sep 17 00:00:00 2001 From: Eric Snow Date: Wed, 17 Aug 2022 15:21:56 -0600 Subject: [PATCH 6/7] Stop excluding opcode_targets.h. --- Tools/c-analyzer/cpython/_parser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tools/c-analyzer/cpython/_parser.py b/Tools/c-analyzer/cpython/_parser.py index 93edb93a20d901..5942bb24f6cb84 100644 --- a/Tools/c-analyzer/cpython/_parser.py +++ b/Tools/c-analyzer/cpython/_parser.py @@ -86,7 +86,6 @@ def clean_lines(text): # generated Python/deepfreeze/*.c Python/frozen_modules/*.h -Python/opcode_targets.h # @end=conf@ ''') @@ -307,6 +306,7 @@ def clean_lines(text): _abs('Python/compile.c'): (20_000, 500), _abs('Python/pylifecycle.c'): (500_000, 5000), _abs('Python/pystate.c'): (500_000, 5000), + _abs('Python/opcode_targets.h'): (10_000, 500), _abs('Python/stdlib_module_names.h'): (5_000, 500), } From 52dff738166b7352efcba9644e57dcf6fff6d3e8 Mon Sep 17 00:00:00 2001 From: Eric Snow Date: Wed, 17 Aug 2022 15:27:52 -0600 Subject: [PATCH 7/7] Add some not-used-yet max sizes. --- Tools/c-analyzer/cpython/_parser.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Tools/c-analyzer/cpython/_parser.py b/Tools/c-analyzer/cpython/_parser.py index 5942bb24f6cb84..992d2e5a7c3d8d 100644 --- a/Tools/c-analyzer/cpython/_parser.py +++ b/Tools/c-analyzer/cpython/_parser.py @@ -304,6 +304,8 @@ def clean_lines(text): _abs('Objects/stringlib/unicode_format.h'): (10_000, 400), _abs('Objects/typeobject.c'): (20_000, 200), _abs('Python/compile.c'): (20_000, 500), + _abs('Python/deepfreeze/*.c'): (20_000, 500), + _abs('Python/frozen_modules/*.h'): (20_000, 500), _abs('Python/pylifecycle.c'): (500_000, 5000), _abs('Python/pystate.c'): (500_000, 5000), _abs('Python/opcode_targets.h'): (10_000, 500),