Skip to content

Commit 64f1bc8

Browse files
authored
Merge pull request #1485 from dsnopek/classdb-call-static-method
Fix vararg methods forwarded to the `ClassDB` singleton
2 parents 6c40641 + e04a26b commit 64f1bc8

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

binding_generator.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1670,13 +1670,16 @@ def generate_engine_class_header(class_api, used_classes, fully_used_classes, us
16701670
result.append("\t \\")
16711671

16721672
for method in class_api["methods"]:
1673-
# ClassDBSingleton shouldn't have any static or vararg methods, but if some appear later, lets skip them.
1674-
if vararg:
1675-
continue
1673+
# ClassDBSingleton shouldn't have any static methods, but if some appear later, lets skip them.
16761674
if "is_static" in method and method["is_static"]:
16771675
continue
16781676

1679-
method_signature = "\tstatic "
1677+
vararg = "is_vararg" in method and method["is_vararg"]
1678+
if vararg:
1679+
method_signature = "\ttemplate<typename... Args> static "
1680+
else:
1681+
method_signature = "\tstatic "
1682+
16801683
return_type = None
16811684
if "return_type" in method:
16821685
return_type = correct_type(method["return_type"].replace("ClassDBSingleton", "ClassDB"), None, False)
@@ -1698,7 +1701,7 @@ def generate_engine_class_header(class_api, used_classes, fully_used_classes, us
16981701
method_arguments = method["arguments"]
16991702

17001703
method_signature += make_function_parameters(
1701-
method_arguments, include_default=True, for_builtin=True, is_vararg=False
1704+
method_arguments, include_default=True, for_builtin=True, is_vararg=vararg
17021705
)
17031706

17041707
method_signature += ") { \\"
@@ -1712,6 +1715,8 @@ def generate_engine_class_header(class_api, used_classes, fully_used_classes, us
17121715
method_body += f"({return_type})"
17131716
method_body += f'ClassDBSingleton::get_singleton()->{method["name"]}('
17141717
method_body += ", ".join(map(lambda x: escape_identifier(x["name"]), method_arguments))
1718+
if vararg:
1719+
method_body += ", args..."
17151720
method_body += "); \\"
17161721

17171722
result.append(method_body)
@@ -2359,9 +2364,9 @@ def make_varargs_template(
23592364
args_array = f"\tstd::array<Variant, {len(method_arguments)} + sizeof...(Args)> variant_args {{ "
23602365
for argument in method_arguments:
23612366
if argument["type"] == "Variant":
2362-
args_array += argument["name"]
2367+
args_array += escape_identifier(argument["name"])
23632368
else:
2364-
args_array += f'Variant({argument["name"]})'
2369+
args_array += f'Variant({escape_identifier(argument["name"])})'
23652370
args_array += ", "
23662371

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

0 commit comments

Comments
 (0)