59 DCHECK(isolate->is_catchable_by_javascript(*rejection_error));
104 if (!isolate->is_catchable_by_javascript(exception)) {
118 const char kMethodName[] =
"AsyncDisposableStack";
123 if (!IsJSReceiver(*
args.new_target(), isolate)) {
125 isolate, NewTypeError(MessageTemplate::kConstructorNotFunction,
126 isolate->factory()->NewStringFromAsciiChecked(
138 target->native_context()->js_async_disposable_stack_function());
144 isolate->factory()->NewJSAsyncDisposableStack(map);
149 isolate, async_disposable_stack);
151 return *async_disposable_stack;
156 const char kMethodName[] =
"AsyncDisposableStack.prototype.use";
171 MessageTemplate::kDisposableStackIsDisposed,
172 isolate->factory()->NewStringFromAsciiChecked(kMethodName)));
185 isolate, async_disposable_stack,
196BUILTIN(AsyncDisposableStackPrototypeDisposeAsync) {
207 if (!IsJSAsyncDisposableStack(*
receiver)) {
211 isolate->factory()->NewTypeError(
212 MessageTemplate::kNotAnAsyncDisposableStack));
243 isolate, async_disposable_stack, promise),
249BUILTIN(AsyncDisposableStackPrototypeGetDisposed) {
250 const char kMethodName[] =
"get AsyncDisposableStack.prototype.disposed";
261 return *(isolate->factory()->ToBoolean(async_disposable_stack->state() ==
267 const char kMethodName[] =
"AsyncDisposableStack.prototype.adopt";
283 MessageTemplate::kDisposableStackIsDisposed,
284 isolate->factory()->NewStringFromAsciiChecked(kMethodName)));
288 if (!IsCallable(*on_dispose_async)) {
290 isolate, NewTypeError(MessageTemplate::kNotCallable, on_dispose_async));
314 const char kMethodName[] =
"AsyncDisposableStack.prototype.defer";
329 MessageTemplate::kDisposableStackIsDisposed,
330 isolate->factory()->NewStringFromAsciiChecked(kMethodName)));
334 if (!IsCallable(*on_dispose_async)) {
336 isolate, NewTypeError(MessageTemplate::kNotCallable, on_dispose_async));
343 isolate, async_disposable_stack, isolate->factory()->undefined_value(),
353 const char kMethodName[] =
"AsyncDisposableStack.prototype.move";
367 MessageTemplate::kDisposableStackIsDisposed,
368 isolate->factory()->NewStringFromAsciiChecked(kMethodName)));
379 Context::JS_ASYNC_DISPOSABLE_STACK_FUNCTION_INDEX));
383 isolate->factory()->NewJSAsyncDisposableStack(map);
387 new_async_disposable_stack->set_stack(async_disposable_stack->stack());
388 new_async_disposable_stack->set_length(async_disposable_stack->length());
390 new_async_disposable_stack->set_error(
391 *(isolate->factory()->uninitialized_value()));
395 async_disposable_stack->set_stack(
ReadOnlyRoots(isolate).empty_fixed_array());
396 async_disposable_stack->set_length(0);
397 async_disposable_stack->set_error(
398 *(isolate->factory()->uninitialized_value()));
404 return *new_async_disposable_stack;
#define CHECK_RECEIVER(Type, name, method)
@ kExplicitResourceManagement
void SetVerbose(bool value)
void SetCaptureMessage(bool value)
V8_EXPORT_PRIVATE static V8_WARN_UNUSED_RESULT MaybeHandle< Object > Call(Isolate *isolate, DirectHandle< Object > callable, DirectHandle< Object > receiver, base::Vector< const DirectHandle< Object > > args)
static Maybe< bool > NextDisposeAsyncIteration(Isolate *isolate, DirectHandle< JSDisposableStackBase > async_disposable_stack, DirectHandle< JSPromise > outer_promise)
static void InitializeJSDisposableStackBase(Isolate *isolate, DirectHandle< JSDisposableStackBase > stack)
static void HandleErrorInDisposal(Isolate *isolate, DirectHandle< JSDisposableStackBase > disposable_stack, DirectHandle< Object > current_error, DirectHandle< Object > current_error_message)
AsyncDisposableStackContextSlots
static void Add(Isolate *isolate, DirectHandle< JSDisposableStackBase > disposable_stack, DirectHandle< Object > value, DirectHandle< Object > method, DisposeMethodCallType type, DisposeMethodHint hint)
static MaybeDirectHandle< Object > CheckValueAndGetDisposeMethod(Isolate *isolate, DirectHandle< JSAny > value, DisposeMethodHint hint)
AsyncDisposeFromSyncDisposeContextSlots
static V8_EXPORT_PRIVATE V8_WARN_UNUSED_RESULT MaybeHandle< Map > GetDerivedMap(Isolate *isolate, DirectHandle< JSFunction > constructor, DirectHandle< JSReceiver > new_target)
static Handle< Object > Reject(DirectHandle< JSPromise > promise, DirectHandle< Object > reason, bool debug_event=true)
static V8_WARN_UNUSED_RESULT MaybeHandle< Object > Resolve(DirectHandle< JSPromise > promise, DirectHandle< Object > resolution)
#define ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, dst, call)
#define THROW_NEW_ERROR_RETURN_FAILURE(isolate, call)
#define MAYBE_RETURN(call, value)
base::Vector< const DirectHandle< Object > > args
DirectHandle< Object > new_target
ZoneVector< RpoNumber > & result
ZoneStack< RpoNumber > & stack
V8_INLINE DirectHandle< T > direct_handle(Tagged< T > object, Isolate *isolate)
bool IsNullOrUndefined(Tagged< Object > obj, Isolate *isolate)
Tagged< To > Cast(Tagged< From > value, const v8::SourceLocation &loc=INIT_SOURCE_LOCATION_IN_DEBUG)
#define DCHECK(condition)
#define DCHECK_EQ(v1, v2)