13
13
import contextlib
14
14
import copy
15
15
import cpp
16
+ import dataclasses as dc
16
17
import enum
17
18
import functools
18
19
import hashlib
@@ -1858,11 +1859,10 @@ def is_stop_line(line):
1858
1859
return Block (input_output (), dsl_name , output = output )
1859
1860
1860
1861
1862
+ @dc .dataclass (slots = True )
1861
1863
class BlockPrinter :
1862
-
1863
- def __init__ (self , language , f = None ):
1864
- self .language = language
1865
- self .f = f or io .StringIO ()
1864
+ language : Language
1865
+ f : io .StringIO = dc .field (default_factory = io .StringIO )
1866
1866
1867
1867
def print_block (self , block , * , core_includes = False ):
1868
1868
input = block .input
@@ -2328,15 +2328,13 @@ def parse(self, block: Block) -> None:
2328
2328
block .output = s .getvalue ()
2329
2329
2330
2330
2331
+ @dc .dataclass (repr = False )
2331
2332
class Module :
2332
- def __init__ (
2333
- self ,
2334
- name : str ,
2335
- module = None
2336
- ) -> None :
2337
- self .name = name
2338
- self .module = self .parent = module
2333
+ name : str
2334
+ module : Module | None = None
2339
2335
2336
+ def __post_init__ (self ) -> None :
2337
+ self .parent = self .module
2340
2338
self .modules : ModuleDict = {}
2341
2339
self .classes : ClassDict = {}
2342
2340
self .functions : list [Function ] = []
@@ -2345,22 +2343,16 @@ def __repr__(self) -> str:
2345
2343
return "<clinic.Module " + repr (self .name ) + " at " + str (id (self )) + ">"
2346
2344
2347
2345
2346
+ @dc .dataclass (repr = False )
2348
2347
class Class :
2349
- def __init__ (
2350
- self ,
2351
- name : str ,
2352
- module : Module | None = None ,
2353
- cls = None ,
2354
- typedef : str | None = None ,
2355
- type_object : str | None = None
2356
- ) -> None :
2357
- self .name = name
2358
- self .module = module
2359
- self .cls = cls
2360
- self .typedef = typedef
2361
- self .type_object = type_object
2362
- self .parent = cls or module
2363
-
2348
+ name : str
2349
+ module : Module | None = None
2350
+ cls : Class | None = None
2351
+ typedef : str | None = None
2352
+ type_object : str | None = None
2353
+
2354
+ def __post_init__ (self ) -> None :
2355
+ self .parent = self .cls or self .module
2364
2356
self .classes : ClassDict = {}
2365
2357
self .functions : list [Function ] = []
2366
2358
@@ -2606,13 +2598,10 @@ def get_displayname(self, i: int) -> str:
2606
2598
return f'"argument { i } "'
2607
2599
2608
2600
2601
+ @dc .dataclass
2609
2602
class LandMine :
2610
2603
# try to access any
2611
- def __init__ (self , message : str ) -> None :
2612
- self .__message__ = message
2613
-
2614
- def __repr__ (self ) -> str :
2615
- return '<LandMine ' + repr (self .__message__ ) + ">"
2604
+ __message__ : str
2616
2605
2617
2606
def __getattribute__ (self , name : str ):
2618
2607
if name in ('__repr__' , '__message__' ):
0 commit comments