Skip to content

Commit 8375f75

Browse files
committed
src: use String::Write{OneByte,Utf8} with isolate
PR-URL: #22531 Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Daniel Bevenius <[email protected]> Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: James M Snell <[email protected]>
1 parent d50e1ff commit 8375f75

File tree

7 files changed

+55
-40
lines changed

7 files changed

+55
-40
lines changed

benchmark/napi/function_args/binding.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ void CallWithString(const FunctionCallbackInfo<Value>& args) {
2121
Local<String> str = args[0].As<String>();
2222
const int32_t length = str->Utf8Length() + 1;
2323
char* buf = new char[length];
24-
str->WriteUtf8(buf, length);
24+
str->WriteUtf8(args.GetIsolate(), buf, length);
2525
delete [] buf;
2626
}
2727
}

src/node_api.cc

+16-8
Original file line numberDiff line numberDiff line change
@@ -2362,9 +2362,12 @@ napi_status napi_get_value_string_latin1(napi_env env,
23622362
CHECK_ARG(env, result);
23632363
*result = val.As<v8::String>()->Length();
23642364
} else {
2365-
int copied = val.As<v8::String>()->WriteOneByte(
2366-
reinterpret_cast<uint8_t*>(buf), 0, bufsize - 1,
2367-
v8::String::NO_NULL_TERMINATION);
2365+
int copied =
2366+
val.As<v8::String>()->WriteOneByte(env->isolate,
2367+
reinterpret_cast<uint8_t*>(buf),
2368+
0,
2369+
bufsize - 1,
2370+
v8::String::NO_NULL_TERMINATION);
23682371

23692372
buf[copied] = '\0';
23702373
if (result != nullptr) {
@@ -2399,8 +2402,11 @@ napi_status napi_get_value_string_utf8(napi_env env,
23992402
*result = val.As<v8::String>()->Utf8Length();
24002403
} else {
24012404
int copied = val.As<v8::String>()->WriteUtf8(
2402-
buf, bufsize - 1, nullptr, v8::String::REPLACE_INVALID_UTF8 |
2403-
v8::String::NO_NULL_TERMINATION);
2405+
env->isolate,
2406+
buf,
2407+
bufsize - 1,
2408+
nullptr,
2409+
v8::String::REPLACE_INVALID_UTF8 | v8::String::NO_NULL_TERMINATION);
24042410

24052411
buf[copied] = '\0';
24062412
if (result != nullptr) {
@@ -2435,9 +2441,11 @@ napi_status napi_get_value_string_utf16(napi_env env,
24352441
// V8 assumes UTF-16 length is the same as the number of characters.
24362442
*result = val.As<v8::String>()->Length();
24372443
} else {
2438-
int copied = val.As<v8::String>()->Write(
2439-
reinterpret_cast<uint16_t*>(buf), 0, bufsize - 1,
2440-
v8::String::NO_NULL_TERMINATION);
2444+
int copied = val.As<v8::String>()->Write(env->isolate,
2445+
reinterpret_cast<uint16_t*>(buf),
2446+
0,
2447+
bufsize - 1,
2448+
v8::String::NO_NULL_TERMINATION);
24412449

24422450
buf[copied] = '\0';
24432451
if (result != nullptr) {

src/node_buffer.cc

+16-14
Original file line numberDiff line numberDiff line change
@@ -806,15 +806,16 @@ int64_t IndexOfOffset(size_t length,
806806
}
807807

808808
void IndexOfString(const FunctionCallbackInfo<Value>& args) {
809+
Environment* env = Environment::GetCurrent(args);
810+
Isolate* isolate = env->isolate();
811+
809812
CHECK(args[1]->IsString());
810813
CHECK(args[2]->IsNumber());
811814
CHECK(args[4]->IsBoolean());
812815

813-
enum encoding enc = ParseEncoding(args.GetIsolate(),
814-
args[3],
815-
UTF8);
816+
enum encoding enc = ParseEncoding(isolate, args[3], UTF8);
816817

817-
THROW_AND_RETURN_UNLESS_BUFFER(Environment::GetCurrent(args), args[0]);
818+
THROW_AND_RETURN_UNLESS_BUFFER(env, args[0]);
818819
SPREAD_BUFFER_ARG(args[0], ts_obj);
819820

820821
Local<String> needle = args[1].As<String>();
@@ -826,8 +827,7 @@ void IndexOfString(const FunctionCallbackInfo<Value>& args) {
826827
const size_t haystack_length = (enc == UCS2) ?
827828
ts_obj_length &~ 1 : ts_obj_length; // NOLINT(whitespace/operators)
828829

829-
const size_t needle_length =
830-
StringBytes::Size(args.GetIsolate(), needle, enc);
830+
const size_t needle_length = StringBytes::Size(isolate, needle, enc);
831831

832832
int64_t opt_offset = IndexOfOffset(haystack_length,
833833
offset_i64,
@@ -857,7 +857,7 @@ void IndexOfString(const FunctionCallbackInfo<Value>& args) {
857857
size_t result = haystack_length;
858858

859859
if (enc == UCS2) {
860-
String::Value needle_value(args.GetIsolate(), needle);
860+
String::Value needle_value(isolate, needle);
861861
if (*needle_value == nullptr)
862862
return args.GetReturnValue().Set(-1);
863863

@@ -867,7 +867,7 @@ void IndexOfString(const FunctionCallbackInfo<Value>& args) {
867867

868868
if (IsBigEndian()) {
869869
StringBytes::InlineDecoder decoder;
870-
decoder.Decode(Environment::GetCurrent(args), needle, args[3], UCS2);
870+
decoder.Decode(env, needle, args[3], UCS2);
871871
const uint16_t* decoded_string =
872872
reinterpret_cast<const uint16_t*>(decoder.out());
873873

@@ -890,7 +890,7 @@ void IndexOfString(const FunctionCallbackInfo<Value>& args) {
890890
}
891891
result *= 2;
892892
} else if (enc == UTF8) {
893-
String::Utf8Value needle_value(args.GetIsolate(), needle);
893+
String::Utf8Value needle_value(isolate, needle);
894894
if (*needle_value == nullptr)
895895
return args.GetReturnValue().Set(-1);
896896

@@ -906,7 +906,7 @@ void IndexOfString(const FunctionCallbackInfo<Value>& args) {
906906
return args.GetReturnValue().Set(-1);
907907
}
908908
needle->WriteOneByte(
909-
needle_data, 0, needle_length, String::NO_NULL_TERMINATION);
909+
isolate, needle_data, 0, needle_length, String::NO_NULL_TERMINATION);
910910

911911
result = SearchString(reinterpret_cast<const uint8_t*>(haystack),
912912
haystack_length,
@@ -1057,18 +1057,20 @@ void Swap64(const FunctionCallbackInfo<Value>& args) {
10571057
// Used in TextEncoder.prototype.encode.
10581058
static void EncodeUtf8String(const FunctionCallbackInfo<Value>& args) {
10591059
Environment* env = Environment::GetCurrent(args);
1060+
Isolate* isolate = env->isolate();
10601061
CHECK_GE(args.Length(), 1);
10611062
CHECK(args[0]->IsString());
10621063

10631064
Local<String> str = args[0].As<String>();
10641065
size_t length = str->Utf8Length();
10651066
char* data = node::UncheckedMalloc(length);
1066-
str->WriteUtf8(data,
1067-
-1, // We are certain that `data` is sufficiently large
1067+
str->WriteUtf8(isolate,
1068+
data,
1069+
-1, // We are certain that `data` is sufficiently large
10681070
nullptr,
10691071
String::NO_NULL_TERMINATION | String::REPLACE_INVALID_UTF8);
1070-
auto array_buf = ArrayBuffer::New(env->isolate(), data, length,
1071-
ArrayBufferCreationMode::kInternalized);
1072+
auto array_buf = ArrayBuffer::New(
1073+
isolate, data, length, ArrayBufferCreationMode::kInternalized);
10721074
auto array = Uint8Array::New(array_buf, 0, length);
10731075
args.GetReturnValue().Set(array);
10741076
}

src/node_http2.cc

+8-6
Original file line numberDiff line numberDiff line change
@@ -381,10 +381,12 @@ Headers::Headers(Isolate* isolate,
381381
nghttp2_nv* const nva = reinterpret_cast<nghttp2_nv*>(start);
382382

383383
CHECK_LE(header_contents + header_string_len, *buf_ + buf_.length());
384-
CHECK_EQ(header_string.As<String>()
385-
->WriteOneByte(reinterpret_cast<uint8_t*>(header_contents),
386-
0, header_string_len,
387-
String::NO_NULL_TERMINATION),
384+
CHECK_EQ(header_string.As<String>()->WriteOneByte(
385+
isolate,
386+
reinterpret_cast<uint8_t*>(header_contents),
387+
0,
388+
header_string_len,
389+
String::NO_NULL_TERMINATION),
388390
header_string_len);
389391

390392
size_t n = 0;
@@ -2633,8 +2635,8 @@ void Http2Session::AltSvc(const FunctionCallbackInfo<Value>& args) {
26332635

26342636
MaybeStackBuffer<uint8_t> origin(origin_len);
26352637
MaybeStackBuffer<uint8_t> value(value_len);
2636-
origin_str->WriteOneByte(*origin);
2637-
value_str->WriteOneByte(*value);
2638+
origin_str->WriteOneByte(env->isolate(), *origin);
2639+
value_str->WriteOneByte(env->isolate(), *value);
26382640

26392641
session->AltSvc(id, *origin, origin_len, *value, value_len);
26402642
}

src/string_bytes.cc

+9-8
Original file line numberDiff line numberDiff line change
@@ -257,8 +257,8 @@ static size_t hex_decode(char* buf,
257257
return i;
258258
}
259259

260-
261-
size_t StringBytes::WriteUCS2(char* buf,
260+
size_t StringBytes::WriteUCS2(Isolate* isolate,
261+
char* buf,
262262
size_t buflen,
263263
Local<String> str,
264264
int flags,
@@ -273,7 +273,7 @@ size_t StringBytes::WriteUCS2(char* buf,
273273
size_t nchars;
274274
size_t alignment = reinterpret_cast<uintptr_t>(dst) % sizeof(*dst);
275275
if (alignment == 0) {
276-
nchars = str->Write(dst, 0, max_chars, flags);
276+
nchars = str->Write(isolate, dst, 0, max_chars, flags);
277277
*chars_written = nchars;
278278
return nchars * sizeof(*dst);
279279
}
@@ -283,14 +283,15 @@ size_t StringBytes::WriteUCS2(char* buf,
283283
CHECK_EQ(reinterpret_cast<uintptr_t>(aligned_dst) % sizeof(*dst), 0);
284284

285285
// Write all but the last char
286-
nchars = str->Write(aligned_dst, 0, max_chars - 1, flags);
286+
nchars = str->Write(isolate, aligned_dst, 0, max_chars - 1, flags);
287287

288288
// Shift everything to unaligned-left
289289
memmove(dst, aligned_dst, nchars * sizeof(*dst));
290290

291291
// One more char to be written
292292
uint16_t last;
293-
if (nchars == max_chars - 1 && str->Write(&last, nchars, 1, flags) != 0) {
293+
if (nchars == max_chars - 1 &&
294+
str->Write(isolate, &last, nchars, 1, flags) != 0) {
294295
memcpy(buf + nchars * sizeof(*dst), &last, sizeof(last));
295296
nchars++;
296297
}
@@ -329,20 +330,20 @@ size_t StringBytes::Write(Isolate* isolate,
329330
memcpy(buf, ext->data(), nbytes);
330331
} else {
331332
uint8_t* const dst = reinterpret_cast<uint8_t*>(buf);
332-
nbytes = str->WriteOneByte(dst, 0, buflen, flags);
333+
nbytes = str->WriteOneByte(isolate, dst, 0, buflen, flags);
333334
}
334335
*chars_written = nbytes;
335336
break;
336337

337338
case BUFFER:
338339
case UTF8:
339-
nbytes = str->WriteUtf8(buf, buflen, chars_written, flags);
340+
nbytes = str->WriteUtf8(isolate, buf, buflen, chars_written, flags);
340341
break;
341342

342343
case UCS2: {
343344
size_t nchars;
344345

345-
nbytes = WriteUCS2(buf, buflen, str, flags, &nchars);
346+
nbytes = WriteUCS2(isolate, buf, buflen, str, flags, &nchars);
346347
*chars_written = static_cast<int>(nchars);
347348

348349
// Node's "ucs2" encoding wants LE character data stored in

src/string_bytes.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,8 @@ class StringBytes {
112112
v8::Local<v8::Value>* error);
113113

114114
private:
115-
static size_t WriteUCS2(char* buf,
115+
static size_t WriteUCS2(v8::Isolate* isolate,
116+
char* buf,
116117
size_t buflen,
117118
v8::Local<v8::String> str,
118119
int flags,

src/util.cc

+3-2
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ static void MakeUtf8String(Isolate* isolate,
4545
target->AllocateSufficientStorage(storage);
4646
const int flags =
4747
String::NO_NULL_TERMINATION | String::REPLACE_INVALID_UTF8;
48-
const int length = string->WriteUtf8(target->out(), storage, 0, flags);
48+
const int length =
49+
string->WriteUtf8(isolate, target->out(), storage, 0, flags);
4950
target->SetLengthAndZeroTerminate(length);
5051
}
5152

@@ -71,7 +72,7 @@ TwoByteValue::TwoByteValue(Isolate* isolate, Local<Value> value) {
7172
AllocateSufficientStorage(storage);
7273

7374
const int flags = String::NO_NULL_TERMINATION;
74-
const int length = string->Write(out(), 0, storage, flags);
75+
const int length = string->Write(isolate, out(), 0, storage, flags);
7576
SetLengthAndZeroTerminate(length);
7677
}
7778

0 commit comments

Comments
 (0)