blob: add52fc18caaa3cc5238a62d655de834431ec8b4 [file] [log] [blame]
//! 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)
}
}