From 5548097925b9924ebf761376d632c5198d01ebd5 Mon Sep 17 00:00:00 2001 From: Alex Waygood Date: Thu, 6 Jul 2023 22:17:12 +0100 Subject: gh-104683: clinic.py: refactor four simple classes as dataclasses (#106476) --- Tools/clinic/clinic.py | 51 ++++++++++++++++++++------------------------------ 1 file changed, 20 insertions(+), 31 deletions(-) diff --git a/Tools/clinic/clinic.py b/Tools/clinic/clinic.py index 306dca8..24d6255 100755 --- a/Tools/clinic/clinic.py +++ b/Tools/clinic/clinic.py @@ -13,6 +13,7 @@ import collections import contextlib import copy import cpp +import dataclasses as dc import enum import functools import hashlib @@ -1858,11 +1859,10 @@ class BlockParser: return Block(input_output(), dsl_name, output=output) +@dc.dataclass(slots=True) class BlockPrinter: - - def __init__(self, language, f=None): - self.language = language - self.f = f or io.StringIO() + language: Language + f: io.StringIO = dc.field(default_factory=io.StringIO) def print_block(self, block, *, core_includes=False): input = block.input @@ -2328,15 +2328,13 @@ class PythonParser: block.output = s.getvalue() +@dc.dataclass(repr=False) class Module: - def __init__( - self, - name: str, - module = None - ) -> None: - self.name = name - self.module = self.parent = module + name: str + module: Module | None = None + def __post_init__(self) -> None: + self.parent = self.module self.modules: ModuleDict = {} self.classes: ClassDict = {} self.functions: list[Function] = [] @@ -2345,22 +2343,16 @@ class Module: return "" +@dc.dataclass(repr=False) class Class: - def __init__( - self, - name: str, - module: Module | None = None, - cls = None, - typedef: str | None = None, - type_object: str | None = None - ) -> None: - self.name = name - self.module = module - self.cls = cls - self.typedef = typedef - self.type_object = type_object - self.parent = cls or module - + name: str + module: Module | None = None + cls: Class | None = None + typedef: str | None = None + type_object: str | None = None + + def __post_init__(self) -> None: + self.parent = self.cls or self.module self.classes: ClassDict = {} self.functions: list[Function] = [] @@ -2606,13 +2598,10 @@ class Parameter: return f'"argument {i}"' +@dc.dataclass class LandMine: # try to access any - def __init__(self, message: str) -> None: - self.__message__ = message - - def __repr__(self) -> str: - return '" + __message__: str def __getattribute__(self, name: str): if name in ('__repr__', '__message__'): -- cgit v0.12