port: advance VC6 typeobject frontier and preserve regression coverage
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Check tracemalloc's positional initializer against its header definition."""
|
||||
|
||||
import re
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
source = Path(sys.argv[1]).read_text()
|
||||
header = Path(sys.argv[2]).read_text()
|
||||
header = re.sub(r"/\*.*?\*/", "", header, flags=re.S)
|
||||
layout = re.search(r"struct _PyTraceMalloc_Config \{(.*?)\n\};", header, re.S)
|
||||
assert layout, "_PyTraceMalloc_Config definition not found"
|
||||
fields = re.findall(r"\b(\w+)\s*;", layout.group(1))
|
||||
assert fields == ["initialized", "tracing", "max_nframe"], (
|
||||
"expected initialized, tracing, max_nframe field order"
|
||||
)
|
||||
macro = re.search(
|
||||
r"#define _PyTraceMalloc_Config_INIT\s*\\\s*\{(.*?)\}", header, re.S
|
||||
)
|
||||
assert macro, "_PyTraceMalloc_Config_INIT definition not found"
|
||||
defaults = re.findall(r"\.(\w+)\s*=\s*(\w+)", macro.group(1))
|
||||
assert defaults == list(zip(fields, ["TRACEMALLOC_NOT_INITIALIZED", "0", "1"])), (
|
||||
"expected uninitialized, tracing disabled, and one traceback frame defaults"
|
||||
)
|
||||
initializer = re.search(
|
||||
r"struct _PyTraceMalloc_Config _Py_tracemalloc_config\s*=\s*(.*?);",
|
||||
source,
|
||||
re.S,
|
||||
)
|
||||
assert initializer, "_Py_tracemalloc_config initializer not found"
|
||||
body = re.sub(r"/\*.*?\*/", "", initializer.group(1), flags=re.S).strip()
|
||||
assert body.startswith("{") and body.endswith("}") and not re.search(
|
||||
r"\.\s*\w+\s*=", body
|
||||
), "_Py_tracemalloc_config must use a VC6-compatible positional initializer"
|
||||
values = [value.strip() for value in body[1:-1].strip().rstrip(",").split(",")]
|
||||
assert values == [value for field, value in defaults], (
|
||||
"positional initializer must preserve every header default in field order"
|
||||
)
|
||||
print("obmalloc tracemalloc C89 positional initializer: PASS (initialized=TRACEMALLOC_NOT_INITIALIZED, tracing=0, max_nframe=1)")
|
||||
Reference in New Issue
Block a user