Skip to content

Commit 1caea5d

Browse files
committed
Simplify trampoline class names
- Previously the name included the namespace, but now they're in the target namespace so it's just redundant information
1 parent 4efad83 commit 1caea5d

File tree

3 files changed

+39
-31
lines changed

3 files changed

+39
-31
lines changed

robotpy_build/autowrap/context.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,12 @@ class BaseClassData:
287287
Render data for each base that a class inherits
288288
"""
289289

290+
#: Just the class name
291+
cls_name: str
292+
293+
#: This ends with ::
294+
namespace_: str
295+
290296
#: C++ name, including all known components
291297
full_cpp_name: str # was x_qualname
292298

@@ -296,9 +302,6 @@ class BaseClassData:
296302
#: turned into underscores.
297303
full_cpp_name_identifier: str # was x_qualname_
298304

299-
#: This ends with ::
300-
namespace_: str
301-
302305
#: C++ name + components, no template parameters
303306
dep_cpp_name: str
304307

robotpy_build/autowrap/cxxparser.py

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ def _count_and_unwrap(
193193

194194
def _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}::PyTrampolineCfg_{cdata.cls_cpp_identifier}<{cdata.template_argument_list}>"
1261-
tname = f"{cdata.ctx.namespace}::PyTrampoline_{cdata.cls_cpp_identifier}<typename {ctx.full_cpp_name}{tmpl}, typename {trampoline_cfg}>"
1265+
trampoline_cfg = f"{ctx.namespace}::PyTrampolineCfg_{ctx.cpp_name}<{cdata.template_argument_list}>"
1266+
tname = f"{ctx.namespace}::PyTrampoline_{ctx.cpp_name}<typename {ctx.full_cpp_name}{tmpl}, typename {trampoline_cfg}>"
12621267
tvar = f"{ctx.cpp_name}_Trampoline"
12631268

12641269
ctx.trampoline = TrampolineData(

robotpy_build/autowrap/render_cls_rpy_include.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -124,20 +124,20 @@ def _render_cls_trampoline(
124124
)
125125

126126
if cls.bases:
127-
r.writeln(f"struct PyTrampolineCfg_{cls.full_cpp_name_identifier} :")
127+
r.writeln(f"struct PyTrampolineCfg_{cls.cpp_name} :")
128128

129129
with r.indent():
130130
for base in cls.bases:
131131
r.writeln(
132-
f"{base.namespace_}PyTrampolineCfg_{base.full_cpp_name_identifier}<{postcomma(base.template_params)}"
132+
f"{base.namespace_}PyTrampolineCfg_{base.cls_name}<{postcomma(base.template_params)}"
133133
)
134134

135135
r.writeln("CfgBase")
136136

137137
for base in cls.bases:
138138
r.writeln(">")
139139
else:
140-
r.writeln(f"struct PyTrampolineCfg_{cls.full_cpp_name_identifier} : CfgBase")
140+
r.writeln(f"struct PyTrampolineCfg_{cls.cpp_name} : CfgBase")
141141

142142
r.writeln("{")
143143

@@ -162,11 +162,11 @@ def _render_cls_trampoline(
162162
r.writeln(
163163
f"template <typename PyTrampolineBase{precomma(template_parameter_list)}, typename PyTrampolineCfg>"
164164
)
165-
r.writeln(f"using PyTrampolineBase_{cls.full_cpp_name_identifier} =")
165+
r.writeln(f"using PyTrampolineBase_{cls.cpp_name} =")
166166

167167
for base in cls.bases:
168168
r.rel_indent(2)
169-
r.writeln(f"{base.namespace_}PyTrampoline_{base.full_cpp_name_identifier}<")
169+
r.writeln(f"{base.namespace_}PyTrampoline_{base.cls_name}<")
170170

171171
with r.indent():
172172
r.writeln("PyTrampolineBase")
@@ -182,8 +182,8 @@ def _render_cls_trampoline(
182182
;
183183
184184
template <typename PyTrampolineBase{ precomma(template_parameter_list) }, typename PyTrampolineCfg>
185-
struct PyTrampoline_{ cls.full_cpp_name_identifier } : PyTrampolineBase_{ cls.full_cpp_name_identifier }<PyTrampolineBase{ precomma(template_argument_list) }, PyTrampolineCfg> {{
186-
using PyTrampolineBase_{ cls.full_cpp_name_identifier }<PyTrampolineBase{ precomma(template_argument_list) }, PyTrampolineCfg>::PyTrampolineBase_{ cls.full_cpp_name_identifier };
185+
struct PyTrampoline_{ cls.cpp_name } : PyTrampolineBase_{ cls.cpp_name }<PyTrampolineBase{ precomma(template_argument_list) }, PyTrampolineCfg> {{
186+
using PyTrampolineBase_{ cls.cpp_name }<PyTrampolineBase{ precomma(template_argument_list) }, PyTrampolineCfg>::PyTrampolineBase_{ cls.cpp_name };
187187
"""
188188
)
189189

@@ -192,7 +192,7 @@ def _render_cls_trampoline(
192192
r.write_trim(
193193
f"""
194194
template <typename PyTrampolineBase{ precomma(template_parameter_list) }, typename PyTrampolineCfg>
195-
struct PyTrampoline_{ cls.full_cpp_name_identifier } : PyTrampolineBase {{
195+
struct PyTrampoline_{ cls.cpp_name } : PyTrampolineBase {{
196196
using PyTrampolineBase::PyTrampolineBase;
197197
"""
198198
)
@@ -232,11 +232,11 @@ def _render_cls_trampoline(
232232
with r.indent():
233233
all_decls = ", ".join(p.decl for p in fn.all_params)
234234
all_names = ", ".join(p.arg_name for p in fn.all_params)
235-
r.writeln(f"PyTrampoline_{cls.full_cpp_name_identifier}({all_decls}) :")
235+
r.writeln(f"PyTrampoline_{cls.cpp_name}({all_decls}) :")
236236

237237
if cls.bases:
238238
r.writeln(
239-
f" PyTrampolineBase_{cls.full_cpp_name_identifier}<PyTrampolineBase{precomma(trampoline.tmpl_args)}, PyTrampolineCfg>({all_names})"
239+
f" PyTrampolineBase_{cls.cpp_name}<PyTrampolineBase{precomma(trampoline.tmpl_args)}, PyTrampolineCfg>({all_names})"
240240
)
241241
else:
242242
r.writeln(f" PyTrampolineBase({all_names})")

0 commit comments

Comments
 (0)