Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/consteval.rs')
| -rw-r--r-- | crates/hir-ty/src/consteval.rs | 29 |
1 files changed, 10 insertions, 19 deletions
diff --git a/crates/hir-ty/src/consteval.rs b/crates/hir-ty/src/consteval.rs index 4b58262dac..0495a4e64c 100644 --- a/crates/hir-ty/src/consteval.rs +++ b/crates/hir-ty/src/consteval.rs @@ -347,17 +347,6 @@ pub fn eval_const( } } -pub fn eval_usize(expr: Idx<Expr>, mut ctx: ConstEvalCtx<'_>) -> Option<u64> { - if let Ok(ce) = eval_const(expr, &mut ctx) { - match ce { - ComputedExpr::Literal(Literal::Int(x, _)) => return x.try_into().ok(), - ComputedExpr::Literal(Literal::Uint(x, _)) => return x.try_into().ok(), - _ => {} - } - } - None -} - pub(crate) fn path_to_const( db: &dyn HirDatabase, resolver: &Resolver, @@ -406,17 +395,14 @@ pub fn unknown_const_as_generic(ty: Ty) -> GenericArg { } /// Interns a constant scalar with the given type -pub fn intern_scalar_const(value: ConstScalar, ty: Ty) -> Const { +pub fn intern_const_scalar(value: ConstScalar, ty: Ty) -> Const { ConstData { ty, value: ConstValue::Concrete(chalk_ir::ConcreteConst { interned: value }) } .intern(Interner) } /// Interns a possibly-unknown target usize -pub fn usize_const(value: Option<u64>) -> Const { - intern_scalar_const( - value.map(ConstScalar::Usize).unwrap_or(ConstScalar::Unknown), - TyBuilder::usize(), - ) +pub fn usize_const(value: Option<u128>) -> Const { + intern_const_scalar(value.map_or(ConstScalar::Unknown, ConstScalar::UInt), TyBuilder::usize()) } pub(crate) fn const_eval_recover( @@ -463,7 +449,7 @@ pub(crate) fn eval_to_const<'a>( } } let body = ctx.body.clone(); - let ctx = ConstEvalCtx { + let mut ctx = ConstEvalCtx { db: ctx.db, owner: ctx.owner, exprs: &body.exprs, @@ -471,7 +457,12 @@ pub(crate) fn eval_to_const<'a>( local_data: HashMap::default(), infer: &ctx.result, }; - usize_const(eval_usize(expr, ctx)) + let computed_expr = eval_const(expr, &mut ctx); + let const_scalar = match computed_expr { + Ok(ComputedExpr::Literal(literal)) => literal.into(), + _ => ConstScalar::Unknown, + }; + intern_const_scalar(const_scalar, TyBuilder::usize()) } #[cfg(test)] |