19 lines
986 B
Python
19 lines
986 B
Python
#!/usr/bin/env python3
|
|
"""Regression for PySlice_New declarations accepted by VC6 C89."""
|
|
import re
|
|
import subprocess
|
|
import sys
|
|
import tempfile
|
|
from pathlib import Path
|
|
|
|
source = Path(sys.argv[1] if len(sys.argv) > 1 else "cpython/Objects/sliceobject.c")
|
|
text = source.read_text()
|
|
match = re.search(r"PySlice_New\(PyObject \*start, PyObject \*stop, PyObject \*step\)\s*\{(.*?)\n\}", text, re.S)
|
|
assert match, "PySlice_New definition not found"
|
|
body = match.group(1)
|
|
assert re.search(r"^\s*PyInterpreterState \*interp;\s*$", body, re.M), "interp must be declared at function entry"
|
|
assert re.search(r"^\s*PySliceObject \*obj;\s*$", body, re.M), "obj must be declared at function entry"
|
|
assert "PyInterpreterState *interp = _PyInterpreterState_GET();" not in body, "interp initialization must remain a separate assignment"
|
|
assert re.search(r"interp\s*=\s*_PyInterpreterState_GET\(\);", body), "preserve interpreter lookup"
|
|
print("PySlice_New C89 declaration placement and lookup: PASS")
|