Skip to content

gh-104683: clinic.py: refactor four simple classes as dataclasses #106476

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 6, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 20 additions & 31 deletions Tools/clinic/clinic.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import contextlib
import copy
import cpp
import dataclasses as dc
import enum
import functools
import hashlib
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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] = []
Expand All @@ -2361,22 +2359,16 @@ def __repr__(self) -> str:
return "<clinic.Module " + repr(self.name) + " at " + str(id(self)) + ">"


@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] = []

Expand Down Expand Up @@ -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 '<LandMine ' + repr(self.__message__) + ">"
__message__: str

def __getattribute__(self, name: str):
if name in ('__repr__', '__message__'):
Expand Down