#ifndef V8_EXECUTION_EXECUTION_H_
#define V8_EXECUTION_EXECUTION_H_
#include "src/base/vector.h"
#include "src/common/globals.h"
namespace v8 {
namespace internal {
class MicrotaskQueue;
class Execution final : public AllStatic {
public:
enum class MessageHandling { kReport, kKeepPending };
enum class Target { kCallable, kRunMicrotasks };
V8_EXPORT_PRIVATE V8_WARN_UNUSED_RESULT static MaybeHandle<Object> Call(
Isolate* isolate, DirectHandle<Object> callable,
DirectHandle<Object> receiver,
base::Vector<const DirectHandle<Object>> args);
V8_EXPORT_PRIVATE V8_WARN_UNUSED_RESULT static MaybeHandle<Object> CallScript(
Isolate* isolate, DirectHandle<JSFunction> callable,
DirectHandle<Object> receiver, DirectHandle<Object> host_defined_options);
V8_WARN_UNUSED_RESULT static MaybeHandle<Object> CallBuiltin(
Isolate* isolate, DirectHandle<JSFunction> builtin,
DirectHandle<Object> receiver,
base::Vector<const DirectHandle<Object>> args);
V8_WARN_UNUSED_RESULT static MaybeDirectHandle<JSReceiver> New(
Isolate* isolate, DirectHandle<Object> constructor,
base::Vector<const DirectHandle<Object>> args);
V8_WARN_UNUSED_RESULT static MaybeDirectHandle<JSReceiver> New(
Isolate* isolate, DirectHandle<Object> constructor,
DirectHandle<Object> new_target,
base::Vector<const DirectHandle<Object>> args);
V8_EXPORT_PRIVATE static MaybeDirectHandle<Object> TryCall(
Isolate* isolate, DirectHandle<Object> callable,
DirectHandle<Object> receiver,
base::Vector<const DirectHandle<Object>> args,
MessageHandling message_handling,
MaybeDirectHandle<Object>* exception_out);
V8_EXPORT_PRIVATE static MaybeDirectHandle<Object> TryCallScript(
Isolate* isolate, DirectHandle<JSFunction> script_function,
DirectHandle<Object> receiver,
DirectHandle<FixedArray> host_defined_options);
static MaybeDirectHandle<Object> TryRunMicrotasks(
Isolate* isolate, MicrotaskQueue* microtask_queue);
#if V8_ENABLE_WEBASSEMBLY
V8_EXPORT_PRIVATE static void CallWasm(Isolate* isolate,
DirectHandle<Code> wrapper_code,
WasmCodePointer wasm_call_target,
DirectHandle<Object> object_ref,
Address packed_args);
#endif
};
}
}
#endif