Skip to content

Commit 2adc74a

Browse files
committed
adt: improve formatted output
- remove empty line after props if there are no children - quote/escape string values - escape key names / function names - indent property value representations - special format for regs - format multiline lists better Signed-off-by: Alba Mendez <[email protected]>
1 parent d4d1c36 commit 2adc74a

1 file changed

Lines changed: 12 additions & 4 deletions

File tree

proxyclient/m1n1/adt.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -646,14 +646,20 @@ def _fmt_prop(self, k, v):
646646
t, is_template = self._types.get(k, (None, False))
647647
if is_template:
648648
return f"<< {v} >>"
649+
elif k == 'reg' and isinstance(v, ListContainer) and all(isinstance(x, Container) for x in v):
650+
fmt_value = lambda n: f'{n:#018x}' if isinstance(n, int) else ' '.join(f'{x:#010x}' for x in n)
651+
return "\n".join(["[", *(f" (addr = {fmt_value(x.addr)}, size = {fmt_value(x.size)})," for x in v), "]"])
649652
elif isinstance(v, ListContainer):
650-
return f"[{', '.join(self._fmt_prop(k, i) for i in v)}]"
653+
vs = [self._fmt_prop((k, i), x) for i, x in enumerate(v)]
654+
if any(('\n' in v) for v in vs) or (len(vs) > 1 and max(map(len, vs)) > 20):
655+
return "\n".join(["[", *("- " + v.replace("\n", "\n ") for v in vs), "]"])
656+
return f"[{', '.join(vs)}]"
651657
elif isinstance(v, bytes):
652658
if all(i == 0 for i in v):
653659
return f"zeroes({len(v):#x})"
654660
else:
655661
return v.hex()
656-
elif k.startswith("function-"):
662+
elif isinstance(k, str) and k.startswith("function-"):
657663
if isinstance(v, str):
658664
return f"{v}()"
659665
elif v is None:
@@ -666,14 +672,16 @@ def _fmt_prop(self, k, v):
666672
args.append(f"{arg:#x}" if not is_ascii else f"'{b.decode('ascii')}'")
667673
return f"{v.phandle}:{v.name}({', '.join(args)})"
668674
name.startswith("function-")
675+
elif isinstance(v, str):
676+
return repr(v)
669677
else:
670678
return str(v)
671679

672680
def __str__(self, t=""):
673681
return "\n".join([
674682
t + f"{self.name} {{",
675-
*(t + f" {k} = {self._fmt_prop(k, v)}" for k, v in self._properties.items() if k != "name"),
676-
"",
683+
*(t + f" {repr(k)[1:-1]} = {self._fmt_prop(k, v).replace('\n', '\n'+t+' ')}" for k, v in self._properties.items() if k != "name"),
684+
*([""] if self._children else []),
677685
*(i.__str__(t + " ") for i in self._children),
678686
t + "}"
679687
])

0 commit comments

Comments
 (0)