diff options
author | Eric Snow <ericsnowcurrently@gmail.com> | 2022-02-16 03:06:38 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-02-16 03:06:38 (GMT) |
commit | 6c8958948666403f2370ca7b4c0a52b2010ec16d (patch) | |
tree | 29d0c1b9c8d9c7872df6aeaf7f3eb4b89423b552 | |
parent | 602630ac1855e38ef06361c68f6e216375a06180 (diff) | |
download | cpython-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.yml | 2 | ||||
-rw-r--r-- | Makefile.pre.in | 3 | ||||
-rw-r--r-- | Tools/scripts/generate_global_objects.py | 143 |
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)) |