Skip to content

Commit e04a26b

Browse files
committed
Fix vararg methods forwarded to the ClassDB singleton
1 parent c5986e6 commit e04a26b

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

binding_generator.py

+12-7
Original file line numberDiff line numberDiff line change
@@ -1666,13 +1666,16 @@ def generate_engine_class_header(class_api, used_classes, fully_used_classes, us
16661666
result.append("\t \\")
16671667

16681668
for method in class_api["methods"]:
1669-
# ClassDBSingleton shouldn't have any static or vararg methods, but if some appear later, lets skip them.
1670-
if vararg:
1671-
continue
1669+
# ClassDBSingleton shouldn't have any static methods, but if some appear later, lets skip them.
16721670
if "is_static" in method and method["is_static"]:
16731671
continue
16741672

1675-
method_signature = "\tstatic "
1673+
vararg = "is_vararg" in method and method["is_vararg"]
1674+
if vararg:
1675+
method_signature = "\ttemplate<typename... Args> static "
1676+
else:
1677+
method_signature = "\tstatic "
1678+
16761679
return_type = None
16771680
if "return_type" in method:
16781681
return_type = correct_type(method["return_type"].replace("ClassDBSingleton", "ClassDB"), None, False)
@@ -1694,7 +1697,7 @@ def generate_engine_class_header(class_api, used_classes, fully_used_classes, us
16941697
method_arguments = method["arguments"]
16951698

16961699
method_signature += make_function_parameters(
1697-
method_arguments, include_default=True, for_builtin=True, is_vararg=False
1700+
method_arguments, include_default=True, for_builtin=True, is_vararg=vararg
16981701
)
16991702

17001703
method_signature += ") { \\"
@@ -1708,6 +1711,8 @@ def generate_engine_class_header(class_api, used_classes, fully_used_classes, us
17081711
method_body += f"({return_type})"
17091712
method_body += f'ClassDBSingleton::get_singleton()->{method["name"]}('
17101713
method_body += ", ".join(map(lambda x: escape_identifier(x["name"]), method_arguments))
1714+
if vararg:
1715+
method_body += ", args..."
17111716
method_body += "); \\"
17121717

17131718
result.append(method_body)
@@ -2355,9 +2360,9 @@ def make_varargs_template(
23552360
args_array = f"\tstd::array<Variant, {len(method_arguments)} + sizeof...(Args)> variant_args {{ "
23562361
for argument in method_arguments:
23572362
if argument["type"] == "Variant":
2358-
args_array += argument["name"]
2363+
args_array += escape_identifier(argument["name"])
23592364
else:
2360-
args_array += f'Variant({argument["name"]})'
2365+
args_array += f'Variant({escape_identifier(argument["name"])})'
23612366
args_array += ", "
23622367

23632368
args_array += "Variant(args)... };"

0 commit comments

Comments
 (0)