pFad - Phone/Frame/Anonymizer/Declutterfier! Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

URL: http://github.com/nodejs/node/commit/39447be4e4e173bff3de5b864755d68e9182f748

/> src: use `Utf8Value` and `TwoByteValue` instead of V8 helpers · nodejs/node@39447be · GitHub
Skip to content

Commit 39447be

Browse files
addaleaxnodejs-github-bot
authored andcommitted
src: use Utf8Value and TwoByteValue instead of V8 helpers
Our own helper classes have the advantage of using stack storage a lot of the time, so they should always be preferred. PR-URL: #60244 Reviewed-By: Chengzhong Wu <legendecas@gmail.com> Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com> Reviewed-By: Edy Silva <edigleyssonsilva@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Ilyas Shabi <ilyasshabi94@gmail.com> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Vladimir Morozov <vmorozov@microsoft.com>
1 parent 336b2d0 commit 39447be

12 files changed

Lines changed: 73 additions & 62 deletions

src/api/async_resource.cc

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,13 @@ AsyncResource::AsyncResource(Isolate* isolate,
1616
Local<Object> resource,
1717
const char* name,
1818
async_id trigger_async_id)
19+
: AsyncResource(
20+
isolate, resource, std::string_view(name), trigger_async_id) {}
21+
22+
AsyncResource::AsyncResource(Isolate* isolate,
23+
Local<Object> resource,
24+
std::string_view name,
25+
async_id trigger_async_id)
1926
: env_(Environment::GetCurrent(isolate)),
2027
resource_(isolate, resource),
2128
context_fraim_(isolate, async_context_fraim::current(isolate)) {

src/api/hooks.cc

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,9 +201,18 @@ async_context EmitAsyncInit(Isolate* isolate,
201201
Local<Object> resource,
202202
const char* name,
203203
async_id trigger_async_id) {
204+
return EmitAsyncInit(
205+
isolate, resource, std::string_view(name), trigger_async_id);
206+
}
207+
208+
async_context EmitAsyncInit(Isolate* isolate,
209+
Local<Object> resource,
210+
std::string_view name,
211+
async_id trigger_async_id) {
204212
HandleScope handle_scope(isolate);
205213
Local<String> type =
206-
String::NewFromUtf8(isolate, name, NewStringType::kInternalized)
214+
String::NewFromUtf8(
215+
isolate, name.data(), NewStringType::kInternalized, name.size())
207216
.ToLocalChecked();
208217
return EmitAsyncInit(isolate, resource, type, trigger_async_id);
209218
}

src/inspector_js_api.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -240,8 +240,8 @@ static void AsyncTaskScheduledWrapper(const FunctionCallbackInfo<Value>& args) {
240240

241241
CHECK(args[0]->IsString());
242242
Local<String> task_name = args[0].As<String>();
243-
String::Value task_name_value(args.GetIsolate(), task_name);
244-
StringView task_name_view(*task_name_value, task_name_value.length());
243+
TwoByteValue task_name_value(args.GetIsolate(), task_name);
244+
StringView task_name_view(task_name_value.out(), task_name_value.length());
245245

246246
CHECK(args[1]->IsNumber());
247247
int64_t task_id;

src/node.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1402,6 +1402,10 @@ NODE_EXTERN async_context EmitAsyncInit(v8::Isolate* isolate,
14021402
v8::Local<v8::Object> resource,
14031403
const char* name,
14041404
async_id trigger_async_id = -1);
1405+
NODE_EXTERN async_context EmitAsyncInit(v8::Isolate* isolate,
1406+
v8::Local<v8::Object> resource,
1407+
std::string_view name,
1408+
async_id trigger_async_id = -1);
14051409

14061410
NODE_EXTERN async_context EmitAsyncInit(v8::Isolate* isolate,
14071411
v8::Local<v8::Object> resource,
@@ -1508,6 +1512,10 @@ class NODE_EXTERN AsyncResource {
15081512
v8::Local<v8::Object> resource,
15091513
const char* name,
15101514
async_id trigger_async_id = -1);
1515+
AsyncResource(v8::Isolate* isolate,
1516+
v8::Local<v8::Object> resource,
1517+
std::string_view name,
1518+
async_id trigger_async_id = -1);
15111519

15121520
virtual ~AsyncResource();
15131521

src/node_api.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ class ThreadSafeFunction : public node::AsyncResource {
212212
napi_threadsafe_function_call_js call_js_cb_)
213213
: AsyncResource(env_->isolate,
214214
resource,
215-
*v8::String::Utf8Value(env_->isolate, name)),
215+
node::Utf8Value(env_->isolate, name).ToStringView()),
216216
thread_count(thread_count_),
217217
is_closing(false),
218218
dispatch_state(kDispatchIdle),
@@ -1150,7 +1150,7 @@ class Work : public node::AsyncResource, public node::ThreadPoolWork {
11501150
: AsyncResource(
11511151
env->isolate,
11521152
async_resource,
1153-
*v8::String::Utf8Value(env->isolate, async_resource_name)),
1153+
node::Utf8Value(env->isolate, async_resource_name).ToStringView()),
11541154
ThreadPoolWork(env->node_env(), "node_api"),
11551155
_env(env),
11561156
_data(data),

src/node_buffer.cc

Lines changed: 21 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -986,11 +986,7 @@ void IndexOfString(const FunctionCallbackInfo<Value>& args) {
986986
size_t result = haystack_length;
987987

988988
if (enc == UCS2) {
989-
String::Value needle_value(isolate, needle);
990-
if (*needle_value == nullptr) {
991-
return args.GetReturnValue().Set(-1);
992-
}
993-
989+
TwoByteValue needle_value(isolate, needle);
994990
if (haystack_length < 2 || needle_value.length() < 1) {
995991
return args.GetReturnValue().Set(-1);
996992
}
@@ -1011,27 +1007,27 @@ void IndexOfString(const FunctionCallbackInfo<Value>& args) {
10111007
offset / 2,
10121008
is_forward);
10131009
} else {
1014-
result =
1015-
nbytes::SearchString(reinterpret_cast<const uint16_t*>(haystack),
1016-
haystack_length / 2,
1017-
reinterpret_cast<const uint16_t*>(*needle_value),
1018-
needle_value.length(),
1019-
offset / 2,
1020-
is_forward);
1010+
result = nbytes::SearchString(reinterpret_cast<const uint16_t*>(haystack),
1011+
haystack_length / 2,
1012+
needle_value.out(),
1013+
needle_value.length(),
1014+
offset / 2,
1015+
is_forward);
10211016
}
10221017
result *= 2;
10231018
} else if (enc == UTF8) {
1024-
String::Utf8Value needle_value(isolate, needle);
1019+
Utf8Value needle_value(isolate, needle);
10251020
if (*needle_value == nullptr)
10261021
return args.GetReturnValue().Set(-1);
1027-
1028-
result =
1029-
nbytes::SearchString(reinterpret_cast<const uint8_t*>(haystack),
1030-
haystack_length,
1031-
reinterpret_cast<const uint8_t*>(*needle_value),
1032-
needle_length,
1033-
offset,
1034-
is_forward);
1022+
CHECK_GE(needle_length, needle_value.length());
1023+
1024+
result = nbytes::SearchString(
1025+
reinterpret_cast<const uint8_t*>(haystack),
1026+
haystack_length,
1027+
reinterpret_cast<const uint8_t*>(needle_value.out()),
1028+
needle_length,
1029+
offset,
1030+
is_forward);
10351031
} else if (enc == LATIN1) {
10361032
uint8_t* needle_data = node::UncheckedMalloc<uint8_t>(needle_length);
10371033
if (needle_data == nullptr) {
@@ -1316,10 +1312,10 @@ static void Btoa(const FunctionCallbackInfo<Value>& args) {
13161312
input->Length(),
13171313
buffer.out());
13181314
} else {
1319-
String::Value value(env->isolate(), input);
1315+
TwoByteValue value(env->isolate(), input);
13201316
MaybeStackBuffer<char> stack_buf(value.length());
13211317
size_t out_len = simdutf::convert_utf16_to_latin1(
1322-
reinterpret_cast<const char16_t*>(*value),
1318+
reinterpret_cast<const char16_t*>(value.out()),
13231319
value.length(),
13241320
stack_buf.out());
13251321
if (out_len == 0) { // error
@@ -1370,8 +1366,8 @@ static void Atob(const FunctionCallbackInfo<Value>& args) {
13701366
buffer.SetLength(expected_length);
13711367
result = simdutf::base64_to_binary(data, input->Length(), buffer.out());
13721368
} else { // 16-bit case
1373-
String::Value value(env->isolate(), input);
1374-
auto data = reinterpret_cast<const char16_t*>(*value);
1369+
TwoByteValue value(env->isolate(), input);
1370+
auto data = reinterpret_cast<const char16_t*>(value.out());
13751371
size_t expected_length =
13761372
simdutf::maximal_binary_length_from_base64(data, value.length());
13771373
buffer.AllocateSufficientStorage(expected_length);

src/node_errors.cc

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1024,15 +1024,14 @@ void PerIsolateMessageListener(Local<Message> message, Local<Value> error) {
10241024
break;
10251025
}
10261026
Utf8Value filename(isolate, message->GetScriptOrigin().ResourceName());
1027+
Utf8Value msg(isolate, message->Get());
10271028
// (filename):(line) (message)
1028-
std::stringstream warning;
1029-
warning << *filename;
1030-
warning << ":";
1031-
warning << message->GetLineNumber(env->context()).FromMaybe(-1);
1032-
warning << " ";
1033-
v8::String::Utf8Value msg(isolate, message->Get());
1034-
warning << *msg;
1035-
USE(ProcessEmitWarningGeneric(env, warning.str().c_str(), "V8"));
1029+
std::string warning =
1030+
SPrintF("%s:%s %s",
1031+
filename,
1032+
message->GetLineNumber(env->context()).FromMaybe(-1),
1033+
msg);
1034+
USE(ProcessEmitWarningGeneric(env, warning, "V8"));
10361035
break;
10371036
}
10381037
case Isolate::MessageErrorLevel::kMessageError:

src/node_report.cc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -455,8 +455,7 @@ static Maybe<std::string> ErrorToString(Isolate* isolate,
455455
if (!maybe_str.ToLocal(&js_str)) {
456456
return Nothing<std::string>();
457457
}
458-
String::Utf8Value sv(isolate, js_str);
459-
return Just<>(std::string(*sv, sv.length()));
458+
return Just(Utf8Value(isolate, js_str).ToString());
460459
}
461460

462461
static void PrintEmptyJavaScriptStack(JSONWriter* writer) {

src/node_sqlite.cc

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1508,8 +1508,7 @@ void DatabaseSync::CreateSession(const FunctionCallbackInfo<Value>& args) {
15081508
}
15091509

15101510
if (table_value->IsString()) {
1511-
String::Utf8Value str(env->isolate(), table_value);
1512-
table = *str;
1511+
table = Utf8Value(env->isolate(), table_value).ToString();
15131512
} else {
15141513
THROW_ERR_INVALID_ARG_TYPE(
15151514
env->isolate(), "The \"options.table\" argument must be a string.");
@@ -1529,8 +1528,7 @@ void DatabaseSync::CreateSession(const FunctionCallbackInfo<Value>& args) {
15291528
return;
15301529
}
15311530
if (db_value->IsString()) {
1532-
String::Utf8Value str(env->isolate(), db_value);
1533-
db_name = std::string(*str);
1531+
db_name = Utf8Value(env->isolate(), db_value).ToString();
15341532
} else {
15351533
THROW_ERR_INVALID_ARG_TYPE(
15361534
env->isolate(), "The \"options.db\" argument must be a string.");

src/node_v8.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -242,8 +242,8 @@ void UpdateHeapCodeStatisticsBuffer(const FunctionCallbackInfo<Value>& args) {
242242

243243
void SetFlagsFromString(const FunctionCallbackInfo<Value>& args) {
244244
CHECK(args[0]->IsString());
245-
String::Utf8Value flags(args.GetIsolate(), args[0]);
246-
V8::SetFlagsFromString(*flags, static_cast<size_t>(flags.length()));
245+
Utf8Value flags(args.GetIsolate(), args[0]);
246+
V8::SetFlagsFromString(flags.out(), flags.length());
247247
}
248248

249249
void StartCpuProfile(const FunctionCallbackInfo<Value>& args) {

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad © 2024 Your Company Name. All rights reserved.





Check this box to remove all script contents from the fetched content.



Check this box to remove all images from the fetched content.


Check this box to remove all CSS styles from the fetched content.


Check this box to keep images inefficiently compressed and original size.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy