Skip to content

Commit 45c8600

Browse files
anonrigRafaelGSS
authored andcommitted
url: overload canParse V8 fast api method
PR-URL: #48993 Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
1 parent 497df82 commit 45c8600

File tree

4 files changed

+11
-16
lines changed

4 files changed

+11
-16
lines changed

lib/internal/url.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -1046,9 +1046,11 @@ class URL {
10461046
url = `${url}`;
10471047

10481048
if (base !== undefined) {
1049-
return bindingUrl.canParseWithBase(url, `${base}`);
1049+
return bindingUrl.canParse(url, `${base}`);
10501050
}
10511051

1052+
// It is important to differentiate the canParse call statements
1053+
// since they resolve into different v8 fast api overloads.
10521054
return bindingUrl.canParse(url);
10531055
}
10541056
}

src/node_url.cc

+7-12
Original file line numberDiff line numberDiff line change
@@ -170,17 +170,15 @@ bool BindingData::FastCanParse(Local<Value> receiver,
170170
return ada::can_parse(std::string_view(input.data, input.length));
171171
}
172172

173-
CFunction BindingData::fast_can_parse_(CFunction::Make(FastCanParse));
174-
175173
bool BindingData::FastCanParseWithBase(Local<Value> receiver,
176174
const FastOneByteString& input,
177175
const FastOneByteString& base) {
178176
auto base_view = std::string_view(base.data, base.length);
179177
return ada::can_parse(std::string_view(input.data, input.length), &base_view);
180178
}
181179

182-
CFunction BindingData::fast_can_parse_with_base_(
183-
CFunction::Make(FastCanParseWithBase));
180+
CFunction BindingData::fast_can_parse_methods_[] = {
181+
CFunction::Make(FastCanParse), CFunction::Make(FastCanParseWithBase)};
184182

185183
void BindingData::Format(const FunctionCallbackInfo<Value>& args) {
186184
CHECK_GT(args.Length(), 4);
@@ -361,12 +359,7 @@ void BindingData::CreatePerIsolateProperties(IsolateData* isolate_data,
361359
SetMethod(isolate, target, "parse", Parse);
362360
SetMethod(isolate, target, "update", Update);
363361
SetFastMethodNoSideEffect(
364-
isolate, target, "canParse", CanParse, &fast_can_parse_);
365-
SetFastMethodNoSideEffect(isolate,
366-
target,
367-
"canParseWithBase",
368-
CanParse,
369-
&fast_can_parse_with_base_);
362+
isolate, target, "canParse", CanParse, {fast_can_parse_methods_, 2});
370363
}
371364

372365
void BindingData::CreatePerContextProperties(Local<Object> target,
@@ -387,9 +380,11 @@ void BindingData::RegisterExternalReferences(
387380
registry->Register(Update);
388381
registry->Register(CanParse);
389382
registry->Register(FastCanParse);
390-
registry->Register(fast_can_parse_.GetTypeInfo());
391383
registry->Register(FastCanParseWithBase);
392-
registry->Register(fast_can_parse_with_base_.GetTypeInfo());
384+
385+
for (const CFunction& method : fast_can_parse_methods_) {
386+
registry->Register(method.GetTypeInfo());
387+
}
393388
}
394389

395390
std::string FromFilePath(const std::string_view file_path) {

src/node_url.h

+1-2
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,7 @@ class BindingData : public SnapshotableObject {
7575
void UpdateComponents(const ada::url_components& components,
7676
const ada::scheme::type type);
7777

78-
static v8::CFunction fast_can_parse_;
79-
static v8::CFunction fast_can_parse_with_base_;
78+
static v8::CFunction fast_can_parse_methods_[];
8079
};
8180

8281
std::string FromFilePath(const std::string_view file_path);

typings/internalBinding/url.d.ts

-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ declare function InternalBinding(binding: 'url'): {
66
domainToASCII(input: string): string;
77
domainToUnicode(input: string): string;
88
canParse(input: string): boolean;
9-
canParseWithBase(input: string, base: string): boolean;
109
format(input: string, fragment?: boolean, unicode?: boolean, search?: boolean, auth?: boolean): string;
1110
parse(input: string, base?: string): string | false;
1211
update(input: string, actionType: typeof urlUpdateActions, value: string): string | false;

0 commit comments

Comments
 (0)