SWDEV-475540: Fix build time parsing of unions

- Fixes issue where types defined inside of a union were being skipped
  for ostream operator generation
- Also fixes issue where these types were not correctly defined in the
  resulting operators' parameters
- Fixes edge case where types with "union" in their name were being
  skipped as if they were union types

Change-Id: I736c57788cbc461e9493d4651756dc06c278430d


[ROCm/rocprofiler commit: 70268ccc9f]
Bu işleme şunda yer alıyor:
meserve-amd
2024-07-24 14:30:42 -05:00
işlemeyi yapan: Mark Meserve
ebeveyn 2be5e3b45a
işleme b92db40cc6
+9 -1
Dosyayı Görüntüle
@@ -242,10 +242,18 @@ def gen_cppheader(infilepath, outfilepath, rank):
output_filename_h.write(header_basic)
output_filename_h.write("// End of basic ostream ops\n\n")
for c in cppHeader.classes.copy():
# Types defined inside of unions are incorrectly prepended with "union " after parsing by CppHeaderParser
# Remove "union " from the beginning of the full class name to correct the eventual output
if "union " in c[0:6] and "::union" not in c[-8:]:
new_name = c[6:]
cppHeader.classes[new_name] = cppHeader.classes[c]
del cppHeader.classes[c]
for c in cppHeader.classes:
if c[-2] == ":" and c[-1] == ":":
continue # ostream operator cannot be overloaded for anonymous struct therefore it is skipped
if "union" in c:
if "::union" in c:
continue
if c in structs_analyzed:
continue