summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Snow <ericsnowcurrently@gmail.com>2022-02-16 03:06:38 (GMT)
committerGitHub <noreply@github.com>2022-02-16 03:06:38 (GMT)
commit6c8958948666403f2370ca7b4c0a52b2010ec16d (patch)
tree29d0c1b9c8d9c7872df6aeaf7f3eb4b89423b552
parent602630ac1855e38ef06361c68f6e216375a06180 (diff)
downloadcpython-6c8958948666403f2370ca7b4c0a52b2010ec16d.zip
cpython-6c8958948666403f2370ca7b4c0a52b2010ec16d.tar.gz
cpython-6c8958948666403f2370ca7b4c0a52b2010ec16d.tar.bz2
bpo-46541: Drop the check for orphaned global strings. (gh-31363)
https://bugs.python.org/issue46541
-rw-r--r--.github/workflows/build.yml2
-rw-r--r--Makefile.pre.in3
-rw-r--r--Tools/scripts/generate_global_objects.py143
3 files changed, 1 insertions, 147 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 376359c..5d36dff 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 9b08929..2464bbd 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 e989f3c..7a5f42f 100644
--- a/Tools/scripts/generate_global_objects.py
+++ b/Tools/scripts/generate_global_objects.py
@@ -253,146 +253,9 @@ def generate_runtime_init(identifiers, strings):
#######################################
-# 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))