aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_db
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2019-05-18 11:04:09 +0100
committerAleksey Kladov <[email protected]>2019-05-18 11:05:42 +0100
commitfcffa6ba6bfc8647a8f3aa858b05981d12a6e74f (patch)
tree059bd1a8b2fb0e96b1940f25de1f11c3cb35aa7f /crates/ra_db
parentf7112371ee646d8ecc68861e9fe832af9729878e (diff)
Assert that DB is unwind-safe, instead of proving
Unfortunately, that `: RefUnwindSafe` bound gives rustc a hard time, so let's remove it for know. See * https://github.com/rust-analyzer/rust-analyzer/issues/1283 * https://github.com/rust-lang/rust/pull/60444 * https://github.com/rust-lang/rust/issues/58291 closes #1283
Diffstat (limited to 'crates/ra_db')
-rw-r--r--crates/ra_db/src/lib.rs7
1 files changed, 4 insertions, 3 deletions
diff --git a/crates/ra_db/src/lib.rs b/crates/ra_db/src/lib.rs
index 1cd400752..bf567721a 100644
--- a/crates/ra_db/src/lib.rs
+++ b/crates/ra_db/src/lib.rs
@@ -15,7 +15,7 @@ pub use crate::{
15 }, 15 },
16}; 16};
17 17
18pub trait CheckCanceled: panic::RefUnwindSafe { 18pub trait CheckCanceled {
19 /// Aborts current query if there are pending changes. 19 /// Aborts current query if there are pending changes.
20 /// 20 ///
21 /// rust-analyzer needs to be able to answer semantic questions about the 21 /// rust-analyzer needs to be able to answer semantic questions about the
@@ -36,14 +36,15 @@ pub trait CheckCanceled: panic::RefUnwindSafe {
36 Self: Sized, 36 Self: Sized,
37 F: FnOnce(&Self) -> T + panic::UnwindSafe, 37 F: FnOnce(&Self) -> T + panic::UnwindSafe,
38 { 38 {
39 panic::catch_unwind(|| f(self)).map_err(|err| match err.downcast::<Canceled>() { 39 let this = panic::AssertUnwindSafe(self);
40 panic::catch_unwind(|| f(*this)).map_err(|err| match err.downcast::<Canceled>() {
40 Ok(canceled) => *canceled, 41 Ok(canceled) => *canceled,
41 Err(payload) => panic::resume_unwind(payload), 42 Err(payload) => panic::resume_unwind(payload),
42 }) 43 })
43 } 44 }
44} 45}
45 46
46impl<T: salsa::Database + panic::RefUnwindSafe> CheckCanceled for T { 47impl<T: salsa::Database> CheckCanceled for T {
47 fn check_canceled(&self) { 48 fn check_canceled(&self) {
48 if self.salsa_runtime().is_current_revision_canceled() { 49 if self.salsa_runtime().is_current_revision_canceled() {
49 Canceled::throw() 50 Canceled::throw()