@@ -132,29 +132,35 @@ MaybeLocal<Value> ConvertSimdjsonElement(Isolate* isolate,
132132
133133 THROW_AND_RETURN_EMPTY_IF_SIMDJSON_ERROR (isolate, error);
134134
135- Local<Object> v8_object = Object::New (isolate);
136- Local<Context> context = isolate->GetCurrentContext ();
135+ size_t size = object.size ();
137136
138- for (const simdjson::dom::key_value_pair& kv : object) {
139- const std::string_view key = kv.key ;
137+ LocalVector<v8::Name> names (isolate);
138+ LocalVector<Value> values (isolate);
139+ names.reserve (size);
140+ values.reserve (size);
140141
142+ for (auto [key, value] : object) {
141143 Local<String> v8_key;
144+
142145 if (!String::NewFromUtf8 (isolate,
143146 key.data (),
144147 v8::NewStringType::kNormal ,
145- static_cast < int >( key.size () ))
148+ key.size ())
146149 .ToLocal (&v8_key)) {
147150 return MaybeLocal<Value>();
148151 }
149152
150153 Local<Value> converted;
151- if (!ConvertSimdjsonElement (isolate, kv. value ).ToLocal (&converted))
154+ if (!ConvertSimdjsonElement (isolate, value).ToLocal (&converted))
152155 return MaybeLocal<Value>();
153156
154- if (v8_object-> Set (context, v8_key, converted). IsNothing ())
155- return MaybeLocal<Value>( );
157+ names. push_back ( v8_key);
158+ values. push_back (converted );
156159 }
157160
161+ Local<Object> v8_object = Object::New (
162+ isolate, Null (isolate), names.data (), values.data (), size);
163+
158164 return MaybeLocal<Value>(v8_object);
159165 }
160166 default :
0 commit comments