@@ -1535,13 +1535,16 @@ def generate_engine_class_header(class_api, used_classes, fully_used_classes, us
1535
1535
result .append ("\t \\ " )
1536
1536
1537
1537
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.
1541
1539
if "is_static" in method and method ["is_static" ]:
1542
1540
continue
1543
1541
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
+
1545
1548
return_type = None
1546
1549
if "return_type" in method :
1547
1550
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
1563
1566
method_arguments = method ["arguments" ]
1564
1567
1565
1568
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
1567
1570
)
1568
1571
1569
1572
method_signature += ") { \\ "
@@ -1577,6 +1580,8 @@ def generate_engine_class_header(class_api, used_classes, fully_used_classes, us
1577
1580
method_body += f"({ return_type } )"
1578
1581
method_body += f'ClassDBSingleton::get_singleton()->{ method ["name" ]} ('
1579
1582
method_body += ", " .join (map (lambda x : escape_identifier (x ["name" ]), method_arguments ))
1583
+ if vararg :
1584
+ method_body += ", args..."
1580
1585
method_body += "); \\ "
1581
1586
1582
1587
result .append (method_body )
@@ -2224,9 +2229,9 @@ def make_varargs_template(
2224
2229
args_array = f"\t std::array<Variant, { len (method_arguments )} + sizeof...(Args)> variant_args {{ "
2225
2230
for argument in method_arguments :
2226
2231
if argument ["type" ] == "Variant" :
2227
- args_array += argument ["name" ]
2232
+ args_array += escape_identifier ( argument ["name" ])
2228
2233
else :
2229
- args_array += f'Variant({ argument ["name" ]} )'
2234
+ args_array += f'Variant({ escape_identifier ( argument ["name" ]) } )'
2230
2235
args_array += ", "
2231
2236
2232
2237
args_array += "Variant(args)... };"
@@ -2426,6 +2431,7 @@ def correct_default_value(value, type_name):
2426
2431
"null" : "nullptr" ,
2427
2432
'""' : "String()" ,
2428
2433
'&""' : "StringName()" ,
2434
+ '^""' : "NodePath()" ,
2429
2435
"[]" : "Array()" ,
2430
2436
"{}" : "Dictionary()" ,
2431
2437
"Transform2D(1, 0, 0, 1, 0, 0)" : "Transform2D()" , # Default transform.
@@ -2437,6 +2443,10 @@ def correct_default_value(value, type_name):
2437
2443
return f"{ type_name } ()"
2438
2444
if value .startswith ("Array[" ):
2439
2445
return f"{{}}"
2446
+ if value .startswith ("&" ):
2447
+ return value [1 ::]
2448
+ if value .startswith ("^" ):
2449
+ return value [1 ::]
2440
2450
return value
2441
2451
2442
2452
0 commit comments