]>
Commit | Line | Data |
---|---|---|
e9174d1e | 1 | /*! |
1a4d82fc | 2 | |
74b04a01 | 3 | Rust MIR: a lowered representation of Rust. |
1a4d82fc | 4 | |
e9174d1e | 5 | */ |
1a4d82fc | 6 | |
17df50a5 | 7 | #![feature(assert_matches)] |
7453a54e | 8 | #![feature(box_patterns)] |
f9f354fc | 9 | #![feature(decl_macro)] |
1b1a35ee | 10 | #![feature(exact_size_is_empty)] |
923072b8 | 11 | #![feature(let_chains)] |
6a06907d | 12 | #![feature(map_try_insert)] |
f9f354fc | 13 | #![feature(min_specialization)] |
17df50a5 | 14 | #![feature(slice_ptr_get)] |
c295e0f8 XL |
15 | #![feature(option_get_or_insert_default)] |
16 | #![feature(never_type)] | |
17 | #![feature(trait_alias)] | |
dc9dc135 | 18 | #![feature(trusted_len)] |
c295e0f8 | 19 | #![feature(trusted_step)] |
9fa01778 | 20 | #![feature(try_blocks)] |
923072b8 | 21 | #![feature(yeet_expr)] |
9c376795 | 22 | #![feature(if_let_guard)] |
dfeec247 | 23 | #![recursion_limit = "256"] |
94b46f34 | 24 | |
dfeec247 | 25 | #[macro_use] |
3dfed10e | 26 | extern crate tracing; |
dfeec247 | 27 | #[macro_use] |
ba9703b0 | 28 | extern crate rustc_middle; |
e9174d1e | 29 | |
dfeec247 | 30 | pub mod const_eval; |
064997fb | 31 | mod errors; |
dfeec247 | 32 | pub mod interpret; |
92a42be0 | 33 | pub mod transform; |
cc61c64b | 34 | pub mod util; |
9e0c209e | 35 | |
9ffffee4 | 36 | use rustc_errors::{DiagnosticMessage, SubdiagnosticMessage}; |
49aad941 FG |
37 | use rustc_fluent_macro::fluent_messages; |
38 | use rustc_middle::query::Providers; | |
923072b8 | 39 | use rustc_middle::ty; |
9ffffee4 | 40 | |
353b0b11 | 41 | fluent_messages! { "../messages.ftl" } |
8bb4bdeb | 42 | |
f035d41b | 43 | pub fn provide(providers: &mut Providers) { |
dfeec247 | 44 | const_eval::provide(providers); |
1b1a35ee XL |
45 | providers.eval_to_const_value_raw = const_eval::eval_to_const_value_raw_provider; |
46 | providers.eval_to_allocation_raw = const_eval::eval_to_allocation_raw_provider; | |
e74abb32 | 47 | providers.const_caller_location = const_eval::const_caller_location; |
923072b8 | 48 | providers.eval_to_valtree = |tcx, param_env_and_value| { |
6a06907d | 49 | let (param_env, raw) = param_env_and_value.into_parts(); |
923072b8 FG |
50 | const_eval::eval_to_valtree(tcx, param_env, raw) |
51 | }; | |
52 | providers.try_destructure_mir_constant = |tcx, param_env_and_value| { | |
53 | let (param_env, value) = param_env_and_value.into_parts(); | |
54 | const_eval::try_destructure_mir_constant(tcx, param_env, value).ok() | |
6a06907d | 55 | }; |
04454e1e | 56 | providers.valtree_to_const_val = |tcx, (ty, valtree)| { |
923072b8 | 57 | const_eval::valtree_to_const_value(tcx, ty::ParamEnv::empty().and(ty), valtree) |
04454e1e | 58 | }; |
923072b8 | 59 | providers.deref_mir_constant = |tcx, param_env_and_value| { |
1b1a35ee | 60 | let (param_env, value) = param_env_and_value.into_parts(); |
923072b8 | 61 | const_eval::deref_mir_constant(tcx, param_env, value) |
1b1a35ee | 62 | }; |
9ffffee4 FG |
63 | providers.check_validity_requirement = |tcx, (init_kind, param_env_and_ty)| { |
64 | util::check_validity_requirement(tcx, init_kind, param_env_and_ty) | |
65 | }; | |
cc61c64b | 66 | } |