tree f8d08295e4c30219f419738914196f94cd1521df
parent 15abf0bd31801b6be0a80d50d6f95a65508a4528
author Rupert Swarbrick <rswarbrick@lowrisc.org> 1599040247 +0100
committer sriyerg <46467186+sriyerg@users.noreply.github.com> 1599155426 -0700

[util] Don't hack __repr__ in FlowCfg

This can cause an infinite recursion if you try to print a FlowCfg
object:

  File "/src/lr/opentitan/util/dvsim/FlowCfg.py", line 28, in __repr__
    return pprint.pformat(self.__dict__)
  File "/usr/lib/python3.8/pprint.py", line 58, in pformat
    return PrettyPrinter(indent=indent, width=width, depth=depth,
  File "/usr/lib/python3.8/pprint.py", line 153, in pformat
    self._format(object, sio, 0, 0, {}, 0)
  File "/usr/lib/python3.8/pprint.py", line 170, in _format
    rep = self._repr(object, context, level)
  File "/usr/lib/python3.8/pprint.py", line 404, in _repr
    repr, readable, recursive = self.format(object, context.copy(),
  File "/usr/lib/python3.8/pprint.py", line 417, in format
    return _safe_repr(object, context, maxlevels, level, self._sort_dicts)
  File "/usr/lib/python3.8/pprint.py", line 528, in _safe_repr
    vrepr, vreadable, vrecur = _safe_repr(v, context, maxlevels, level, sort_dicts)
  File "/usr/lib/python3.8/pprint.py", line 560, in _safe_repr
    orepr, oreadable, orecur = _safe_repr(o, context, maxlevels, level, sort_dicts)
  File "/usr/lib/python3.8/pprint.py", line 569, in _safe_repr
    rep = repr(object)
  File "/src/lr/opentitan/util/dvsim/FlowCfg.py", line 28, in __repr__
    return pprint.pformat(self.__dict__)
  ...

The __repr__ function isn't for pretty-printing: leave that to
__str__.

Signed-off-by: Rupert Swarbrick <rswarbrick@lowrisc.org>
