Skip to content

Commit 383d578

Browse files
committed
src,deps: add isolate parameter to String::Concat
Partially backport an upstream commit that deprecates String::Concat without the isolate parameter. This overload has already been removed in V8 7.0. PR-URL: #22521 Refs: v8/v8@8a011b5 Reviewed-By: Ujjwal Sharma <[email protected]> Reviewed-By: Gus Caplan <[email protected]> Reviewed-By: Tiancheng "Timothy" Gu <[email protected]> Reviewed-By: Refael Ackermann <[email protected]>
1 parent d27e463 commit 383d578

File tree

8 files changed

+69
-48
lines changed

8 files changed

+69
-48
lines changed

common.gypi

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929

3030
# Reset this number to 0 on major V8 upgrades.
3131
# Increment by one for each non-official patch applied to deps/v8.
32-
'v8_embedder_string': '-node.17',
32+
'v8_embedder_string': '-node.18',
3333

3434
# Enable disassembler for `--print-code` v8 options
3535
'v8_enable_disassembler': 1,

deps/v8/include/v8.h

+5-1
Original file line numberDiff line numberDiff line change
@@ -2807,7 +2807,11 @@ class V8_EXPORT String : public Name {
28072807
* Creates a new string by concatenating the left and the right strings
28082808
* passed in as parameters.
28092809
*/
2810-
static Local<String> Concat(Local<String> left, Local<String> right);
2810+
static Local<String> Concat(Isolate* isolate, Local<String> left,
2811+
Local<String> right);
2812+
static V8_DEPRECATE_SOON("Use Isolate* version",
2813+
Local<String> Concat(Local<String> left,
2814+
Local<String> right));
28112815

28122816
/**
28132817
* Creates a new external string using the data defined in the given

deps/v8/src/api.cc

+8-3
Original file line numberDiff line numberDiff line change
@@ -6637,10 +6637,10 @@ MaybeLocal<String> String::NewFromTwoByte(Isolate* isolate,
66376637
return result;
66386638
}
66396639

6640-
6641-
Local<String> v8::String::Concat(Local<String> left, Local<String> right) {
6640+
Local<String> v8::String::Concat(Isolate* v8_isolate, Local<String> left,
6641+
Local<String> right) {
6642+
i::Isolate* isolate = reinterpret_cast<i::Isolate*>(v8_isolate);
66426643
i::Handle<i::String> left_string = Utils::OpenHandle(*left);
6643-
i::Isolate* isolate = left_string->GetIsolate();
66446644
ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
66456645
LOG_API(isolate, String, Concat);
66466646
i::Handle<i::String> right_string = Utils::OpenHandle(*right);
@@ -6654,6 +6654,11 @@ Local<String> v8::String::Concat(Local<String> left, Local<String> right) {
66546654
return Utils::ToLocal(result);
66556655
}
66566656

6657+
Local<String> v8::String::Concat(Local<String> left, Local<String> right) {
6658+
i::Handle<i::String> left_string = Utils::OpenHandle(*left);
6659+
i::Isolate* isolate = left_string->GetIsolate();
6660+
return Concat(reinterpret_cast<Isolate*>(isolate), left, right);
6661+
}
66576662

66586663
MaybeLocal<String> v8::String::NewExternalTwoByte(
66596664
Isolate* isolate, v8::String::ExternalStringResource* resource) {

src/exceptions.cc

+40-32
Original file line numberDiff line numberDiff line change
@@ -26,40 +26,40 @@ Local<Value> ErrnoException(Isolate* isolate,
2626
Environment* env = Environment::GetCurrent(isolate);
2727

2828
Local<Value> e;
29-
Local<String> estring = OneByteString(env->isolate(), errno_string(errorno));
29+
Local<String> estring = OneByteString(isolate, errno_string(errorno));
3030
if (msg == nullptr || msg[0] == '\0') {
3131
msg = strerror(errorno);
3232
}
33-
Local<String> message = OneByteString(env->isolate(), msg);
33+
Local<String> message = OneByteString(isolate, msg);
3434

3535
Local<String> cons =
36-
String::Concat(estring, FIXED_ONE_BYTE_STRING(env->isolate(), ", "));
37-
cons = String::Concat(cons, message);
36+
String::Concat(isolate, estring, FIXED_ONE_BYTE_STRING(isolate, ", "));
37+
cons = String::Concat(isolate, cons, message);
3838

3939
Local<String> path_string;
4040
if (path != nullptr) {
4141
// FIXME(bnoordhuis) It's questionable to interpret the file path as UTF-8.
42-
path_string = String::NewFromUtf8(env->isolate(), path,
43-
v8::NewStringType::kNormal).ToLocalChecked();
42+
path_string = String::NewFromUtf8(isolate, path, v8::NewStringType::kNormal)
43+
.ToLocalChecked();
4444
}
4545

4646
if (path_string.IsEmpty() == false) {
47-
cons = String::Concat(cons, FIXED_ONE_BYTE_STRING(env->isolate(), " '"));
48-
cons = String::Concat(cons, path_string);
49-
cons = String::Concat(cons, FIXED_ONE_BYTE_STRING(env->isolate(), "'"));
47+
cons = String::Concat(isolate, cons, FIXED_ONE_BYTE_STRING(isolate, " '"));
48+
cons = String::Concat(isolate, cons, path_string);
49+
cons = String::Concat(isolate, cons, FIXED_ONE_BYTE_STRING(isolate, "'"));
5050
}
5151
e = Exception::Error(cons);
5252

5353
Local<Object> obj = e.As<Object>();
54-
obj->Set(env->errno_string(), Integer::New(env->isolate(), errorno));
54+
obj->Set(env->errno_string(), Integer::New(isolate, errorno));
5555
obj->Set(env->code_string(), estring);
5656

5757
if (path_string.IsEmpty() == false) {
5858
obj->Set(env->path_string(), path_string);
5959
}
6060

6161
if (syscall != nullptr) {
62-
obj->Set(env->syscall_string(), OneByteString(env->isolate(), syscall));
62+
obj->Set(env->syscall_string(), OneByteString(isolate, syscall));
6363
}
6464

6565
return e;
@@ -68,10 +68,11 @@ Local<Value> ErrnoException(Isolate* isolate,
6868
static Local<String> StringFromPath(Isolate* isolate, const char* path) {
6969
#ifdef _WIN32
7070
if (strncmp(path, "\\\\?\\UNC\\", 8) == 0) {
71-
return String::Concat(FIXED_ONE_BYTE_STRING(isolate, "\\\\"),
72-
String::NewFromUtf8(isolate, path + 8,
73-
v8::NewStringType::kNormal)
74-
.ToLocalChecked());
71+
return String::Concat(
72+
isolate,
73+
FIXED_ONE_BYTE_STRING(isolate, "\\\\"),
74+
String::NewFromUtf8(isolate, path + 8, v8::NewStringType::kNormal)
75+
.ToLocalChecked());
7576
} else if (strncmp(path, "\\\\?\\", 4) == 0) {
7677
return String::NewFromUtf8(isolate, path + 4, v8::NewStringType::kNormal)
7778
.ToLocalChecked();
@@ -109,25 +110,31 @@ Local<Value> UVException(Isolate* isolate,
109110
Local<String> js_dest;
110111

111112
Local<String> js_msg = js_code;
112-
js_msg = String::Concat(js_msg, FIXED_ONE_BYTE_STRING(isolate, ": "));
113-
js_msg = String::Concat(js_msg, OneByteString(isolate, msg));
114-
js_msg = String::Concat(js_msg, FIXED_ONE_BYTE_STRING(isolate, ", "));
115-
js_msg = String::Concat(js_msg, js_syscall);
113+
js_msg =
114+
String::Concat(isolate, js_msg, FIXED_ONE_BYTE_STRING(isolate, ": "));
115+
js_msg = String::Concat(isolate, js_msg, OneByteString(isolate, msg));
116+
js_msg =
117+
String::Concat(isolate, js_msg, FIXED_ONE_BYTE_STRING(isolate, ", "));
118+
js_msg = String::Concat(isolate, js_msg, js_syscall);
116119

117120
if (path != nullptr) {
118121
js_path = StringFromPath(isolate, path);
119122

120-
js_msg = String::Concat(js_msg, FIXED_ONE_BYTE_STRING(isolate, " '"));
121-
js_msg = String::Concat(js_msg, js_path);
122-
js_msg = String::Concat(js_msg, FIXED_ONE_BYTE_STRING(isolate, "'"));
123+
js_msg =
124+
String::Concat(isolate, js_msg, FIXED_ONE_BYTE_STRING(isolate, " '"));
125+
js_msg = String::Concat(isolate, js_msg, js_path);
126+
js_msg =
127+
String::Concat(isolate, js_msg, FIXED_ONE_BYTE_STRING(isolate, "'"));
123128
}
124129

125130
if (dest != nullptr) {
126131
js_dest = StringFromPath(isolate, dest);
127132

128-
js_msg = String::Concat(js_msg, FIXED_ONE_BYTE_STRING(isolate, " -> '"));
129-
js_msg = String::Concat(js_msg, js_dest);
130-
js_msg = String::Concat(js_msg, FIXED_ONE_BYTE_STRING(isolate, "'"));
133+
js_msg = String::Concat(
134+
isolate, js_msg, FIXED_ONE_BYTE_STRING(isolate, " -> '"));
135+
js_msg = String::Concat(isolate, js_msg, js_dest);
136+
js_msg =
137+
String::Concat(isolate, js_msg, FIXED_ONE_BYTE_STRING(isolate, "'"));
131138
}
132139

133140
Local<Object> e = Exception::Error(js_msg)->ToObject(isolate);
@@ -182,17 +189,18 @@ Local<Value> WinapiErrnoException(Isolate* isolate,
182189
if (!msg || !msg[0]) {
183190
msg = winapi_strerror(errorno, &must_free);
184191
}
185-
Local<String> message = OneByteString(env->isolate(), msg);
192+
Local<String> message = OneByteString(isolate, msg);
186193

187194
if (path) {
188195
Local<String> cons1 =
189-
String::Concat(message, FIXED_ONE_BYTE_STRING(isolate, " '"));
190-
Local<String> cons2 =
191-
String::Concat(cons1,
192-
String::NewFromUtf8(isolate, path, v8::NewStringType::kNormal)
193-
.ToLocalChecked());
196+
String::Concat(isolate, message, FIXED_ONE_BYTE_STRING(isolate, " '"));
197+
Local<String> cons2 = String::Concat(
198+
isolate,
199+
cons1,
200+
String::NewFromUtf8(isolate, path, v8::NewStringType::kNormal)
201+
.ToLocalChecked());
194202
Local<String> cons3 =
195-
String::Concat(cons2, FIXED_ONE_BYTE_STRING(isolate, "'"));
203+
String::Concat(isolate, cons2, FIXED_ONE_BYTE_STRING(isolate, "'"));
196204
e = Exception::Error(cons3);
197205
} else {
198206
e = Exception::Error(message);

src/node.cc

+2-2
Original file line numberDiff line numberDiff line change
@@ -1379,8 +1379,8 @@ static void DLOpen(const FunctionCallbackInfo<Value>& args) {
13791379
dlib.Close();
13801380
#ifdef _WIN32
13811381
// Windows needs to add the filename into the error message
1382-
errmsg = String::Concat(errmsg,
1383-
args[1]->ToString(context).ToLocalChecked());
1382+
errmsg = String::Concat(
1383+
env->isolate(), errmsg, args[1]->ToString(context).ToLocalChecked());
13841384
#endif // _WIN32
13851385
env->isolate()->ThrowException(Exception::Error(errmsg));
13861386
return;

src/node_api.cc

+8-6
Original file line numberDiff line numberDiff line change
@@ -1838,14 +1838,16 @@ static napi_status set_error_code(napi_env env,
18381838
if (!maybe_name.IsEmpty()) {
18391839
v8::Local<v8::Value> name = maybe_name.ToLocalChecked();
18401840
if (name->IsString()) {
1841-
name_string = v8::String::Concat(name_string, name.As<v8::String>());
1841+
name_string =
1842+
v8::String::Concat(isolate, name_string, name.As<v8::String>());
18421843
}
18431844
}
1844-
name_string = v8::String::Concat(name_string,
1845-
FIXED_ONE_BYTE_STRING(isolate, " ["));
1846-
name_string = v8::String::Concat(name_string, code_value.As<v8::String>());
1847-
name_string = v8::String::Concat(name_string,
1848-
FIXED_ONE_BYTE_STRING(isolate, "]"));
1845+
name_string = v8::String::Concat(
1846+
isolate, name_string, FIXED_ONE_BYTE_STRING(isolate, " ["));
1847+
name_string =
1848+
v8::String::Concat(isolate, name_string, code_value.As<v8::String>());
1849+
name_string = v8::String::Concat(
1850+
isolate, name_string, FIXED_ONE_BYTE_STRING(isolate, "]"));
18491851

18501852
set_maybe = err_object->Set(context, name_key, name_string);
18511853
RETURN_STATUS_IF_FALSE(env,

src/node_contextify.cc

+4-2
Original file line numberDiff line numberDiff line change
@@ -897,8 +897,10 @@ class ContextifyScript : public BaseObject {
897897
}
898898

899899
Local<String> decorated_stack = String::Concat(
900-
String::Concat(arrow.As<String>(),
901-
FIXED_ONE_BYTE_STRING(env->isolate(), "\n")),
900+
env->isolate(),
901+
String::Concat(env->isolate(),
902+
arrow.As<String>(),
903+
FIXED_ONE_BYTE_STRING(env->isolate(), "\n")),
902904
stack.As<String>());
903905
err_obj->Set(env->stack_string(), decorated_stack);
904906
err_obj->SetPrivate(

src/string_decoder.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ MaybeLocal<String> StringDecoder::DecodeData(Isolate* isolate,
226226
if (prepend.IsEmpty()) {
227227
return body;
228228
} else {
229-
return String::Concat(prepend, body);
229+
return String::Concat(isolate, prepend, body);
230230
}
231231
} else {
232232
CHECK(Encoding() == ASCII || Encoding() == HEX || Encoding() == LATIN1);

0 commit comments

Comments
 (0)