Skip to main content

Module consts

Module consts 

Source
Expand description

A simple const eval API, for use on arbitrary HIR expressions.

This cannot use rustc’s const eval, aka miri, as arbitrary HIR expressions cannot be lowered to executable MIR bodies, so we have to do this instead.

Re-exportsΒ§

use crate::res::MaybeDef as _; πŸ”’
use crate::source::SpanExt as _; πŸ”’
use crate::source::walk_span_to_context; πŸ”’
use crate::clip; πŸ”’
use crate::is_direct_expn_of; πŸ”’
use crate::sext; πŸ”’
use crate::sym; πŸ”’
use crate::unsext; πŸ”’
use rustc_abi::Size; πŸ”’
use rustc_apfloat::Float as _; πŸ”’
use rustc_apfloat::ieee::Half; πŸ”’
use rustc_apfloat::ieee::Quad; πŸ”’
use rustc_ast::ast::LitFloatType; πŸ”’
use rustc_ast::ast::LitKind; πŸ”’
use rustc_hir::def::DefKind; πŸ”’
use rustc_hir::def::Res; πŸ”’
use rustc_hir::BinOpKind; πŸ”’
use rustc_hir::Block; πŸ”’
use rustc_hir::ConstArgKind; πŸ”’
use rustc_hir::ConstBlock; πŸ”’
use rustc_hir::ConstItemRhs; πŸ”’
use rustc_hir::Expr; πŸ”’
use rustc_hir::ExprKind; πŸ”’
use rustc_hir::HirId; πŸ”’
use rustc_hir::PatExpr; πŸ”’
use rustc_hir::PatExprKind; πŸ”’
use rustc_hir::QPath; πŸ”’
use rustc_hir::TyKind; πŸ”’
use rustc_hir::UnOp; πŸ”’
use rustc_lexer::FrontmatterAllowed; πŸ”’
use rustc_lexer::tokenize; πŸ”’
use rustc_lint::LateContext; πŸ”’
use rustc_middle::mir::interpret::Scalar; πŸ”’
use rustc_middle::mir::interpret::alloc_range; πŸ”’
use rustc_middle::mir; πŸ”’
use rustc_middle::mir::ConstValue; πŸ”’
use rustc_middle::ty; πŸ”’
use rustc_middle::ty::FloatTy; πŸ”’
use rustc_middle::ty::IntTy; πŸ”’
use rustc_middle::ty::ScalarInt; πŸ”’
use rustc_middle::ty::Ty; πŸ”’
use rustc_middle::ty::TyCtxt; πŸ”’
use rustc_middle::ty::TypeckResults; πŸ”’
use rustc_middle::ty::UintTy; πŸ”’
use rustc_span::Symbol; πŸ”’
use rustc_span::SyntaxContext; πŸ”’
use rustc_span::bug; πŸ”’
use rustc_span::span_bug; πŸ”’
use std::cell::Cell; πŸ”’
use std::cmp::Ordering; πŸ”’
use std::hash::Hash; πŸ”’
use std::hash::Hash; πŸ”’
use std::hash::Hasher; πŸ”’
use std::iter; πŸ”’

StructsΒ§

ConstEvalCtxt
The context required to evaluate a constant expression.

EnumsΒ§

Constant
A LitKind-like enum to fold constant Exprs into.
ConstantSource
The source of a constant value.
FullInt
An integer type (signed or unsigned) with enough bits to represent any integer that can be represented in Rust.

TraitsΒ§

IntTypeBounds πŸ”’

FunctionsΒ§

const_item_rhs_to_expr
Extracts the [Expr] backing a const item’s right-hand side, if it has one.
eval_int
Evaluates an expression if it’s a builtin integer type.
field_of_struct πŸ”’
integer_const
If expr evaluates to an integer constant, return its value.
is_zero_integer_const
Check if expr evaluates to an integer constant of 0.
lit_to_mir_constant
Parses a LitKind to a Constant.
mir_to_const
Converts a [ConstValue] to a Constant, if possible.