@@ -604,26 +604,30 @@ void Worker::New(const FunctionCallbackInfo<Value>& args) { |
604 | 604 | } |
605 | 605 | } |
606 | 606 | #endif // NODE_WITHOUT_NODE_OPTIONS |
607 | | - } |
608 | 607 |
|
609 | | - if (args[2]->IsArray()) { |
610 | | - Local<Array> array = args[2].As<Array>(); |
611 | 608 | // The first argument is reserved for program name, but we don't need it |
612 | 609 | // in workers. |
613 | 610 | std::vector<std::string> exec_argv = {""}; |
614 | | - uint32_t length = array->Length(); |
615 | | - for (uint32_t i = 0; i < length; i++) { |
616 | | - Local<Value> arg; |
617 | | - if (!array->Get(env->context(), i).ToLocal(&arg)) { |
618 | | - return; |
619 | | - } |
620 | | - Local<String> arg_v8; |
621 | | - if (!arg->ToString(env->context()).ToLocal(&arg_v8)) { |
622 | | - return; |
| 611 | + if (args[2]->IsArray()) { |
| 612 | + Local<Array> array = args[2].As<Array>(); |
| 613 | + uint32_t length = array->Length(); |
| 614 | + for (uint32_t i = 0; i < length; i++) { |
| 615 | + Local<Value> arg; |
| 616 | + if (!array->Get(env->context(), i).ToLocal(&arg)) { |
| 617 | + return; |
| 618 | + } |
| 619 | + Local<String> arg_v8; |
| 620 | + if (!arg->ToString(env->context()).ToLocal(&arg_v8)) { |
| 621 | + return; |
| 622 | + } |
| 623 | + Utf8Value arg_utf8_value(args.GetIsolate(), arg_v8); |
| 624 | + std::string arg_string(arg_utf8_value.out(), arg_utf8_value.length()); |
| 625 | + exec_argv.push_back(arg_string); |
623 | 626 | } |
624 | | - Utf8Value arg_utf8_value(args.GetIsolate(), arg_v8); |
625 | | - std::string arg_string(arg_utf8_value.out(), arg_utf8_value.length()); |
626 | | - exec_argv.push_back(arg_string); |
| 627 | + } else { |
| 628 | + exec_argv_out = env->exec_argv(); |
| 629 | + exec_argv.insert( |
| 630 | + exec_argv.end(), exec_argv_out.begin(), exec_argv_out.end()); |
627 | 631 | } |
628 | 632 |
|
629 | 633 | std::vector<std::string> invalid_args{}; |
@@ -641,9 +645,8 @@ void Worker::New(const FunctionCallbackInfo<Value>& args) { |
641 | 645 | invalid_args.erase(invalid_args.begin()); |
642 | 646 | if (errors.size() > 0 || invalid_args.size() > 0) { |
643 | 647 | Local<Value> error; |
644 | | - if (!ToV8Value(env->context(), |
645 | | - errors.size() > 0 ? errors : invalid_args) |
646 | | - .ToLocal(&error)) { |
| 648 | + if (!ToV8Value(env->context(), errors.size() > 0 ? errors : invalid_args) |
| 649 | + .ToLocal(&error)) { |
647 | 650 | return; |
648 | 651 | } |
649 | 652 | Local<String> key = |
|