url: overload canParse V8 fast api method

PR-URL: https://github.com/nodejs/node/pull/48993
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
This commit is contained in:
Yagiz Nizipli 2023-08-01 18:06:08 -04:00 committed by Node.js GitHub Bot
parent 4cf30df026
commit 607a545904
4 changed files with 11 additions and 16 deletions

View File

@ -1054,9 +1054,11 @@ class URL {
url = `${url}`;
if (base !== undefined) {
return bindingUrl.canParseWithBase(url, `${base}`);
return bindingUrl.canParse(url, `${base}`);
}
// It is important to differentiate the canParse call statements
// since they resolve into different v8 fast api overloads.
return bindingUrl.canParse(url);
}
}

View File

@ -170,8 +170,6 @@ bool BindingData::FastCanParse(Local<Value> receiver,
return ada::can_parse(std::string_view(input.data, input.length));
}
CFunction BindingData::fast_can_parse_(CFunction::Make(FastCanParse));
bool BindingData::FastCanParseWithBase(Local<Value> receiver,
const FastOneByteString& input,
const FastOneByteString& base) {
@ -179,8 +177,8 @@ bool BindingData::FastCanParseWithBase(Local<Value> receiver,
return ada::can_parse(std::string_view(input.data, input.length), &base_view);
}
CFunction BindingData::fast_can_parse_with_base_(
CFunction::Make(FastCanParseWithBase));
CFunction BindingData::fast_can_parse_methods_[] = {
CFunction::Make(FastCanParse), CFunction::Make(FastCanParseWithBase)};
void BindingData::Format(const FunctionCallbackInfo<Value>& args) {
CHECK_GT(args.Length(), 4);
@ -361,12 +359,7 @@ void BindingData::CreatePerIsolateProperties(IsolateData* isolate_data,
SetMethod(isolate, target, "parse", Parse);
SetMethod(isolate, target, "update", Update);
SetFastMethodNoSideEffect(
isolate, target, "canParse", CanParse, &fast_can_parse_);
SetFastMethodNoSideEffect(isolate,
target,
"canParseWithBase",
CanParse,
&fast_can_parse_with_base_);
isolate, target, "canParse", CanParse, {fast_can_parse_methods_, 2});
}
void BindingData::CreatePerContextProperties(Local<Object> target,
@ -387,9 +380,11 @@ void BindingData::RegisterExternalReferences(
registry->Register(Update);
registry->Register(CanParse);
registry->Register(FastCanParse);
registry->Register(fast_can_parse_.GetTypeInfo());
registry->Register(FastCanParseWithBase);
registry->Register(fast_can_parse_with_base_.GetTypeInfo());
for (const CFunction& method : fast_can_parse_methods_) {
registry->Register(method.GetTypeInfo());
}
}
std::string FromFilePath(const std::string_view file_path) {

View File

@ -75,8 +75,7 @@ class BindingData : public SnapshotableObject {
void UpdateComponents(const ada::url_components& components,
const ada::scheme::type type);
static v8::CFunction fast_can_parse_;
static v8::CFunction fast_can_parse_with_base_;
static v8::CFunction fast_can_parse_methods_[];
};
std::string FromFilePath(const std::string_view file_path);

View File

@ -6,7 +6,6 @@ declare function InternalBinding(binding: 'url'): {
domainToASCII(input: string): string;
domainToUnicode(input: string): string;
canParse(input: string): boolean;
canParseWithBase(input: string, base: string): boolean;
format(input: string, fragment?: boolean, unicode?: boolean, search?: boolean, auth?: boolean): string;
parse(input: string, base?: string): string | false;
update(input: string, actionType: typeof urlUpdateActions, value: string): string | false;