Skip to content

Commit 32345e2

Browse files
committed
Refactor argument handling in FunctionTemplateCallback, buildCallArguments, FunctionCall, and FunctionNewInstance to use std::vector for improved memory management and clarity
1 parent e3b585d commit 32345e2

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

v8go.cc

+9-8
Original file line numberDiff line numberDiff line change
@@ -569,9 +569,9 @@ static void FunctionTemplateCallback(const FunctionCallbackInfo<Value>& info) {
569569
iso, info.This()));
570570

571571
int args_count = info.Length();
572-
ValuePtr thisAndArgs[args_count + 1];
572+
std::vector<ValuePtr> thisAndArgs(args_count + 1);
573573
thisAndArgs[0] = tracked_value(ctx, _this);
574-
ValuePtr* args = thisAndArgs + 1;
574+
ValuePtr* args = thisAndArgs.data() + 1;
575575
for (int i = 0; i < args_count; i++) {
576576
m_value* val = new m_value;
577577
val->id = 0;
@@ -583,7 +583,7 @@ static void FunctionTemplateCallback(const FunctionCallbackInfo<Value>& info) {
583583
}
584584

585585
ValuePtr val =
586-
goFunctionCallback(ctx_ref, callback_ref, thisAndArgs, args_count);
586+
goFunctionCallback(ctx_ref, callback_ref, thisAndArgs.data(), args_count);
587587
if (val != nullptr) {
588588
info.GetReturnValue().Set(val->ptr.Get(iso));
589589
} else {
@@ -1688,9 +1688,10 @@ ValuePtr PromiseResult(ValuePtr ptr) {
16881688
/********** Function **********/
16891689

16901690
static void buildCallArguments(Isolate* iso,
1691-
Local<Value>* argv,
1691+
std::vector<Local<Value>>& argv,
16921692
int argc,
16931693
ValuePtr args[]) {
1694+
argv.resize(argc);
16941695
for (int i = 0; i < argc; i++) {
16951696
argv[i] = args[i]->ptr.Get(iso);
16961697
}
@@ -1701,13 +1702,13 @@ RtnValue FunctionCall(ValuePtr ptr, ValuePtr recv, int argc, ValuePtr args[]) {
17011702

17021703
RtnValue rtn = {};
17031704
Local<Function> fn = Local<Function>::Cast(value);
1704-
Local<Value> argv[argc];
1705+
std::vector<Local<Value>> argv;
17051706
buildCallArguments(iso, argv, argc, args);
17061707

17071708
Local<Value> local_recv = recv->ptr.Get(iso);
17081709

17091710
Local<Value> result;
1710-
if (!fn->Call(local_ctx, local_recv, argc, argv).ToLocal(&result)) {
1711+
if (!fn->Call(local_ctx, local_recv, argc, argv.data()).ToLocal(&result)) {
17111712
rtn.error = ExceptionError(try_catch, iso, local_ctx);
17121713
return rtn;
17131714
}
@@ -1724,10 +1725,10 @@ RtnValue FunctionNewInstance(ValuePtr ptr, int argc, ValuePtr args[]) {
17241725
LOCAL_VALUE(ptr)
17251726
RtnValue rtn = {};
17261727
Local<Function> fn = Local<Function>::Cast(value);
1727-
Local<Value> argv[argc];
1728+
std::vector<Local<Value>> argv;
17281729
buildCallArguments(iso, argv, argc, args);
17291730
Local<Object> result;
1730-
if (!fn->NewInstance(local_ctx, argc, argv).ToLocal(&result)) {
1731+
if (!fn->NewInstance(local_ctx, argc, argv.data()).ToLocal(&result)) {
17311732
rtn.error = ExceptionError(try_catch, iso, local_ctx);
17321733
return rtn;
17331734
}

0 commit comments

Comments
 (0)