Move impl
blocks out of rustc_middle/src/mir/syntax.rs
.
As the comment at the top says, this file is not supposed to contain any code. But some has crept in. This commit moves it out.
This commit is contained in:
parent
b522e7c5ea
commit
1eddb158f9
4 changed files with 106 additions and 112 deletions
|
@ -96,6 +96,17 @@ impl<'tcx> HasLocalDecls<'tcx> for Body<'tcx> {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl MirPhase {
|
impl MirPhase {
|
||||||
|
pub fn name(&self) -> &'static str {
|
||||||
|
match *self {
|
||||||
|
MirPhase::Built => "built",
|
||||||
|
MirPhase::Analysis(AnalysisPhase::Initial) => "analysis",
|
||||||
|
MirPhase::Analysis(AnalysisPhase::PostCleanup) => "analysis-post-cleanup",
|
||||||
|
MirPhase::Runtime(RuntimePhase::Initial) => "runtime",
|
||||||
|
MirPhase::Runtime(RuntimePhase::PostCleanup) => "runtime-post-cleanup",
|
||||||
|
MirPhase::Runtime(RuntimePhase::Optimized) => "runtime-optimized",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Gets the (dialect, phase) index of the current `MirPhase`. Both numbers
|
/// Gets the (dialect, phase) index of the current `MirPhase`. Both numbers
|
||||||
/// are 1-indexed.
|
/// are 1-indexed.
|
||||||
pub fn index(&self) -> (usize, usize) {
|
pub fn index(&self) -> (usize, usize) {
|
||||||
|
|
|
@ -25,6 +25,26 @@ impl Statement<'_> {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'tcx> StatementKind<'tcx> {
|
impl<'tcx> StatementKind<'tcx> {
|
||||||
|
/// Returns a simple string representation of a `StatementKind` variant, independent of any
|
||||||
|
/// values it might hold (e.g. `StatementKind::Assign` always returns `"Assign"`).
|
||||||
|
pub const fn name(&self) -> &'static str {
|
||||||
|
match self {
|
||||||
|
StatementKind::Assign(..) => "Assign",
|
||||||
|
StatementKind::FakeRead(..) => "FakeRead",
|
||||||
|
StatementKind::SetDiscriminant { .. } => "SetDiscriminant",
|
||||||
|
StatementKind::Deinit(..) => "Deinit",
|
||||||
|
StatementKind::StorageLive(..) => "StorageLive",
|
||||||
|
StatementKind::StorageDead(..) => "StorageDead",
|
||||||
|
StatementKind::Retag(..) => "Retag",
|
||||||
|
StatementKind::PlaceMention(..) => "PlaceMention",
|
||||||
|
StatementKind::AscribeUserType(..) => "AscribeUserType",
|
||||||
|
StatementKind::Coverage(..) => "Coverage",
|
||||||
|
StatementKind::Intrinsic(..) => "Intrinsic",
|
||||||
|
StatementKind::ConstEvalCounter => "ConstEvalCounter",
|
||||||
|
StatementKind::Nop => "Nop",
|
||||||
|
StatementKind::BackwardIncompatibleDropHint { .. } => "BackwardIncompatibleDropHint",
|
||||||
|
}
|
||||||
|
}
|
||||||
pub fn as_assign_mut(&mut self) -> Option<&mut (Place<'tcx>, Rvalue<'tcx>)> {
|
pub fn as_assign_mut(&mut self) -> Option<&mut (Place<'tcx>, Rvalue<'tcx>)> {
|
||||||
match self {
|
match self {
|
||||||
StatementKind::Assign(x) => Some(x),
|
StatementKind::Assign(x) => Some(x),
|
||||||
|
@ -862,3 +882,40 @@ impl<'tcx> BinOp {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<Mutability> for RawPtrKind {
|
||||||
|
fn from(other: Mutability) -> Self {
|
||||||
|
match other {
|
||||||
|
Mutability::Mut => RawPtrKind::Mut,
|
||||||
|
Mutability::Not => RawPtrKind::Const,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl RawPtrKind {
|
||||||
|
pub fn is_fake(self) -> bool {
|
||||||
|
match self {
|
||||||
|
RawPtrKind::Mut | RawPtrKind::Const => false,
|
||||||
|
RawPtrKind::FakeForPtrMetadata => true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn to_mutbl_lossy(self) -> Mutability {
|
||||||
|
match self {
|
||||||
|
RawPtrKind::Mut => Mutability::Mut,
|
||||||
|
RawPtrKind::Const => Mutability::Not,
|
||||||
|
|
||||||
|
// We have no type corresponding to a fake borrow, so use
|
||||||
|
// `*const` as an approximation.
|
||||||
|
RawPtrKind::FakeForPtrMetadata => Mutability::Not,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn ptr_str(self) -> &'static str {
|
||||||
|
match self {
|
||||||
|
RawPtrKind::Mut => "mut",
|
||||||
|
RawPtrKind::Const => "const",
|
||||||
|
RawPtrKind::FakeForPtrMetadata => "const (fake)",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -97,19 +97,6 @@ pub enum MirPhase {
|
||||||
Runtime(RuntimePhase),
|
Runtime(RuntimePhase),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl MirPhase {
|
|
||||||
pub fn name(&self) -> &'static str {
|
|
||||||
match *self {
|
|
||||||
MirPhase::Built => "built",
|
|
||||||
MirPhase::Analysis(AnalysisPhase::Initial) => "analysis",
|
|
||||||
MirPhase::Analysis(AnalysisPhase::PostCleanup) => "analysis-post-cleanup",
|
|
||||||
MirPhase::Runtime(RuntimePhase::Initial) => "runtime",
|
|
||||||
MirPhase::Runtime(RuntimePhase::PostCleanup) => "runtime-post-cleanup",
|
|
||||||
MirPhase::Runtime(RuntimePhase::Optimized) => "runtime-optimized",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// See [`MirPhase::Analysis`].
|
/// See [`MirPhase::Analysis`].
|
||||||
#[derive(Copy, Clone, TyEncodable, TyDecodable, Debug, PartialEq, Eq, PartialOrd, Ord)]
|
#[derive(Copy, Clone, TyEncodable, TyDecodable, Debug, PartialEq, Eq, PartialOrd, Ord)]
|
||||||
#[derive(HashStable)]
|
#[derive(HashStable)]
|
||||||
|
@ -206,43 +193,6 @@ pub enum RawPtrKind {
|
||||||
FakeForPtrMetadata,
|
FakeForPtrMetadata,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<Mutability> for RawPtrKind {
|
|
||||||
fn from(other: Mutability) -> Self {
|
|
||||||
match other {
|
|
||||||
Mutability::Mut => RawPtrKind::Mut,
|
|
||||||
Mutability::Not => RawPtrKind::Const,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl RawPtrKind {
|
|
||||||
pub fn is_fake(self) -> bool {
|
|
||||||
match self {
|
|
||||||
RawPtrKind::Mut | RawPtrKind::Const => false,
|
|
||||||
RawPtrKind::FakeForPtrMetadata => true,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn to_mutbl_lossy(self) -> Mutability {
|
|
||||||
match self {
|
|
||||||
RawPtrKind::Mut => Mutability::Mut,
|
|
||||||
RawPtrKind::Const => Mutability::Not,
|
|
||||||
|
|
||||||
// We have no type corresponding to a fake borrow, so use
|
|
||||||
// `*const` as an approximation.
|
|
||||||
RawPtrKind::FakeForPtrMetadata => Mutability::Not,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn ptr_str(self) -> &'static str {
|
|
||||||
match self {
|
|
||||||
RawPtrKind::Mut => "mut",
|
|
||||||
RawPtrKind::Const => "const",
|
|
||||||
RawPtrKind::FakeForPtrMetadata => "const (fake)",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, TyEncodable, TyDecodable)]
|
#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, TyEncodable, TyDecodable)]
|
||||||
#[derive(Hash, HashStable)]
|
#[derive(Hash, HashStable)]
|
||||||
pub enum MutBorrowKind {
|
pub enum MutBorrowKind {
|
||||||
|
@ -515,29 +465,6 @@ pub enum StatementKind<'tcx> {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
impl StatementKind<'_> {
|
|
||||||
/// Returns a simple string representation of a `StatementKind` variant, independent of any
|
|
||||||
/// values it might hold (e.g. `StatementKind::Assign` always returns `"Assign"`).
|
|
||||||
pub const fn name(&self) -> &'static str {
|
|
||||||
match self {
|
|
||||||
StatementKind::Assign(..) => "Assign",
|
|
||||||
StatementKind::FakeRead(..) => "FakeRead",
|
|
||||||
StatementKind::SetDiscriminant { .. } => "SetDiscriminant",
|
|
||||||
StatementKind::Deinit(..) => "Deinit",
|
|
||||||
StatementKind::StorageLive(..) => "StorageLive",
|
|
||||||
StatementKind::StorageDead(..) => "StorageDead",
|
|
||||||
StatementKind::Retag(..) => "Retag",
|
|
||||||
StatementKind::PlaceMention(..) => "PlaceMention",
|
|
||||||
StatementKind::AscribeUserType(..) => "AscribeUserType",
|
|
||||||
StatementKind::Coverage(..) => "Coverage",
|
|
||||||
StatementKind::Intrinsic(..) => "Intrinsic",
|
|
||||||
StatementKind::ConstEvalCounter => "ConstEvalCounter",
|
|
||||||
StatementKind::Nop => "Nop",
|
|
||||||
StatementKind::BackwardIncompatibleDropHint { .. } => "BackwardIncompatibleDropHint",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(
|
#[derive(
|
||||||
Clone,
|
Clone,
|
||||||
TyEncodable,
|
TyEncodable,
|
||||||
|
@ -673,12 +600,6 @@ pub enum CallSource {
|
||||||
Normal,
|
Normal,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl CallSource {
|
|
||||||
pub fn from_hir_call(self) -> bool {
|
|
||||||
matches!(self, CallSource::Normal)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Clone, Copy, Debug, TyEncodable, TyDecodable, Hash, HashStable, PartialEq)]
|
#[derive(Clone, Copy, Debug, TyEncodable, TyDecodable, Hash, HashStable, PartialEq)]
|
||||||
#[derive(TypeFoldable, TypeVisitable)]
|
#[derive(TypeFoldable, TypeVisitable)]
|
||||||
/// The macro that an inline assembly block was created by
|
/// The macro that an inline assembly block was created by
|
||||||
|
@ -689,15 +610,6 @@ pub enum InlineAsmMacro {
|
||||||
NakedAsm,
|
NakedAsm,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl InlineAsmMacro {
|
|
||||||
pub const fn diverges(self, options: InlineAsmOptions) -> bool {
|
|
||||||
match self {
|
|
||||||
InlineAsmMacro::Asm => options.contains(InlineAsmOptions::NORETURN),
|
|
||||||
InlineAsmMacro::NakedAsm => true,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
// Terminators
|
// Terminators
|
||||||
|
|
||||||
|
@ -999,30 +911,6 @@ pub enum BackwardIncompatibleDropReason {
|
||||||
Edition2024,
|
Edition2024,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TerminatorKind<'_> {
|
|
||||||
/// Returns a simple string representation of a `TerminatorKind` variant, independent of any
|
|
||||||
/// values it might hold (e.g. `TerminatorKind::Call` always returns `"Call"`).
|
|
||||||
pub const fn name(&self) -> &'static str {
|
|
||||||
match self {
|
|
||||||
TerminatorKind::Goto { .. } => "Goto",
|
|
||||||
TerminatorKind::SwitchInt { .. } => "SwitchInt",
|
|
||||||
TerminatorKind::UnwindResume => "UnwindResume",
|
|
||||||
TerminatorKind::UnwindTerminate(_) => "UnwindTerminate",
|
|
||||||
TerminatorKind::Return => "Return",
|
|
||||||
TerminatorKind::Unreachable => "Unreachable",
|
|
||||||
TerminatorKind::Drop { .. } => "Drop",
|
|
||||||
TerminatorKind::Call { .. } => "Call",
|
|
||||||
TerminatorKind::TailCall { .. } => "TailCall",
|
|
||||||
TerminatorKind::Assert { .. } => "Assert",
|
|
||||||
TerminatorKind::Yield { .. } => "Yield",
|
|
||||||
TerminatorKind::CoroutineDrop => "CoroutineDrop",
|
|
||||||
TerminatorKind::FalseEdge { .. } => "FalseEdge",
|
|
||||||
TerminatorKind::FalseUnwind { .. } => "FalseUnwind",
|
|
||||||
TerminatorKind::InlineAsm { .. } => "InlineAsm",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Clone, TyEncodable, TyDecodable, Hash, HashStable, PartialEq)]
|
#[derive(Debug, Clone, TyEncodable, TyDecodable, Hash, HashStable, PartialEq)]
|
||||||
pub struct SwitchTargets {
|
pub struct SwitchTargets {
|
||||||
/// Possible values. For each value, the location to branch to is found in
|
/// Possible values. For each value, the location to branch to is found in
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
use std::slice;
|
use std::slice;
|
||||||
|
|
||||||
|
use rustc_ast::InlineAsmOptions;
|
||||||
use rustc_data_structures::packed::Pu128;
|
use rustc_data_structures::packed::Pu128;
|
||||||
use rustc_hir::LangItem;
|
use rustc_hir::LangItem;
|
||||||
use rustc_macros::{HashStable, TyDecodable, TyEncodable, TypeFoldable, TypeVisitable};
|
use rustc_macros::{HashStable, TyDecodable, TyEncodable, TypeFoldable, TypeVisitable};
|
||||||
|
@ -414,6 +415,28 @@ impl<'tcx> Terminator<'tcx> {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'tcx> TerminatorKind<'tcx> {
|
impl<'tcx> TerminatorKind<'tcx> {
|
||||||
|
/// Returns a simple string representation of a `TerminatorKind` variant, independent of any
|
||||||
|
/// values it might hold (e.g. `TerminatorKind::Call` always returns `"Call"`).
|
||||||
|
pub const fn name(&self) -> &'static str {
|
||||||
|
match self {
|
||||||
|
TerminatorKind::Goto { .. } => "Goto",
|
||||||
|
TerminatorKind::SwitchInt { .. } => "SwitchInt",
|
||||||
|
TerminatorKind::UnwindResume => "UnwindResume",
|
||||||
|
TerminatorKind::UnwindTerminate(_) => "UnwindTerminate",
|
||||||
|
TerminatorKind::Return => "Return",
|
||||||
|
TerminatorKind::Unreachable => "Unreachable",
|
||||||
|
TerminatorKind::Drop { .. } => "Drop",
|
||||||
|
TerminatorKind::Call { .. } => "Call",
|
||||||
|
TerminatorKind::TailCall { .. } => "TailCall",
|
||||||
|
TerminatorKind::Assert { .. } => "Assert",
|
||||||
|
TerminatorKind::Yield { .. } => "Yield",
|
||||||
|
TerminatorKind::CoroutineDrop => "CoroutineDrop",
|
||||||
|
TerminatorKind::FalseEdge { .. } => "FalseEdge",
|
||||||
|
TerminatorKind::FalseUnwind { .. } => "FalseUnwind",
|
||||||
|
TerminatorKind::InlineAsm { .. } => "InlineAsm",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn if_(cond: Operand<'tcx>, t: BasicBlock, f: BasicBlock) -> TerminatorKind<'tcx> {
|
pub fn if_(cond: Operand<'tcx>, t: BasicBlock, f: BasicBlock) -> TerminatorKind<'tcx> {
|
||||||
TerminatorKind::SwitchInt { discr: cond, targets: SwitchTargets::static_if(0, f, t) }
|
TerminatorKind::SwitchInt { discr: cond, targets: SwitchTargets::static_if(0, f, t) }
|
||||||
|
@ -698,3 +721,18 @@ impl<'tcx> TerminatorKind<'tcx> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl CallSource {
|
||||||
|
pub fn from_hir_call(self) -> bool {
|
||||||
|
matches!(self, CallSource::Normal)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl InlineAsmMacro {
|
||||||
|
pub const fn diverges(self, options: InlineAsmOptions) -> bool {
|
||||||
|
match self {
|
||||||
|
InlineAsmMacro::Asm => options.contains(InlineAsmOptions::NORETURN),
|
||||||
|
InlineAsmMacro::NakedAsm => true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue