]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-81057: Get the c-analyzer tool working again. (gh-92246)
authorEric Snow <ericsnowcurrently@gmail.com>
Tue, 3 May 2022 19:18:27 +0000 (13:18 -0600)
committerGitHub <noreply@github.com>
Tue, 3 May 2022 19:18:27 +0000 (13:18 -0600)
Tools/c-analyzer/c_parser/info.py
Tools/c-analyzer/c_parser/parser/_compound_decl_body.py
Tools/c-analyzer/c_parser/parser/_regexes.py
Tools/c-analyzer/cpython/_parser.py

index 697b1f26dc21519974315a51a50a21029287b1d5..bbfbff7e62d027107e26b5ff4be8399ac38f527d 100644 (file)
@@ -1161,7 +1161,9 @@ class Member(namedtuple('Member', 'name vartype size')):
             vartype = dict(raw.data)
             del vartype['storage']
             if 'size' in vartype:
-                size = int(vartype.pop('size'))
+                size = vartype.pop('size')
+                if isinstance(size, str) and size.isdigit():
+                    size = int(size)
             vartype = VarType(**vartype)
         return cls(name, vartype, size)
 
index eb5bc67607bb19a955d67aba6cd5f22a06fa715d..67528d227989627bd9970354d104b99f99e523fb 100644 (file)
@@ -99,7 +99,7 @@ def _parse_struct_next(m, srcinfo, anon_name, parent):
                 name = anon_name('struct-field-')
             if size:
 #                data = (data, size)
-                data['size'] = int(size)
+                data['size'] = int(size) if size.isdigit() else size
         else:
             # This shouldn't happen (we expect each field to have a name).
             raise NotImplementedError
index cb85a59aaa16c2859883857ca479042014081a8a..b7f22b186f496567178b1f307dccab9e85048d76 100644 (file)
@@ -176,6 +176,7 @@ DECLARATOR = textwrap.dedent(rf'''
                 (?:  # <IDENTIFIER>
                     {STRICT_IDENTIFIER}
                 )
+                # Inside the brackets is actually a "constant expression".
                 (?: \s* \[ (?: \s* [^\]]+ \s* )? [\]] )*  # arrays
              )
             |
@@ -184,6 +185,7 @@ DECLARATOR = textwrap.dedent(rf'''
                 (?:  # <WRAPPED_IDENTIFIER>
                     {STRICT_IDENTIFIER}
                 )
+                # Inside the brackets is actually a "constant expression".
                 (?: \s* \[ (?: \s* [^\]]+ \s* )? [\]] )*  # arrays
                 \s* [)]
              )
@@ -194,6 +196,7 @@ DECLARATOR = textwrap.dedent(rf'''
                 (?:  # <FUNC_IDENTIFIER>
                     {STRICT_IDENTIFIER}
                 )
+                # Inside the brackets is actually a "constant expression".
                 (?: \s* \[ (?: \s* [^\]]+ \s* )? [\]] )*  # arrays
                 \s* [)]
                 # We allow for a single level of paren nesting in parameters.
@@ -322,7 +325,10 @@ STRUCT_MEMBER_DECL = textwrap.dedent(rf'''
             (?:
                 \s* [:] \s*
                 (?:  # <SIZE>
+                    # This is actually a "constant expression".
                     \d+
+                    |
+                    [^'",}}]+
                  )
              )?
             \s*
@@ -357,6 +363,7 @@ ENUM_MEMBER_DECL = textwrap.dedent(rf'''
             (?:
                 \s* = \s*
                 (?:  # <INIT>
+                    # This is actually a "constant expression".
                     {_ind(STRING_LITERAL, 4)}
                     |
                     [^'",}}]+
index 19000096fc9c3f7add6dcbdd595bcf07e9b38de2..eaad7278ed79e36261488e5f68d7e7e2bf6c013a 100644 (file)
@@ -46,6 +46,7 @@ def clean_lines(text):
 @end=sh@
 '''
 
+# XXX Handle these.
 EXCLUDED = clean_lines('''
 # @begin=conf@
 
@@ -69,6 +70,7 @@ Python/dynload_aix.c            # sys/ldr.h
 Python/dynload_dl.c             # dl.h
 Python/dynload_hpux.c           # dl.h
 Python/thread_pthread.h
+Python/emscripten_signal.c
 
 # only huge constants (safe but parsing is slow)
 Modules/_blake2/impl/blake2-kat.h
@@ -202,6 +204,7 @@ Include/cpython/sysmodule.h Py_CPYTHON_SYSMODULE_H  1
 Include/cpython/traceback.h    Py_CPYTHON_TRACEBACK_H  1
 Include/cpython/tupleobject.h  Py_CPYTHON_TUPLEOBJECT_H        1
 Include/cpython/unicodeobject.h        Py_CPYTHON_UNICODEOBJECT_H      1
+Include/internal/pycore_code.h SIZEOF_VOID_P   8
 
 # implied include of pyport.h
 Include/**/*.h PyAPI_DATA(RTYPE)       extern RTYPE
@@ -297,8 +300,8 @@ MAX_SIZES = {
     _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/pylifecycle.c'): (200_000, 5000),
-    _abs('Python/pystate.c'): (200_000, 5000),
+    _abs('Python/pylifecycle.c'): (500_000, 5000),
+    _abs('Python/pystate.c'): (500_000, 5000),
 }