From f72c031eb9a15f25834a7980008db764ff2867a0 Mon Sep 17 00:00:00 2001
From: Aleksey Kladov <aleksey.kladov@gmail.com>
Date: Thu, 10 Jan 2019 13:04:04 +0300
Subject: implement RefUnwindSafe

---
 crates/ra_db/src/lib.rs    |  5 ++---
 crates/ra_db/src/loc2id.rs | 11 ++++++++++-
 2 files changed, 12 insertions(+), 4 deletions(-)

(limited to 'crates/ra_db')

diff --git a/crates/ra_db/src/lib.rs b/crates/ra_db/src/lib.rs
index 00d2d5ae9..20e712afe 100644
--- a/crates/ra_db/src/lib.rs
+++ b/crates/ra_db/src/lib.rs
@@ -20,7 +20,7 @@ pub use crate::{
     loc2id::LocationIntener,
 };
 
-pub trait BaseDatabase: salsa::Database {
+pub trait BaseDatabase: salsa::Database + panic::RefUnwindSafe {
     fn check_canceled(&self) -> Cancelable<()> {
         self.salsa_runtime()
             .if_current_revision_is_canceled(Canceled::throw);
@@ -31,8 +31,7 @@ pub trait BaseDatabase: salsa::Database {
         &self,
         f: F,
     ) -> Result<T, Canceled> {
-        let me = panic::AssertUnwindSafe(self);
-        panic::catch_unwind(|| f(me.0)).map_err(|err| match err.downcast::<Canceled>() {
+        panic::catch_unwind(|| f(self)).map_err(|err| match err.downcast::<Canceled>() {
             Ok(canceled) => *canceled,
             Err(payload) => panic::resume_unwind(payload),
         })
diff --git a/crates/ra_db/src/loc2id.rs b/crates/ra_db/src/loc2id.rs
index 254c52629..359cd893d 100644
--- a/crates/ra_db/src/loc2id.rs
+++ b/crates/ra_db/src/loc2id.rs
@@ -1,4 +1,4 @@
-use std::hash::Hash;
+use std::{panic, hash::Hash};
 
 use parking_lot::Mutex;
 use rustc_hash::FxHashMap;
@@ -70,6 +70,15 @@ where
     map: Mutex<Loc2IdMap<LOC, ID>>,
 }
 
+impl<LOC, ID> panic::RefUnwindSafe for LocationIntener<LOC, ID>
+where
+    ID: ArenaId + Clone,
+    LOC: Clone + Eq + Hash,
+    ID: panic::RefUnwindSafe,
+    LOC: panic::RefUnwindSafe,
+{
+}
+
 impl<LOC, ID> Default for LocationIntener<LOC, ID>
 where
     ID: ArenaId + Clone,
-- 
cgit v1.2.3