diff --git a/Tools/clinic/clinic.py b/Tools/clinic/clinic.py index 7ada7e9d917b38..cd9aa27d219dfa 100755 --- a/Tools/clinic/clinic.py +++ b/Tools/clinic/clinic.py @@ -13,6 +13,7 @@ import contextlib import copy import cpp +import dataclasses as dc import enum import functools import hashlib @@ -1871,11 +1872,10 @@ def is_stop_line(line): 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 @@ -2344,15 +2344,13 @@ def parse(self, block: Block) -> None: 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] = [] @@ -2361,22 +2359,16 @@ def __repr__(self) -> str: 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] = [] @@ -2622,13 +2614,10 @@ def get_displayname(self, i: int) -> str: 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__'):