Skip to content

Commit bd403bf

Browse files
committed
src: refactor object conversion
1 parent 92caf65 commit bd403bf

1 file changed

Lines changed: 14 additions & 8 deletions

File tree

src/node_json_parser.cc

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)