Commit 0a3dbeca authored by Toon Verwaest's avatar Toon Verwaest Committed by V8 LUCI CQ

[api] Drop target from FunctionCallbackArguments

This was already removed as part of the lazy api accessor work, but
was never cleaned up throughout v8.

Change-Id: I00621d0e0f33c58efaed0f6b55cd22f1f8803825
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3735131Reviewed-by: 's avatarLeszek Swirski <leszeks@chromium.org>
Commit-Queue: Leszek Swirski <leszeks@chromium.org>
Auto-Submit: Toon Verwaest <verwaest@chromium.org>
Cr-Commit-Position: refs/heads/main@{#81481}
parent 77328cd7
...@@ -38,8 +38,7 @@ PropertyCallbackArguments::PropertyCallbackArguments( ...@@ -38,8 +38,7 @@ PropertyCallbackArguments::PropertyCallbackArguments(
} }
FunctionCallbackArguments::FunctionCallbackArguments( FunctionCallbackArguments::FunctionCallbackArguments(
internal::Isolate* isolate, internal::Object data, internal::Isolate* isolate, internal::Object data, internal::Object holder,
internal::HeapObject callee, internal::Object holder,
internal::HeapObject new_target, internal::Address* argv, int argc) internal::HeapObject new_target, internal::Address* argv, int argc)
: Super(isolate), argv_(argv), argc_(argc) { : Super(isolate), argv_(argv), argc_(argc) {
slot_at(T::kDataIndex).store(data); slot_at(T::kDataIndex).store(data);
......
...@@ -187,9 +187,8 @@ class FunctionCallbackArguments ...@@ -187,9 +187,8 @@ class FunctionCallbackArguments
static const int kIsolateIndex = T::kIsolateIndex; static const int kIsolateIndex = T::kIsolateIndex;
static const int kNewTargetIndex = T::kNewTargetIndex; static const int kNewTargetIndex = T::kNewTargetIndex;
FunctionCallbackArguments(Isolate* isolate, Object data, HeapObject callee, FunctionCallbackArguments(Isolate* isolate, Object data, Object holder,
Object holder, HeapObject new_target, Address* argv, HeapObject new_target, Address* argv, int argc);
int argc);
/* /*
* The following Call function wraps the calling of all callbacks to handle * The following Call function wraps the calling of all callbacks to handle
......
...@@ -49,9 +49,9 @@ JSReceiver GetCompatibleReceiver(Isolate* isolate, FunctionTemplateInfo info, ...@@ -49,9 +49,9 @@ JSReceiver GetCompatibleReceiver(Isolate* isolate, FunctionTemplateInfo info,
template <bool is_construct> template <bool is_construct>
V8_WARN_UNUSED_RESULT MaybeHandle<Object> HandleApiCallHelper( V8_WARN_UNUSED_RESULT MaybeHandle<Object> HandleApiCallHelper(
Isolate* isolate, Handle<HeapObject> function, Isolate* isolate, Handle<HeapObject> new_target,
Handle<HeapObject> new_target, Handle<FunctionTemplateInfo> fun_data, Handle<FunctionTemplateInfo> fun_data, Handle<Object> receiver,
Handle<Object> receiver, BuiltinArguments args) { BuiltinArguments args) {
Handle<JSReceiver> js_receiver; Handle<JSReceiver> js_receiver;
JSReceiver raw_holder; JSReceiver raw_holder;
base::Optional<BuiltinArguments::ChangeValueScope> set_receiver_value_scope; base::Optional<BuiltinArguments::ChangeValueScope> set_receiver_value_scope;
...@@ -108,9 +108,9 @@ V8_WARN_UNUSED_RESULT MaybeHandle<Object> HandleApiCallHelper( ...@@ -108,9 +108,9 @@ V8_WARN_UNUSED_RESULT MaybeHandle<Object> HandleApiCallHelper(
CallHandlerInfo call_data = CallHandlerInfo::cast(raw_call_data); CallHandlerInfo call_data = CallHandlerInfo::cast(raw_call_data);
Object data_obj = call_data.data(); Object data_obj = call_data.data();
FunctionCallbackArguments custom( FunctionCallbackArguments custom(isolate, data_obj, raw_holder, *new_target,
isolate, data_obj, *function, raw_holder, *new_target, args.address_of_first_argument(),
args.address_of_first_argument(), args.length() - 1); args.length() - 1);
Handle<Object> result = custom.Call(call_data); Handle<Object> result = custom.Call(call_data);
RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object); RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object);
...@@ -131,19 +131,18 @@ V8_WARN_UNUSED_RESULT MaybeHandle<Object> HandleApiCallHelper( ...@@ -131,19 +131,18 @@ V8_WARN_UNUSED_RESULT MaybeHandle<Object> HandleApiCallHelper(
BUILTIN(HandleApiCall) { BUILTIN(HandleApiCall) {
HandleScope scope(isolate); HandleScope scope(isolate);
Handle<JSFunction> function = args.target();
Handle<Object> receiver = args.receiver(); Handle<Object> receiver = args.receiver();
Handle<HeapObject> new_target = args.new_target(); Handle<HeapObject> new_target = args.new_target();
Handle<FunctionTemplateInfo> fun_data(function->shared().get_api_func_data(), Handle<FunctionTemplateInfo> fun_data(
isolate); args.target()->shared().get_api_func_data(), isolate);
if (new_target->IsJSReceiver()) { if (new_target->IsJSReceiver()) {
RETURN_RESULT_OR_FAILURE( RETURN_RESULT_OR_FAILURE(
isolate, HandleApiCallHelper<true>(isolate, function, new_target, isolate, HandleApiCallHelper<true>(isolate, new_target, fun_data,
fun_data, receiver, args)); receiver, args));
} else { } else {
RETURN_RESULT_OR_FAILURE( RETURN_RESULT_OR_FAILURE(
isolate, HandleApiCallHelper<false>(isolate, function, new_target, isolate, HandleApiCallHelper<false>(isolate, new_target, fun_data,
fun_data, receiver, args)); receiver, args));
} }
} }
...@@ -166,37 +165,22 @@ class RelocatableArguments : public BuiltinArguments, public Relocatable { ...@@ -166,37 +165,22 @@ class RelocatableArguments : public BuiltinArguments, public Relocatable {
} // namespace } // namespace
MaybeHandle<Object> Builtins::InvokeApiFunction(Isolate* isolate, MaybeHandle<Object> Builtins::InvokeApiFunction(
bool is_construct, Isolate* isolate, bool is_construct, Handle<FunctionTemplateInfo> function,
Handle<HeapObject> function, Handle<Object> receiver, int argc, Handle<Object> args[],
Handle<Object> receiver, Handle<HeapObject> new_target) {
int argc, Handle<Object> args[],
Handle<HeapObject> new_target) {
RCS_SCOPE(isolate, RuntimeCallCounterId::kInvokeApiFunction); RCS_SCOPE(isolate, RuntimeCallCounterId::kInvokeApiFunction);
DCHECK(function->IsFunctionTemplateInfo() ||
(function->IsJSFunction() &&
JSFunction::cast(*function).shared().IsApiFunction()));
// Do proper receiver conversion for non-strict mode api functions. // Do proper receiver conversion for non-strict mode api functions.
if (!is_construct && !receiver->IsJSReceiver()) { if (!is_construct && !receiver->IsJSReceiver()) {
if (function->IsFunctionTemplateInfo() || ASSIGN_RETURN_ON_EXCEPTION(
is_sloppy(JSFunction::cast(*function).shared().language_mode())) { isolate, receiver, Object::ConvertReceiver(isolate, receiver), Object);
ASSIGN_RETURN_ON_EXCEPTION(isolate, receiver,
Object::ConvertReceiver(isolate, receiver),
Object);
}
} }
// We assume that all lazy accessor pairs have been instantiated when setting // We assume that all lazy accessor pairs have been instantiated when setting
// a break point on any API function. // a break point on any API function.
DCHECK_IMPLIES(function->IsFunctionTemplateInfo(), DCHECK(!Handle<FunctionTemplateInfo>::cast(function)->BreakAtEntry());
!Handle<FunctionTemplateInfo>::cast(function)->BreakAtEntry());
Handle<FunctionTemplateInfo> fun_data =
function->IsFunctionTemplateInfo()
? Handle<FunctionTemplateInfo>::cast(function)
: handle(JSFunction::cast(*function).shared().get_api_func_data(),
isolate);
// Construct BuiltinArguments object: // Construct BuiltinArguments object:
// new target, function, arguments reversed, receiver. // new target, function, arguments reversed, receiver.
const int kBufferSize = 32; const int kBufferSize = 32;
...@@ -209,7 +193,7 @@ MaybeHandle<Object> Builtins::InvokeApiFunction(Isolate* isolate, ...@@ -209,7 +193,7 @@ MaybeHandle<Object> Builtins::InvokeApiFunction(Isolate* isolate,
argv = new Address[frame_argc]; argv = new Address[frame_argc];
} }
argv[BuiltinArguments::kNewTargetOffset] = new_target->ptr(); argv[BuiltinArguments::kNewTargetOffset] = new_target->ptr();
argv[BuiltinArguments::kTargetOffset] = function->ptr(); argv[BuiltinArguments::kTargetOffset] = Smi::FromInt(0).ptr();
argv[BuiltinArguments::kArgcOffset] = Smi::FromInt(frame_argc).ptr(); argv[BuiltinArguments::kArgcOffset] = Smi::FromInt(frame_argc).ptr();
argv[BuiltinArguments::kPaddingOffset] = argv[BuiltinArguments::kPaddingOffset] =
ReadOnlyRoots(isolate).the_hole_value().ptr(); ReadOnlyRoots(isolate).the_hole_value().ptr();
...@@ -222,11 +206,11 @@ MaybeHandle<Object> Builtins::InvokeApiFunction(Isolate* isolate, ...@@ -222,11 +206,11 @@ MaybeHandle<Object> Builtins::InvokeApiFunction(Isolate* isolate,
{ {
RelocatableArguments arguments(isolate, frame_argc, &argv[frame_argc - 1]); RelocatableArguments arguments(isolate, frame_argc, &argv[frame_argc - 1]);
if (is_construct) { if (is_construct) {
result = HandleApiCallHelper<true>(isolate, function, new_target, result = HandleApiCallHelper<true>(isolate, new_target, function,
fun_data, receiver, arguments); receiver, arguments);
} else { } else {
result = HandleApiCallHelper<false>(isolate, function, new_target, result = HandleApiCallHelper<false>(isolate, new_target, function,
fun_data, receiver, arguments); receiver, arguments);
} }
} }
if (argv != small_argv) delete[] argv; if (argv != small_argv) delete[] argv;
...@@ -269,9 +253,9 @@ V8_WARN_UNUSED_RESULT static Object HandleApiCallAsFunctionOrConstructor( ...@@ -269,9 +253,9 @@ V8_WARN_UNUSED_RESULT static Object HandleApiCallAsFunctionOrConstructor(
Object result; Object result;
{ {
HandleScope scope(isolate); HandleScope scope(isolate);
FunctionCallbackArguments custom( FunctionCallbackArguments custom(isolate, call_data.data(), obj, new_target,
isolate, call_data.data(), constructor, obj, new_target, args.address_of_first_argument(),
args.address_of_first_argument(), args.length() - 1); args.length() - 1);
Handle<Object> result_handle = custom.Call(call_data); Handle<Object> result_handle = custom.Call(call_data);
if (result_handle.is_null()) { if (result_handle.is_null()) {
result = ReadOnlyRoots(isolate).undefined_value(); result = ReadOnlyRoots(isolate).undefined_value();
......
...@@ -208,9 +208,9 @@ class Builtins { ...@@ -208,9 +208,9 @@ class Builtins {
} }
V8_WARN_UNUSED_RESULT static MaybeHandle<Object> InvokeApiFunction( V8_WARN_UNUSED_RESULT static MaybeHandle<Object> InvokeApiFunction(
Isolate* isolate, bool is_construct, Handle<HeapObject> function, Isolate* isolate, bool is_construct,
Handle<Object> receiver, int argc, Handle<Object> args[], Handle<FunctionTemplateInfo> function, Handle<Object> receiver, int argc,
Handle<HeapObject> new_target); Handle<Object> args[], Handle<HeapObject> new_target);
static void Generate_Adaptor(MacroAssembler* masm, Address builtin_address); static void Generate_Adaptor(MacroAssembler* masm, Address builtin_address);
......
...@@ -318,8 +318,10 @@ V8_WARN_UNUSED_RESULT MaybeHandle<Object> Invoke(Isolate* isolate, ...@@ -318,8 +318,10 @@ V8_WARN_UNUSED_RESULT MaybeHandle<Object> Invoke(Isolate* isolate,
Handle<Object> receiver = params.is_construct Handle<Object> receiver = params.is_construct
? isolate->factory()->the_hole_value() ? isolate->factory()->the_hole_value()
: params.receiver; : params.receiver;
Handle<FunctionTemplateInfo> fun_data(
function->shared().get_api_func_data(), isolate);
auto value = Builtins::InvokeApiFunction( auto value = Builtins::InvokeApiFunction(
isolate, params.is_construct, function, receiver, params.argc, isolate, params.is_construct, fun_data, receiver, params.argc,
params.argv, Handle<HeapObject>::cast(params.new_target)); params.argv, Handle<HeapObject>::cast(params.new_target));
bool has_exception = value.is_null(); bool has_exception = value.is_null();
DCHECK(has_exception == isolate->has_pending_exception()); DCHECK(has_exception == isolate->has_pending_exception());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment