@@ -193,7 +193,7 @@ def _count_and_unwrap(
193193
194194def  _fmt_base_name (
195195    typename : PQName ,
196- ) ->  typing .Tuple [str , str , str , str , typing .List [str ]]:
196+ ) ->  typing .Tuple [str , str , str , str , str ,  typing .List [str ]]:
197197    all_parts  =  []
198198    nameonly_parts  =  []
199199
@@ -222,6 +222,7 @@ def _fmt_base_name(
222222        tparam_list  =  []
223223
224224    return  (
225+         last_segment .name ,
225226        "::" .join (most_parts ),
226227        "::" .join (all_parts ),
227228        "::" .join (nameonly_parts ),
@@ -292,7 +293,6 @@ class ClassStateData(typing.NamedTuple):
292293    defer_protected_fields : typing .List [Field ]
293294
294295    # Needed for trampoline 
295-     cls_cpp_identifier : str 
296296    template_argument_list : str 
297297    base_template_params : str 
298298    base_template_args : str 
@@ -756,7 +756,6 @@ def on_class_start(self, state: AWClassBlockState) -> typing.Optional[bool]:
756756            defer_private_virtual_methods = [],
757757            defer_protected_fields = [],
758758            # Trampoline data 
759-             cls_cpp_identifier = cls_cpp_identifier ,
760759            template_argument_list = template_argument_list ,
761760            base_template_args = base_template_args_s ,
762761            base_template_params = base_template_params_s ,
@@ -829,33 +828,38 @@ def _process_class_bases(
829828            if  base .access  ==  "private" :
830829                continue 
831830
832-             cpp_name , cpp_name_w_templates , dep_cpp_name , base_ns , tparam_list  =  (
833-                 _fmt_base_name (base .typename )
834-             )
831+             (
832+                 cpp_name ,
833+                 full_cpp_name ,
834+                 cpp_name_w_templates ,
835+                 dep_cpp_name ,
836+                 base_ns ,
837+                 tparam_list ,
838+             ) =  _fmt_base_name (base .typename )
835839            if  ignored_bases .pop (cpp_name_w_templates , None ):
836840                continue 
837841
838842            # Sometimes, we can't guess all the information about the base, so the 
839843            # user needs to specify it explicitly. 
840-             user_bqual  =  class_data .base_qualnames .get (cpp_name )
844+             user_bqual  =  class_data .base_qualnames .get (full_cpp_name )
841845            if  user_bqual :
842846                cpp_name_w_templates  =  user_bqual 
843847                # TODO: sometimes need to add this to pybase_params, but 
844848                # that would require parsing this more. Seems sufficiently 
845849                # obscure, going to omit it for now. 
846850                tp  =  user_bqual .find ("<" )
847851                if  tp  ==  - 1 :
848-                     cpp_name  =  user_bqual 
852+                     full_cpp_name  =  user_bqual 
849853                    template_params  =  "" 
850854                else :
851-                     cpp_name  =  user_bqual [:tp ]
855+                     full_cpp_name  =  user_bqual [:tp ]
852856                    template_params  =  user_bqual [tp  +  1  : - 1 ]
853-                 dep_cpp_name  =  cpp_name 
854-                 ns_idx  =  cpp_name .rfind ("::" )
857+                 dep_cpp_name  =  full_cpp_name 
858+                 ns_idx  =  full_cpp_name .rfind ("::" )
855859                if  ns_idx  ==  - 1 :
856860                    base_ns  =  "" 
857861                else :
858-                     base_ns  =  cpp_name [:ns_idx ]
862+                     base_ns  =  full_cpp_name [:ns_idx ]
859863            else :
860864                # TODO: we don't handle nested child classes with templates here 
861865                #       ... but that has to be rather obscure? 
@@ -869,21 +873,22 @@ def _process_class_bases(
869873                # live in the same namespace as the class 
870874                if  len (base .typename .segments ) ==  1 :
871875                    base_ns  =  cls_namespace 
872-                     cpp_name  =  f"{ cls_namespace } { cpp_name }  
876+                     full_cpp_name  =  f"{ cls_namespace } { full_cpp_name }  
873877                    cpp_name_w_templates  =  f"{ cls_namespace } { cpp_name_w_templates }  
874878                    dep_cpp_name  =  f"{ cls_namespace } { dep_cpp_name }  
875879
876-             base_identifier  =  cpp_name .translate (_qualname_trans )
880+             base_identifier  =  full_cpp_name .translate (_qualname_trans )
877881
878882            if  base_ns :
879883                base_ns  =  f"{ base_ns }  
880884
881885            bases .append (
882886                BaseClassData (
883-                     full_cpp_name = cpp_name ,
887+                     cls_name = cpp_name ,
888+                     namespace_ = base_ns ,
889+                     full_cpp_name = full_cpp_name ,
884890                    full_cpp_name_w_templates = cpp_name_w_templates ,
885891                    full_cpp_name_identifier = base_identifier ,
886-                     namespace_ = base_ns ,
887892                    dep_cpp_name = dep_cpp_name ,
888893                    template_params = template_params ,
889894                )
@@ -1257,8 +1262,8 @@ def on_class_end(self, state: AWClassBlockState) -> None:
12571262            if  cdata .template_argument_list :
12581263                tmpl  =  f", { cdata .template_argument_list }  
12591264
1260-             trampoline_cfg  =  f"{ cdata . ctx .namespace } { cdata . cls_cpp_identifier } { cdata .template_argument_list }  
1261-             tname  =  f"{ cdata . ctx .namespace } { cdata . cls_cpp_identifier } { ctx .full_cpp_name } { tmpl } { trampoline_cfg }  
1265+             trampoline_cfg  =  f"{ ctx .namespace } { ctx . cpp_name } { cdata .template_argument_list }  
1266+             tname  =  f"{ ctx .namespace } { ctx . cpp_name } { ctx .full_cpp_name } { tmpl } { trampoline_cfg }  
12621267            tvar  =  f"{ ctx .cpp_name }  
12631268
12641269            ctx .trampoline  =  TrampolineData (
0 commit comments