@@ -1535,13 +1535,16 @@ def generate_engine_class_header(class_api, used_classes, fully_used_classes, us
15351535 result .append ("\t \\ " )
15361536
15371537 for method in class_api ["methods" ]:
1538- # ClassDBSingleton shouldn't have any static or vararg methods, but if some appear later, lets skip them.
1539- if vararg :
1540- continue
1538+ # ClassDBSingleton shouldn't have any static methods, but if some appear later, lets skip them.
15411539 if "is_static" in method and method ["is_static" ]:
15421540 continue
15431541
1544- method_signature = "\t static "
1542+ vararg = "is_vararg" in method and method ["is_vararg" ]
1543+ if vararg :
1544+ method_signature = "\t template<typename... Args> static "
1545+ else :
1546+ method_signature = "\t static "
1547+
15451548 return_type = None
15461549 if "return_type" in method :
15471550 return_type = correct_type (method ["return_type" ].replace ("ClassDBSingleton" , "ClassDB" ), None , False )
@@ -1563,7 +1566,7 @@ def generate_engine_class_header(class_api, used_classes, fully_used_classes, us
15631566 method_arguments = method ["arguments" ]
15641567
15651568 method_signature += make_function_parameters (
1566- method_arguments , include_default = True , for_builtin = True , is_vararg = False
1569+ method_arguments , include_default = True , for_builtin = True , is_vararg = vararg
15671570 )
15681571
15691572 method_signature += ") { \\ "
@@ -1577,6 +1580,8 @@ def generate_engine_class_header(class_api, used_classes, fully_used_classes, us
15771580 method_body += f"({ return_type } )"
15781581 method_body += f'ClassDBSingleton::get_singleton()->{ method ["name" ]} ('
15791582 method_body += ", " .join (map (lambda x : escape_identifier (x ["name" ]), method_arguments ))
1583+ if vararg :
1584+ method_body += ", args..."
15801585 method_body += "); \\ "
15811586
15821587 result .append (method_body )
@@ -2224,9 +2229,9 @@ def make_varargs_template(
22242229 args_array = f"\t std::array<Variant, { len (method_arguments )} + sizeof...(Args)> variant_args {{ "
22252230 for argument in method_arguments :
22262231 if argument ["type" ] == "Variant" :
2227- args_array += argument ["name" ]
2232+ args_array += escape_identifier ( argument ["name" ])
22282233 else :
2229- args_array += f'Variant({ argument ["name" ]} )'
2234+ args_array += f'Variant({ escape_identifier ( argument ["name" ]) } )'
22302235 args_array += ", "
22312236
22322237 args_array += "Variant(args)... };"
@@ -2426,6 +2431,7 @@ def correct_default_value(value, type_name):
24262431 "null" : "nullptr" ,
24272432 '""' : "String()" ,
24282433 '&""' : "StringName()" ,
2434+ '^""' : "NodePath()" ,
24292435 "[]" : "Array()" ,
24302436 "{}" : "Dictionary()" ,
24312437 "Transform2D(1, 0, 0, 1, 0, 0)" : "Transform2D()" , # Default transform.
@@ -2437,6 +2443,10 @@ def correct_default_value(value, type_name):
24372443 return f"{ type_name } ()"
24382444 if value .startswith ("Array[" ):
24392445 return f"{{}}"
2446+ if value .startswith ("&" ):
2447+ return value [1 ::]
2448+ if value .startswith ("^" ):
2449+ return value [1 ::]
24402450 return value
24412451
24422452
0 commit comments