|  | //! Conversion of internal Rust compiler items to stable ones. | 
|  |  | 
|  | use rustc_abi::FieldIdx; | 
|  | use rustc_public_bridge::Tables; | 
|  | use rustc_public_bridge::context::CompilerCtxt; | 
|  |  | 
|  | use super::Stable; | 
|  | use crate::compiler_interface::BridgeTys; | 
|  |  | 
|  | mod abi; | 
|  | mod mir; | 
|  | mod ty; | 
|  |  | 
|  | impl<'tcx> Stable<'tcx> for rustc_hir::Safety { | 
|  | type T = crate::mir::Safety; | 
|  | fn stable(&self, _: &mut Tables<'_, BridgeTys>, _: &CompilerCtxt<'_, BridgeTys>) -> Self::T { | 
|  | match self { | 
|  | rustc_hir::Safety::Unsafe => crate::mir::Safety::Unsafe, | 
|  | rustc_hir::Safety::Safe => crate::mir::Safety::Safe, | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | impl<'tcx> Stable<'tcx> for FieldIdx { | 
|  | type T = usize; | 
|  | fn stable(&self, _: &mut Tables<'_, BridgeTys>, _: &CompilerCtxt<'_, BridgeTys>) -> Self::T { | 
|  | self.as_usize() | 
|  | } | 
|  | } | 
|  |  | 
|  | impl<'tcx> Stable<'tcx> for rustc_hir::CoroutineSource { | 
|  | type T = crate::mir::CoroutineSource; | 
|  | fn stable(&self, _: &mut Tables<'_, BridgeTys>, _: &CompilerCtxt<'_, BridgeTys>) -> Self::T { | 
|  | use rustc_hir::CoroutineSource; | 
|  | match self { | 
|  | CoroutineSource::Block => crate::mir::CoroutineSource::Block, | 
|  | CoroutineSource::Closure => crate::mir::CoroutineSource::Closure, | 
|  | CoroutineSource::Fn => crate::mir::CoroutineSource::Fn, | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | impl<'tcx> Stable<'tcx> for rustc_hir::CoroutineKind { | 
|  | type T = crate::mir::CoroutineKind; | 
|  | fn stable<'cx>( | 
|  | &self, | 
|  | tables: &mut Tables<'cx, BridgeTys>, | 
|  | cx: &CompilerCtxt<'cx, BridgeTys>, | 
|  | ) -> Self::T { | 
|  | use rustc_hir::{CoroutineDesugaring, CoroutineKind}; | 
|  | match *self { | 
|  | CoroutineKind::Desugared(CoroutineDesugaring::Async, source) => { | 
|  | crate::mir::CoroutineKind::Desugared( | 
|  | crate::mir::CoroutineDesugaring::Async, | 
|  | source.stable(tables, cx), | 
|  | ) | 
|  | } | 
|  | CoroutineKind::Desugared(CoroutineDesugaring::Gen, source) => { | 
|  | crate::mir::CoroutineKind::Desugared( | 
|  | crate::mir::CoroutineDesugaring::Gen, | 
|  | source.stable(tables, cx), | 
|  | ) | 
|  | } | 
|  | CoroutineKind::Coroutine(movability) => { | 
|  | crate::mir::CoroutineKind::Coroutine(movability.stable(tables, cx)) | 
|  | } | 
|  | CoroutineKind::Desugared(CoroutineDesugaring::AsyncGen, source) => { | 
|  | crate::mir::CoroutineKind::Desugared( | 
|  | crate::mir::CoroutineDesugaring::AsyncGen, | 
|  | source.stable(tables, cx), | 
|  | ) | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | impl<'tcx> Stable<'tcx> for rustc_span::Symbol { | 
|  | type T = crate::Symbol; | 
|  |  | 
|  | fn stable(&self, _: &mut Tables<'_, BridgeTys>, _: &CompilerCtxt<'_, BridgeTys>) -> Self::T { | 
|  | self.to_string() | 
|  | } | 
|  | } | 
|  |  | 
|  | impl<'tcx> Stable<'tcx> for rustc_span::Span { | 
|  | type T = crate::ty::Span; | 
|  |  | 
|  | fn stable<'cx>( | 
|  | &self, | 
|  | tables: &mut Tables<'cx, BridgeTys>, | 
|  | _: &CompilerCtxt<'cx, BridgeTys>, | 
|  | ) -> Self::T { | 
|  | tables.create_span(*self) | 
|  | } | 
|  | } |