| 248 | return f"{type(self).__name__}({args_str})" |
| 249 | |
| 250 | def dump(self) -> str: |
| 251 | def _dump(node: t.Union[Node, t.Any]) -> None: |
| 252 | if not isinstance(node, Node): |
| 253 | buf.append(repr(node)) |
| 254 | return |
| 255 | |
| 256 | buf.append(f"nodes.{type(node).__name__}(") |
| 257 | if not node.fields: |
| 258 | buf.append(")") |
| 259 | return |
| 260 | for idx, field in enumerate(node.fields): |
| 261 | if idx: |
| 262 | buf.append(", ") |
| 263 | value = getattr(node, field) |
| 264 | if isinstance(value, list): |
| 265 | buf.append("[") |
| 266 | for idx, item in enumerate(value): |
| 267 | if idx: |
| 268 | buf.append(", ") |
| 269 | _dump(item) |
| 270 | buf.append("]") |
| 271 | else: |
| 272 | _dump(value) |
| 273 | buf.append(")") |
| 274 | |
| 275 | buf: t.List[str] = [] |
| 276 | _dump(self) |
| 277 | return "".join(buf) |
| 278 | |
| 279 | |
| 280 | class Stmt(Node): |