Deduplicate IntTy/UintTy/FloatTy.
There are identical definitions in `rustc_type_ir` and `rustc_ast`. This commit removes them and places a single definition in `rustc_ast_ir`. This requires adding `rust_span` as a dependency of `rustc_ast_ir`, but means a bunch of silly conversion functions can be removed. The one annoying wrinkle is that the old version had differences in their `Debug` impls, e.g. one printed `u32` while the other printed `U32`. Some compiler error messages rely on the former (yuk), and some clippy output depends on the latter. So the commit also changes clippy to not rely on `Debug` and just implement what it needs itself.
This commit is contained in:
parent
606dcc0d2e
commit
1901dde97b
15 changed files with 269 additions and 390 deletions
|
|
@ -1963,43 +1963,6 @@ impl PrimitiveType {
|
|||
}
|
||||
}
|
||||
|
||||
impl From<ast::IntTy> for PrimitiveType {
|
||||
fn from(int_ty: ast::IntTy) -> PrimitiveType {
|
||||
match int_ty {
|
||||
ast::IntTy::Isize => PrimitiveType::Isize,
|
||||
ast::IntTy::I8 => PrimitiveType::I8,
|
||||
ast::IntTy::I16 => PrimitiveType::I16,
|
||||
ast::IntTy::I32 => PrimitiveType::I32,
|
||||
ast::IntTy::I64 => PrimitiveType::I64,
|
||||
ast::IntTy::I128 => PrimitiveType::I128,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<ast::UintTy> for PrimitiveType {
|
||||
fn from(uint_ty: ast::UintTy) -> PrimitiveType {
|
||||
match uint_ty {
|
||||
ast::UintTy::Usize => PrimitiveType::Usize,
|
||||
ast::UintTy::U8 => PrimitiveType::U8,
|
||||
ast::UintTy::U16 => PrimitiveType::U16,
|
||||
ast::UintTy::U32 => PrimitiveType::U32,
|
||||
ast::UintTy::U64 => PrimitiveType::U64,
|
||||
ast::UintTy::U128 => PrimitiveType::U128,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<ast::FloatTy> for PrimitiveType {
|
||||
fn from(float_ty: ast::FloatTy) -> PrimitiveType {
|
||||
match float_ty {
|
||||
ast::FloatTy::F16 => PrimitiveType::F16,
|
||||
ast::FloatTy::F32 => PrimitiveType::F32,
|
||||
ast::FloatTy::F64 => PrimitiveType::F64,
|
||||
ast::FloatTy::F128 => PrimitiveType::F128,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<ty::IntTy> for PrimitiveType {
|
||||
fn from(int_ty: ty::IntTy) -> PrimitiveType {
|
||||
match int_ty {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
use clippy_utils::diagnostics::span_lint_and_then;
|
||||
use clippy_utils::numeric_literal;
|
||||
use rustc_ast::ast::{self, LitFloatType, LitKind};
|
||||
use rustc_ast::ast::{LitFloatType, LitKind};
|
||||
use rustc_errors::Applicability;
|
||||
use rustc_hir as hir;
|
||||
use rustc_lint::{LateContext, LateLintPass};
|
||||
|
|
@ -75,10 +75,10 @@ impl<'tcx> LateLintPass<'tcx> for FloatLiteral {
|
|||
let digits = count_digits(sym_str);
|
||||
let max = max_digits(fty);
|
||||
let type_suffix = match lit_float_ty {
|
||||
LitFloatType::Suffixed(ast::FloatTy::F16) => Some("f16"),
|
||||
LitFloatType::Suffixed(ast::FloatTy::F32) => Some("f32"),
|
||||
LitFloatType::Suffixed(ast::FloatTy::F64) => Some("f64"),
|
||||
LitFloatType::Suffixed(ast::FloatTy::F128) => Some("f128"),
|
||||
LitFloatType::Suffixed(FloatTy::F16) => Some("f16"),
|
||||
LitFloatType::Suffixed(FloatTy::F32) => Some("f32"),
|
||||
LitFloatType::Suffixed(FloatTy::F64) => Some("f64"),
|
||||
LitFloatType::Suffixed(FloatTy::F128) => Some("f128"),
|
||||
LitFloatType::Unsuffixed => None,
|
||||
};
|
||||
let (is_whole, is_inf, mut float_str) = match fty {
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ use rustc_hir::{
|
|||
FnRetTy, HirId, Lit, PatExprKind, PatKind, QPath, StmtKind, StructTailExpr,
|
||||
};
|
||||
use rustc_lint::{LateContext, LateLintPass, LintContext};
|
||||
use rustc_middle::ty::{FloatTy, IntTy, UintTy};
|
||||
use rustc_session::declare_lint_pass;
|
||||
use rustc_span::symbol::{Ident, Symbol};
|
||||
use std::cell::Cell;
|
||||
|
|
@ -337,15 +338,43 @@ impl<'a, 'tcx> PrintVisitor<'a, 'tcx> {
|
|||
LitKind::Byte(b) => kind!("Byte({b})"),
|
||||
LitKind::Int(i, suffix) => {
|
||||
let int_ty = match suffix {
|
||||
LitIntType::Signed(int_ty) => format!("LitIntType::Signed(IntTy::{int_ty:?})"),
|
||||
LitIntType::Unsigned(uint_ty) => format!("LitIntType::Unsigned(UintTy::{uint_ty:?})"),
|
||||
LitIntType::Signed(int_ty) => {
|
||||
let t = match int_ty {
|
||||
IntTy::Isize => "Isize",
|
||||
IntTy::I8 => "I8",
|
||||
IntTy::I16 => "I16",
|
||||
IntTy::I32 => "I32",
|
||||
IntTy::I64 => "I64",
|
||||
IntTy::I128 => "I128",
|
||||
};
|
||||
format!("LitIntType::Signed(IntTy::{t})")
|
||||
}
|
||||
LitIntType::Unsigned(uint_ty) => {
|
||||
let t = match uint_ty {
|
||||
UintTy::Usize => "Usize",
|
||||
UintTy::U8 => "U8",
|
||||
UintTy::U16 => "U16",
|
||||
UintTy::U32 => "U32",
|
||||
UintTy::U64 => "U64",
|
||||
UintTy::U128 => "U128",
|
||||
};
|
||||
format!("LitIntType::Unsigned(UintTy::{t})")
|
||||
}
|
||||
LitIntType::Unsuffixed => String::from("LitIntType::Unsuffixed"),
|
||||
};
|
||||
kind!("Int({i}, {int_ty})");
|
||||
},
|
||||
LitKind::Float(_, suffix) => {
|
||||
let float_ty = match suffix {
|
||||
LitFloatType::Suffixed(suffix_ty) => format!("LitFloatType::Suffixed(FloatTy::{suffix_ty:?})"),
|
||||
LitFloatType::Suffixed(suffix_ty) => {
|
||||
let t = match suffix_ty {
|
||||
FloatTy::F16 => "F16",
|
||||
FloatTy::F32 => "F32",
|
||||
FloatTy::F64 => "F64",
|
||||
FloatTy::F128 => "F128",
|
||||
};
|
||||
format!("LitFloatType::Suffixed(FloatTy::{t})")
|
||||
}
|
||||
LitFloatType::Unsuffixed => String::from("LitFloatType::Unsuffixed"),
|
||||
};
|
||||
kind!("Float(_, {float_ty})");
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ use crate::{clip, is_direct_expn_of, sext, unsext};
|
|||
use rustc_abi::Size;
|
||||
use rustc_apfloat::Float;
|
||||
use rustc_apfloat::ieee::{Half, Quad};
|
||||
use rustc_ast::ast::{self, LitFloatType, LitKind};
|
||||
use rustc_ast::ast::{LitFloatType, LitKind};
|
||||
use rustc_hir::def::{DefKind, Res};
|
||||
use rustc_hir::{
|
||||
BinOpKind, Block, ConstBlock, Expr, ExprKind, HirId, Item, ItemKind, Node, PatExpr, PatExprKind, QPath, UnOp,
|
||||
|
|
@ -309,10 +309,10 @@ pub fn lit_to_mir_constant<'tcx>(lit: &LitKind, ty: Option<Ty<'tcx>>) -> Constan
|
|||
LitKind::Int(n, _) => Constant::Int(n.get()),
|
||||
LitKind::Float(ref is, LitFloatType::Suffixed(fty)) => match fty {
|
||||
// FIXME(f16_f128): just use `parse()` directly when available for `f16`/`f128`
|
||||
ast::FloatTy::F16 => Constant::parse_f16(is.as_str()),
|
||||
ast::FloatTy::F32 => Constant::F32(is.as_str().parse().unwrap()),
|
||||
ast::FloatTy::F64 => Constant::F64(is.as_str().parse().unwrap()),
|
||||
ast::FloatTy::F128 => Constant::parse_f128(is.as_str()),
|
||||
FloatTy::F16 => Constant::parse_f16(is.as_str()),
|
||||
FloatTy::F32 => Constant::F32(is.as_str().parse().unwrap()),
|
||||
FloatTy::F64 => Constant::F64(is.as_str().parse().unwrap()),
|
||||
FloatTy::F128 => Constant::parse_f128(is.as_str()),
|
||||
},
|
||||
LitKind::Float(ref is, LitFloatType::Unsuffixed) => match ty.expect("type of float is known").kind() {
|
||||
ty::Float(FloatTy::F16) => Constant::parse_f16(is.as_str()),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue