@@ -97,25 +97,25 @@ void GDScriptLambdaCallable::call(const Variant **p_arguments, int p_argcount, V
97
97
}
98
98
99
99
if (captures_amount > 0 ) {
100
- Vector< const Variant *> args ;
101
- args. resize (p_argcount + captures_amount );
100
+ const int total_argcount = p_argcount + captures_amount ;
101
+ const Variant ** args = ( const Variant **) alloca ( sizeof (Variant *) * total_argcount );
102
102
for (int i = 0 ; i < captures_amount; i++) {
103
- args. write [i] = &captures[i];
103
+ args[i] = &captures[i];
104
104
if (captures[i].get_type () == Variant::OBJECT) {
105
105
bool was_freed = false ;
106
106
captures[i].get_validated_object_with_check (was_freed);
107
107
if (was_freed) {
108
108
ERR_PRINT (vformat (R"( Lambda capture at index %d was freed. Passed "null" instead.)" , i));
109
109
static Variant nil;
110
- args. write [i] = &nil;
110
+ args[i] = &nil;
111
111
}
112
112
}
113
113
}
114
114
for (int i = 0 ; i < p_argcount; i++) {
115
- args. write [i + captures_amount] = p_arguments[i];
115
+ args[i + captures_amount] = p_arguments[i];
116
116
}
117
117
118
- r_return_value = function->call (nullptr , args. ptrw (), args. size () , r_call_error);
118
+ r_return_value = function->call (nullptr , args, total_argcount , r_call_error);
119
119
switch (r_call_error.error ) {
120
120
case Callable::CallError::CALL_ERROR_INVALID_ARGUMENT:
121
121
r_call_error.argument -= captures_amount;
@@ -229,25 +229,25 @@ void GDScriptLambdaSelfCallable::call(const Variant **p_arguments, int p_argcoun
229
229
}
230
230
231
231
if (captures_amount > 0 ) {
232
- Vector< const Variant *> args ;
233
- args. resize (p_argcount + captures_amount );
232
+ const int total_argcount = p_argcount + captures_amount ;
233
+ const Variant ** args = ( const Variant **) alloca ( sizeof (Variant *) * total_argcount );
234
234
for (int i = 0 ; i < captures_amount; i++) {
235
- args. write [i] = &captures[i];
235
+ args[i] = &captures[i];
236
236
if (captures[i].get_type () == Variant::OBJECT) {
237
237
bool was_freed = false ;
238
238
captures[i].get_validated_object_with_check (was_freed);
239
239
if (was_freed) {
240
240
ERR_PRINT (vformat (R"( Lambda capture at index %d was freed. Passed "null" instead.)" , i));
241
241
static Variant nil;
242
- args. write [i] = &nil;
242
+ args[i] = &nil;
243
243
}
244
244
}
245
245
}
246
246
for (int i = 0 ; i < p_argcount; i++) {
247
- args. write [i + captures_amount] = p_arguments[i];
247
+ args[i + captures_amount] = p_arguments[i];
248
248
}
249
249
250
- r_return_value = function->call (static_cast <GDScriptInstance *>(object->get_script_instance ()), args. ptrw (), args. size () , r_call_error);
250
+ r_return_value = function->call (static_cast <GDScriptInstance *>(object->get_script_instance ()), args, total_argcount , r_call_error);
251
251
switch (r_call_error.error ) {
252
252
case Callable::CallError::CALL_ERROR_INVALID_ARGUMENT:
253
253
r_call_error.argument -= captures_amount;
0 commit comments