From f72c031eb9a15f25834a7980008db764ff2867a0 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov 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 { - let me = panic::AssertUnwindSafe(self); - panic::catch_unwind(|| f(me.0)).map_err(|err| match err.downcast::() { + panic::catch_unwind(|| f(self)).map_err(|err| match err.downcast::() { 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>, } +impl panic::RefUnwindSafe for LocationIntener +where + ID: ArenaId + Clone, + LOC: Clone + Eq + Hash, + ID: panic::RefUnwindSafe, + LOC: panic::RefUnwindSafe, +{ +} + impl Default for LocationIntener where ID: ArenaId + Clone, -- cgit v1.2.3