@@ -214,6 +214,9 @@ static void After(uv_fs_t *req) {
214
214
{
215
215
int r;
216
216
Local<Array> names = Array::New (env->isolate (), 0 );
217
+ Local<Function> fn = env->push_values_to_array_function ();
218
+ Local<Value> name_argv[NODE_PUSH_VAL_TO_ARRAY_MAX];
219
+ size_t name_idx = 0 ;
217
220
218
221
for (int i = 0 ; ; i++) {
219
222
uv_dirent_t ent;
@@ -229,9 +232,19 @@ static void After(uv_fs_t *req) {
229
232
break ;
230
233
}
231
234
232
- Local<String> name = String::NewFromUtf8 (env->isolate (),
233
- ent.name );
234
- names->Set (i, name);
235
+ name_argv[name_idx++] =
236
+ String::NewFromUtf8 (env->isolate (), ent.name );
237
+
238
+ if (name_idx >= ARRAY_SIZE (name_argv)) {
239
+ fn->Call (env->context (), names, name_idx, name_argv)
240
+ .ToLocalChecked ();
241
+ name_idx = 0 ;
242
+ }
243
+ }
244
+
245
+ if (name_idx > 0 ) {
246
+ fn->Call (env->context (), names, name_idx, name_argv)
247
+ .ToLocalChecked ();
235
248
}
236
249
237
250
argv[1 ] = names;
@@ -811,6 +824,9 @@ static void ReadDir(const FunctionCallbackInfo<Value>& args) {
811
824
CHECK_GE (SYNC_REQ.result , 0 );
812
825
int r;
813
826
Local<Array> names = Array::New (env->isolate (), 0 );
827
+ Local<Function> fn = env->push_values_to_array_function ();
828
+ Local<Value> name_v[NODE_PUSH_VAL_TO_ARRAY_MAX];
829
+ size_t name_idx = 0 ;
814
830
815
831
for (int i = 0 ; ; i++) {
816
832
uv_dirent_t ent;
@@ -821,9 +837,18 @@ static void ReadDir(const FunctionCallbackInfo<Value>& args) {
821
837
if (r != 0 )
822
838
return env->ThrowUVException (r, " readdir" , " " , *path);
823
839
824
- Local<String> name = String::NewFromUtf8 (env->isolate (),
825
- ent.name );
826
- names->Set (i, name);
840
+
841
+ name_v[name_idx++] = String::NewFromUtf8 (env->isolate (), ent.name );
842
+
843
+ if (name_idx >= ARRAY_SIZE (name_v)) {
844
+ fn->Call (env->context (), names, name_idx, name_v)
845
+ .ToLocalChecked ();
846
+ name_idx = 0 ;
847
+ }
848
+ }
849
+
850
+ if (name_idx > 0 ) {
851
+ fn->Call (env->context (), names, name_idx, name_v).ToLocalChecked ();
827
852
}
828
853
829
854
args.GetReturnValue ().Set (names);
0 commit comments