/
githubmirror
/
deno
Обзор
Документация
Войти
/
githubmirror
/
deno
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
libs/ops/op2/test_cases/async/async_stack_trace.out
94 строки
4 KB
Nathan Whitaker
perf(core): reduce native callback snapshot overhead (#35121)
11 июн 2026, 07:21
Не верифицирован
11 июн 2026, 07:21
1eebdde
Код
Авторство
О чём код?
#[allow(non_camel_case_types)] pub const fn op_async_stack_trace() -> ::deno_core::_ops::OpDecl { #[allow(non_camel_case_types)] pub struct op_async_stack_trace { _unconstructable: ::std::marker::PhantomData<()>, } impl ::deno_core::_ops::Op for op_async_stack_trace { const NAME: &'static str = stringify!(op_async_stack_trace); const DECL: ::deno_core::_ops::OpDecl = ::deno_core::_ops::OpDecl::new_internal_op2( ::deno_core::__op_name_fast!(op_async_stack_trace), true, false, false, 1usize as u8, false, false, Self::v8_fn_ptr as _, Self::slow_function_impl, ::deno_core::AccessorType::None, None, None, ::deno_core::OpMetadata { ..::deno_core::OpMetadata::default() }, ); } impl op_async_stack_trace { pub const fn name() -> &'static str { <Self as deno_core::_ops::Op>::NAME } fn slow_function_impl<'s>( info: *const deno_core::v8::FunctionCallbackInfo, ) -> usize { let info: &'s _ = unsafe { &*info }; #[cfg(debug_assertions)] let _reentrancy_check_guard = deno_core::_ops::reentrancy_check( &<Self as deno_core::_ops::Op>::DECL, ); let parts: deno_core::v8::FunctionCallbackInfoParts<'s> = info.get_parts(); let scope = ::std::pin::pin!( unsafe { deno_core::v8::CallbackScope::new(info) } ); let mut scope = scope.init(); let mut rv = parts.return_value; let args = deno_core::v8::FunctionCallbackArguments::from_function_callback_info_parts( info, &parts, ); let opctx: &'s _ = unsafe { &*(deno_core::v8::Local::< deno_core::v8::External, >::cast_unchecked(args.data()) .value() as *const deno_core::_ops::OpCtx) }; let opstate = &opctx.state; if opctx.enable_stack_trace { let stack_trace_msg = deno_core::v8::String::empty(&mut scope); let stack_trace_error = deno_core::v8::Exception::error( &mut scope, stack_trace_msg.into(), ); let js_error = deno_core::error::JsError::from_v8_exception( &mut scope, stack_trace_error, ); let mut op_state = ::std::cell::RefCell::borrow_mut(&opstate); op_state.op_stack_trace_callback.as_ref().unwrap()(js_error.frames) } let result = { Self::call() }; let promise_id = deno_core::_ops::to_i32_option(&args.get(0)) .unwrap_or_default(); if let Some(result) = deno_core::_ops::map_async_op_infallible( opctx, false, false, promise_id, result, |scope, result| { Ok(deno_core::_ops::RustToV8::to_v8(result, scope)) }, ) { deno_core::_ops::RustToV8RetVal::to_v8_rv(result, &mut rv); return 0; } return 2; } extern "C" fn v8_fn_ptr(info: *const deno_core::v8::FunctionCallbackInfo) { Self::slow_function_impl(info); } } impl op_async_stack_trace { #[allow(clippy::too_many_arguments)] pub async fn call() {} } <op_async_stack_trace as ::deno_core::_ops::Op>::DECL }