summaryrefslogtreecommitdiffstats
path: root/compiler/rustc_middle/src/middle/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/rustc_middle/src/middle/mod.rs')
-rw-r--r--compiler/rustc_middle/src/middle/mod.rs25
1 files changed, 13 insertions, 12 deletions
diff --git a/compiler/rustc_middle/src/middle/mod.rs b/compiler/rustc_middle/src/middle/mod.rs
index 85c5af9ca..8c1b1ff12 100644
--- a/compiler/rustc_middle/src/middle/mod.rs
+++ b/compiler/rustc_middle/src/middle/mod.rs
@@ -7,22 +7,23 @@ pub mod lib_features {
use rustc_data_structures::fx::FxHashMap;
use rustc_span::{symbol::Symbol, Span};
- #[derive(HashStable, Debug)]
+ #[derive(Copy, Clone, Debug, PartialEq, Eq)]
+ #[derive(HashStable, TyEncodable, TyDecodable)]
+ pub enum FeatureStability {
+ AcceptedSince(Symbol),
+ Unstable,
+ }
+
+ #[derive(HashStable, Debug, Default)]
pub struct LibFeatures {
- /// A map from feature to stabilisation version.
- pub stable: FxHashMap<Symbol, (Symbol, Span)>,
- pub unstable: FxHashMap<Symbol, Span>,
+ pub stability: FxHashMap<Symbol, (FeatureStability, Span)>,
}
impl LibFeatures {
- pub fn to_vec(&self) -> Vec<(Symbol, Option<Symbol>)> {
- let mut all_features: Vec<_> = self
- .stable
- .iter()
- .map(|(f, (s, _))| (*f, Some(*s)))
- .chain(self.unstable.keys().map(|f| (*f, None)))
- .collect();
- all_features.sort_unstable_by(|a, b| a.0.as_str().partial_cmp(b.0.as_str()).unwrap());
+ pub fn to_vec(&self) -> Vec<(Symbol, FeatureStability)> {
+ let mut all_features: Vec<_> =
+ self.stability.iter().map(|(&sym, &(stab, _))| (sym, stab)).collect();
+ all_features.sort_unstable_by(|(a, _), (b, _)| a.as_str().cmp(b.as_str()));
all_features
}
}