[Python-checkins] bpo-46541: Drop the check for orphaned global strings. (gh-31363)

ericsnowcurrently webhook-mailer at python.org
Tue Feb 15 22:06:43 EST 2022


https://github.com/python/cpython/commit/6c8958948666403f2370ca7b4c0a52b2010ec16d
commit: 6c8958948666403f2370ca7b4c0a52b2010ec16d
branch: main
author: Eric Snow <ericsnowcurrently at gmail.com>
committer: ericsnowcurrently <ericsnowcurrently at gmail.com>
date: 2022-02-15T20:06:38-07:00
summary:

bpo-46541: Drop the check for orphaned global strings. (gh-31363)

https://bugs.python.org/issue46541

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

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 376359ccf2e2d..5d36dffa80108 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -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)'
diff --git a/Makefile.pre.in b/Makefile.pre.in
index 9b08929dd67c2..2464bbdf2ddd0 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -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'
diff --git a/Tools/scripts/generate_global_objects.py b/Tools/scripts/generate_global_objects.py
index e989f3c086f34..7a5f42f0d3238 100644
--- a/Tools/scripts/generate_global_objects.py
+++ b/Tools/scripts/generate_global_objects.py
@@ -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))



More information about the Python-checkins mailing list