/
githubmirror
/
servo
Обзор
Документация
Войти
/
githubmirror
/
servo
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
components/script_bindings/script_runtime.rs
42 строки
1 KB
Narfinger
script: Finish JSContextify, remove CanGc and CanGc reflect methods (#46333)
07 июл 2026, 13:23
Не верифицирован
07 июл 2026, 13:23
456a820
Код
Авторство
О чём код?
/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ use std::cell::Cell; use js::context::JSContext; use js::jsapi::JS::{HeapState, RuntimeHeapState}; thread_local!( static THREAD_ACTIVE: Cell<bool> = const { Cell::new(true) }; ); pub fn runtime_is_alive() -> bool { THREAD_ACTIVE.with(|t| t.get()) } /// Whether a GC collection is in progress. /// Mainly useful for (debug) assertions. pub fn during_gc_collection() -> bool { // SAFETY: `RuntimeHeapState` only reads thread-local runtime state and has no preconditions. matches!( unsafe { RuntimeHeapState() }, HeapState::MajorCollecting | HeapState::MinorCollecting ) } pub fn mark_runtime_dead() { THREAD_ACTIVE.with(|t| t.set(false)); } /// Get the current JSContext for the running thread. /// /// ## Safety /// Using this function is unsafe because no other JSContext may be constructed apart from initial ones, /// but because we are still working on passing down &mut SafeJSContext references, /// this function is provided as temporary workaround/placeholder. /// /// As such all it's usages will need to be eventually replaced with proper &mut SafeJSContext references. pub unsafe fn temp_cx() -> JSContext { unsafe { JSContext::from_ptr(js::rust::Runtime::get().unwrap()) } }