mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-01 14:21:44 +00:00
unwind on cancel
This commit is contained in:
parent
c2b8aa1ce5
commit
cf20ecae9f
3 changed files with 20 additions and 11 deletions
|
@ -5,6 +5,8 @@ mod input;
|
|||
mod loc2id;
|
||||
pub mod mock;
|
||||
|
||||
use std::panic;
|
||||
|
||||
use ra_syntax::{TextUnit, TextRange, SourceFile, TreePtr};
|
||||
|
||||
pub use crate::{
|
||||
|
@ -18,13 +20,21 @@ pub use crate::{
|
|||
loc2id::LocationIntener,
|
||||
};
|
||||
|
||||
pub trait BaseDatabase: salsa::Database {
|
||||
pub trait BaseDatabase: salsa::Database + panic::RefUnwindSafe {
|
||||
fn check_canceled(&self) -> Cancelable<()> {
|
||||
if self.salsa_runtime().is_current_revision_canceled() {
|
||||
Err(Canceled::new())
|
||||
} else {
|
||||
Ok(())
|
||||
}
|
||||
self.salsa_runtime()
|
||||
.unwind_if_current_revision_is_canceled();
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn catch_canceled<F: FnOnce(&Self) -> T + panic::UnwindSafe, T>(
|
||||
&self,
|
||||
f: F,
|
||||
) -> Result<T, Canceled> {
|
||||
panic::catch_unwind(|| f(self)).map_err(|err| match err.downcast::<salsa::Canceled>() {
|
||||
Ok(_) => Canceled::new(),
|
||||
Err(payload) => panic::resume_unwind(payload),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue