GeezerVison is showing github.com — src: simplify JS Array creation · nodejs/node@43535f5
File treeExpand file treeCollapse file tree Open diff view settings Expand file treeCollapse file tree Open diff view settings Collapse file Copy file name to clipboardExpand all lines: src/node.cc +5-25Lines changed: 5 additions & 25 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -938,28 +938,15 @@ void SetupProcessObject(Environment* env, | 938 | 938 | #endif | 939 | 939 |
| 940 | 940 | // process.argv | 941 | | - Local<Array> arguments = Array::New(env->isolate(), args.size()); | 942 | | - for (size_t i = 0; i < args.size(); ++i) { | 943 | | - arguments->Set(env->context(), i, | 944 | | - String::NewFromUtf8(env->isolate(), args[i].c_str(), | 945 | | - NewStringType::kNormal).ToLocalChecked()) | 946 | | - .FromJust(); | 947 | | - } | 948 | 941 | process->Set(env->context(), | 949 | 942 | FIXED_ONE_BYTE_STRING(env->isolate(), "argv"), | 950 | | - arguments).FromJust(); | | 943 | + ToV8Value(env->context(), args).ToLocalChecked()).FromJust(); | 951 | 944 |
| 952 | 945 | // process.execArgv | 953 | | - Local<Array> exec_arguments = Array::New(env->isolate(), exec_args.size()); | 954 | | - for (size_t i = 0; i < exec_args.size(); ++i) { | 955 | | - exec_arguments->Set(env->context(), i, | 956 | | - String::NewFromUtf8(env->isolate(), exec_args[i].c_str(), | 957 | | - NewStringType::kNormal).ToLocalChecked()) | 958 | | - .FromJust(); | 959 | | - } | 960 | 946 | process->Set(env->context(), | 961 | 947 | FIXED_ONE_BYTE_STRING(env->isolate(), "execArgv"), | 962 | | - exec_arguments).FromJust(); | | 948 | + ToV8Value(env->context(), exec_args) | | 949 | + .ToLocalChecked()).FromJust(); | 963 | 950 |
| 964 | 951 | // create process.env | 965 | 952 | process | @@ -1010,17 +997,10 @@ void SetupProcessObject(Environment* env, | 1010 | 997 | const std::vector<std::string>& preload_modules = | 1011 | 998 | env->options()->preload_modules; | 1012 | 999 | if (!preload_modules.empty()) { | 1013 | | - Local<Array> array = Array::New(env->isolate()); | 1014 | | - for (unsigned int i = 0; i < preload_modules.size(); ++i) { | 1015 | | - Local<String> module = String::NewFromUtf8(env->isolate(), | 1016 | | - preload_modules[i].c_str(), | 1017 | | - NewStringType::kNormal) | 1018 | | - .ToLocalChecked(); | 1019 | | - array->Set(env->context(), i, module).FromJust(); | 1020 | | - } | 1021 | 1000 | READONLY_PROPERTY(process, | 1022 | 1001 | "_preload_modules", | 1023 | | - array); | | 1002 | + ToV8Value(env->context(), preload_modules) | | 1003 | + .ToLocalChecked()); | 1024 | 1004 | } | 1025 | 1005 |
| 1026 | 1006 | // --no-deprecation | |
Collapse file Copy file name to clipboardExpand all lines: src/node_credentials.cc +10-25Lines changed: 10 additions & 25 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -15,9 +15,9 @@ using v8::Array; | 15 | 15 | using v8::Context; | 16 | 16 | using v8::Function; | 17 | 17 | using v8::FunctionCallbackInfo; | 18 | | -using v8::Integer; | 19 | 18 | using v8::Isolate; | 20 | 19 | using v8::Local; | | 20 | +using v8::MaybeLocal; | 21 | 21 | using v8::Object; | 22 | 22 | using v8::String; | 23 | 23 | using v8::Uint32; | @@ -253,36 +253,21 @@ static void GetGroups(const FunctionCallbackInfo<Value>& args) { | 253 | 253 | Environment* env = Environment::GetCurrent(args); | 254 | 254 |
| 255 | 255 | int ngroups = getgroups(0, nullptr); | 256 | | - | 257 | 256 | if (ngroups == -1) return env->ThrowErrnoException(errno, "getgroups"); | 258 | 257 |
| 259 | | - gid_t* groups = new gid_t[ngroups]; | 260 | | - | 261 | | - ngroups = getgroups(ngroups, groups); | | 258 | + std::vector<gid_t> groups(ngroups); | 262 | 259 |
| 263 | | - if (ngroups == -1) { | 264 | | - delete[] groups; | | 260 | + ngroups = getgroups(ngroups, groups.data()); | | 261 | + if (ngroups == -1) | 265 | 262 | return env->ThrowErrnoException(errno, "getgroups"); | 266 | | - } | 267 | 263 |
| 268 | | - Local<Array> groups_list = Array::New(env->isolate(), ngroups); | 269 | | - bool seen_egid = false; | | 264 | + groups.resize(ngroups); | 270 | 265 | gid_t egid = getegid(); | 271 | | - | 272 | | - for (int i = 0; i < ngroups; i++) { | 273 | | - groups_list->Set(env->context(), i, Integer::New(env->isolate(), groups[i])) | 274 | | - .FromJust(); | 275 | | - if (groups[i] == egid) seen_egid = true; | 276 | | - } | 277 | | - | 278 | | - delete[] groups; | 279 | | - | 280 | | - if (seen_egid == false) | 281 | | - groups_list | 282 | | - ->Set(env->context(), ngroups, Integer::New(env->isolate(), egid)) | 283 | | - .FromJust(); | 284 | | - | 285 | | - args.GetReturnValue().Set(groups_list); | | 266 | + if (std::find(groups.begin(), groups.end(), egid) == groups.end()) | | 267 | + groups.push_back(egid); | | 268 | + MaybeLocal<Value> array = ToV8Value(env->context(), groups); | | 269 | + if (!array.IsEmpty()) | | 270 | + args.GetReturnValue().Set(array.ToLocalChecked()); | 286 | 271 | } | 287 | 272 |
| 288 | 273 | static void SetGroups(const FunctionCallbackInfo<Value>& args) { | |
Collapse file Copy file name to clipboardExpand all lines: src/node_crypto.cc +3-13Lines changed: 3 additions & 13 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -248,22 +248,12 @@ struct CryptoErrorVector : public std::vector<std::string> { | 248 | 248 | CHECK(!exception_v.IsEmpty()); | 249 | 249 |
| 250 | 250 | if (!empty()) { | 251 | | - Local<Array> array = Array::New(env->isolate(), size()); | 252 | | - CHECK(!array.IsEmpty()); | 253 | | - | 254 | | - for (const std::string& string : *this) { | 255 | | - const size_t index = &string - &front(); | 256 | | - Local<String> value = | 257 | | - String::NewFromUtf8(env->isolate(), string.data(), | 258 | | - NewStringType::kNormal, string.size()) | 259 | | - .ToLocalChecked(); | 260 | | - array->Set(env->context(), index, value).FromJust(); | 261 | | - } | 262 | | - | 263 | 251 | CHECK(exception_v->IsObject()); | 264 | 252 | Local<Object> exception = exception_v.As<Object>(); | 265 | 253 | exception->Set(env->context(), | 266 | | - env->openssl_error_stack(), array).FromJust(); | | 254 | + env->openssl_error_stack(), | | 255 | + ToV8Value(env->context(), *this).ToLocalChecked()) | | 256 | + .FromJust(); | 267 | 257 | } | 268 | 258 |
| 269 | 259 | return exception_v; | |
Collapse file Copy file name to clipboardExpand all lines: src/node_url.cc +1-10Lines changed: 1 addition & 10 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -1190,15 +1190,6 @@ inline std::vector<std::string> FromJSStringArray(Environment* env, | 1190 | 1190 | return vec; | 1191 | 1191 | } | 1192 | 1192 |
| 1193 | | -inline Local<Array> ToJSStringArray(Environment* env, | 1194 | | - const std::vector<std::string>& vec) { | 1195 | | - Isolate* isolate = env->isolate(); | 1196 | | - Local<Array> array = Array::New(isolate, vec.size()); | 1197 | | - for (size_t n = 0; n < vec.size(); n++) | 1198 | | - array->Set(env->context(), n, Utf8String(isolate, vec[n])).FromJust(); | 1199 | | - return array; | 1200 | | -} | 1201 | | - | 1202 | 1193 | inline url_data HarvestBase(Environment* env, Local<Object> base_obj) { | 1203 | 1194 | url_data base; | 1204 | 1195 | Local<Context> context = env->context(); | @@ -2119,7 +2110,7 @@ static inline void SetArgs(Environment* env, | 2119 | 2110 | if (url.port > -1) | 2120 | 2111 | argv[ARG_PORT] = Integer::New(isolate, url.port); | 2121 | 2112 | if (url.flags & URL_FLAGS_HAS_PATH) | 2122 | | - argv[ARG_PATH] = ToJSStringArray(env, url.path); | | 2113 | + argv[ARG_PATH] = ToV8Value(env->context(), url.path).ToLocalChecked(); | 2123 | 2114 | } | 2124 | 2115 |
| 2125 | 2116 | static void Parse(Environment* env, | |
|