]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-46541: Drop the check for orphaned global strings. (gh-31363)
authorEric Snow <ericsnowcurrently@gmail.com>
Wed, 16 Feb 2022 03:06:38 +0000 (20:06 -0700)
committerGitHub <noreply@github.com>
Wed, 16 Feb 2022 03:06:38 +0000 (20:06 -0700)
https://bugs.python.org/issue46541

.github/workflows/build.yml
Makefile.pre.in
Tools/scripts/generate_global_objects.py

index 376359ccf2e2d226bd42573fb1a4c8a933969593..5d36dffa80108b40d5397ff2e1d0da44058c53bf 100644 (file)
@@ -100,8 +100,6 @@ jobs:
         run: make smelly
       - name: Check limited ABI symbols
         run: make check-limited-abi
-      - name: Check global objects
-        run: make check-global-objects
 
   build_win32:
     name: 'Windows (x86)'
index 9b08929dd67c22802e3c2f5cb3630d994ef7f56e..2464bbdf2ddd000e5f42ff440c8c29df163cbe1b 100644 (file)
@@ -2436,9 +2436,6 @@ patchcheck: @DEF_MAKE_RULE@
 check-limited-abi: all
        $(RUNSHARED) ./$(BUILDPYTHON) $(srcdir)/Tools/scripts/stable_abi.py --all $(srcdir)/Misc/stable_abi.txt
 
-check-global-objects: all
-       $(RUNSHARED) ./$(BUILDPYTHON) $(srcdir)/Tools/scripts/generate_global_objects.py --check
-
 .PHONY: update-config
 update-config:
        curl -sL -o config.guess 'https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD'
index e989f3c086f344f1a52f03ea7a64dce9de4bd743..7a5f42f0d3238f001a438bd7352edbbb0f2ebe55 100644 (file)
@@ -252,147 +252,10 @@ def generate_runtime_init(identifiers, strings):
         printer.write(after)
 
 
-#######################################
-# checks
-
-def err(msg):
-    print(msg, file=sys.stderr)
-
-
-GETTER_RE = re.compile(r'''
-    ^
-    .*?
-    (?:
-        (?:
-            _Py_ID
-            [(]
-            ( \w+ )  # <identifier>
-            [)]
-         )
-        |
-        (?:
-            _Py_STR
-            [(]
-            ( \w+ )  # <literal>
-            [)]
-         )
-     )
-''', re.VERBOSE)
-TYPESLOTS_RE = re.compile(r'''
-    ^
-    .*?
-    (?:
-        (?:
-            SLOT0 [(] .*?, \s*
-            ( \w+ )  # <slot0>
-            [)]
-         )
-        |
-        (?:
-            SLOT1 [(] .*?, \s*
-            ( \w+ )  # <slot1>
-            , .* [)]
-         )
-        |
-        (?:
-            SLOT1BIN [(] .*?, .*?, \s*
-            ( \w+ )  # <slot1bin>
-            , \s*
-            ( \w+ )  # <reverse>
-            [)]
-         )
-        |
-        (?:
-            SLOT1BINFULL [(] .*?, .*?, .*?, \s*
-            ( \w+ )  # <slot1binfull>
-            , \s*
-            ( \w+ )  # <fullreverse>
-            [)]
-         )
-        |
-        ( SLOT \d .* [^)] $ )  # <wrapped>
-     )
-''', re.VERBOSE)
-
-def check_orphan_strings(identifiers):
-    literals = set(n for n, s in STRING_LITERALS.items() if s)
-    identifiers = set(identifiers)
-    files = glob.iglob(os.path.join(ROOT, '**', '*.[ch]'), recursive=True)
-    for i, filename in enumerate(files, start=1):
-        print('.', end='')
-        if i % 5 == 0:
-            print(' ', end='')
-        if i % 20 == 0:
-            print()
-        if i % 100 == 0:
-            print()
-        with open(filename) as infile:
-            wrapped = None
-            for line in infile:
-                identifier = literal = reverse = None
-
-                line = line.splitlines()[0]
-                if wrapped:
-                    line = f'{wrapped.rstrip()} {line}'
-                    wrapped = None
-
-                if os.path.basename(filename) == '_warnings.c':
-                    m = re.match(r'^.* = GET_WARNINGS_ATTR[(][^,]*, (\w+),', line)
-                    if m:
-                        identifier, = m.groups()
-                elif os.path.basename(filename) == 'typeobject.c':
-                    m = TYPESLOTS_RE.match(line)
-                    if m:
-                        (slot0,
-                         slot1,
-                         slot1bin, reverse,
-                         slot1binfull, fullreverse,
-                         wrapped,
-                         ) = m.groups()
-                        identifier = slot0 or slot1 or slot1bin or slot1binfull
-                        reverse = reverse or fullreverse
-
-                if not identifier and not literal:
-                    m = GETTER_RE.match(line)
-                    if not m:
-                        continue
-                    identifier, literal = m.groups()
-
-                if literal:
-                    if literals and literal in literals:
-                        literals.remove(literal)
-                if identifier:
-                    if identifiers and identifier in identifiers:
-                        identifiers.remove(identifier)
-                if reverse:
-                    if identifiers and reverse in identifiers:
-                        identifiers.remove(reverse)
-                if not literals and not identifiers:
-                    break
-            else:
-                continue
-            break
-    if i % 20:
-        print()
-    if not literals and not identifiers:
-        return
-    print('ERROR:', file=sys.stderr)
-    if literals:
-        err(' unused global string literals:')
-        for name in sorted(literals):
-            err(f'   {name}')
-    if identifiers:
-        if literals:
-            print()
-        err(' unused global identifiers:')
-        for name in sorted(identifiers):
-            err(f'   {name}')
-
-
 #######################################
 # the script
 
-def main(*, check=False) -> None:
+def main() -> None:
     identifiers = set(IDENTIFIERS)
     strings = dict(STRING_LITERALS)
     for name, string, filename, lno, _ in iter_global_strings():
@@ -408,13 +271,9 @@ def main(*, check=False) -> None:
     generate_global_strings(identifiers, strings)
     generate_runtime_init(identifiers, strings)
 
-    if check:
-        check_orphan_strings(identifiers)
-
 
 if __name__ == '__main__':
     import argparse
     parser = argparse.ArgumentParser()
-    parser.add_argument('--check', action='store_true')
     args = parser.parse_args()
     main(**vars(args))