@@ -468,14 +468,18 @@ def __init__(
468468 self ._vars : list [list [str ]] = [[]]
469469 # What was generated previously in the stub file.
470470 self ._state = EMPTY
471- self ._current_class : ClassDef | None = None
471+ self ._class_stack : list [ ClassDef ] = []
472472 # Was the tree semantically analysed before?
473473 self .analyzed = analyzed
474474 # Short names of methods defined in the body of the current class
475475 self .method_names : set [str ] = set ()
476476 self .processing_enum = False
477477 self .processing_dataclass = False
478478
479+ @property
480+ def _current_class (self ) -> ClassDef | None :
481+ return self ._class_stack [- 1 ] if self ._class_stack else None
482+
479483 def visit_mypy_file (self , o : MypyFile ) -> None :
480484 self .module_name = o .fullname # Current module being processed
481485 self .path = o .path
@@ -646,12 +650,14 @@ def visit_func_def(self, o: FuncDef) -> None:
646650 if init_code :
647651 self .add (init_code )
648652
649- if self ._current_class is not None :
653+ if self ._class_stack :
650654 if len (o .arguments ):
651655 self_var = o .arguments [0 ].variable .name
652656 else :
653657 self_var = "self"
654- class_info = ClassInfo (self ._current_class .name , self_var )
658+ class_info = None
659+ for class_def in self ._class_stack :
660+ class_info = ClassInfo (class_def .name , self_var , parent = class_info )
655661 else :
656662 class_info = None
657663
@@ -741,7 +747,7 @@ def get_fullname(self, expr: Expression) -> str:
741747 return self .resolve_name (name )
742748
743749 def visit_class_def (self , o : ClassDef ) -> None :
744- self ._current_class = o
750+ self ._class_stack . append ( o )
745751 self .method_names = find_method_names (o .defs .body )
746752 sep : int | None = None
747753 if self .is_top_level () and self ._state != EMPTY :
@@ -786,8 +792,8 @@ def visit_class_def(self, o: ClassDef) -> None:
786792 self ._state = CLASS
787793 self .method_names = set ()
788794 self .processing_dataclass = False
795+ self ._class_stack .pop (- 1 )
789796 self .processing_enum = False
790- self ._current_class = None
791797
792798 def get_base_types (self , cdef : ClassDef ) -> list [str ]:
793799 """Get list of base classes for a class."""
0 commit comments