Skip to content

Commit aede985

Browse files
DinoVmeta-codesync[bot]
authored andcommitted
Update update_hir_expected script to support non-version macros nested in version macros
Summary: D90516081 added some #if conditions below a versioned macro and this actually breaks the update_hir_expected script. This adds support for tracking non-version related macros. Reviewed By: alexmalyshev Differential Revision: D95962249 fbshipit-source-id: c17b774c53be456e5129598665dbacaa829175fc
1 parent f04846e commit aede985

1 file changed

Lines changed: 27 additions & 7 deletions

File tree

cinderx/TestScripts/update_hir_expected.py

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,7 @@ def write_if_changed(filename: str, old_lines: list[str], new_lines: list[str])
290290

291291
CPP_TEST_NAME_RE: re.Pattern[str] = re.compile(r"^TEST(_F)?\(([^,]+), ([^)]+)\) {")
292292
# Dynamic regex patterns - will be generated based on versions found
293+
CPP_MACRO_IF_RE: re.Pattern[str] = re.compile(r"^#if\b")
293294
CPP_MACRO_ELSE_RE: re.Pattern[str] = re.compile(r"^#else")
294295
CPP_MACRO_ENDIF_RE: re.Pattern[str] = re.compile(r"^#endif")
295296

@@ -400,6 +401,7 @@ def expect_empty_test_dict() -> None:
400401

401402
state = State.WAIT_FOR_TEST
402403
in_version_block = None
404+
non_version_pp_depth = 0
403405
needs_to_close_upgraded_block = False
404406
new_lines = []
405407
for lineno, line in enumerate(old_lines, 1): # noqa: B007
@@ -442,16 +444,34 @@ def expect_empty_test_dict() -> None:
442444
new_lines.append(line)
443445
continue
444446

445-
if in_version_block is not None and CPP_MACRO_ELSE_RE.match(line):
446-
# #else represents the fallback version (lowest supported version)
447-
in_version_block = "3.10" # Assume 3.10 as the lowest supported version
447+
# Track non-version preprocessor #if directives (e.g., #if defined(...))
448+
# so their #else/#endif don't get confused with version block boundaries.
449+
if CPP_MACRO_IF_RE.match(line):
450+
non_version_pp_depth += 1
448451
new_lines.append(line)
449452
continue
450453

451-
if in_version_block is not None and CPP_MACRO_ENDIF_RE.match(line):
452-
in_version_block = None
453-
new_lines.append(line)
454-
continue
454+
if CPP_MACRO_ELSE_RE.match(line):
455+
if non_version_pp_depth > 0:
456+
new_lines.append(line)
457+
continue
458+
if in_version_block is not None:
459+
# #else represents the fallback version (lowest supported version)
460+
in_version_block = (
461+
"3.10" # Assume 3.10 as the lowest supported version
462+
)
463+
new_lines.append(line)
464+
continue
465+
466+
if CPP_MACRO_ENDIF_RE.match(line):
467+
if non_version_pp_depth > 0:
468+
non_version_pp_depth -= 1
469+
new_lines.append(line)
470+
continue
471+
if in_version_block is not None:
472+
in_version_block = None
473+
new_lines.append(line)
474+
continue
455475

456476
m = CPP_EXPECTED_START_RE.match(line)
457477
if m is not None:

0 commit comments

Comments
 (0)