diff options
| author | Scott McMurray <scottmcm@users.noreply.github.com> | 2018-08-24 23:13:31 -0700 |
|---|---|---|
| committer | Scott McMurray <scottmcm@users.noreply.github.com> | 2018-09-19 22:31:30 -0700 |
| commit | 62c6e4e1457c78de812f0ee5ee3370831b5d12f5 (patch) | |
| tree | d2a4903df2e1c879eea97544b6e58f41766158b5 | |
| parent | ed45f9cbf48d67ea4ca36d71b7c28c4768fb36de (diff) | |
| download | rust-62c6e4e1457c78de812f0ee5ee3370831b5d12f5.tar.gz rust-62c6e4e1457c78de812f0ee5ee3370831b5d12f5.zip | |
Add an is_marker flag to TraitDef
| -rw-r--r-- | src/librustc/ich/impls_ty.rs | 1 | ||||
| -rw-r--r-- | src/librustc/ty/trait_def.rs | 9 | ||||
| -rw-r--r-- | src/librustc_metadata/decoder.rs | 1 | ||||
| -rw-r--r-- | src/librustc_metadata/encoder.rs | 1 | ||||
| -rw-r--r-- | src/librustc_metadata/schema.rs | 2 | ||||
| -rw-r--r-- | src/librustc_typeck/collect.rs | 4 |
6 files changed, 16 insertions, 2 deletions
diff --git a/src/librustc/ich/impls_ty.rs b/src/librustc/ich/impls_ty.rs index 2bf1c79c8a4..78caa45187c 100644 --- a/src/librustc/ich/impls_ty.rs +++ b/src/librustc/ich/impls_ty.rs @@ -1033,6 +1033,7 @@ impl_stable_hash_for!(struct ty::TraitDef { unsafety, paren_sugar, has_auto_impl, + is_marker, def_path_hash, }); diff --git a/src/librustc/ty/trait_def.rs b/src/librustc/ty/trait_def.rs index 6332080a183..7c75215fb88 100644 --- a/src/librustc/ty/trait_def.rs +++ b/src/librustc/ty/trait_def.rs @@ -36,6 +36,11 @@ pub struct TraitDef { pub has_auto_impl: bool, + /// If `true`, then this trait has the `#[marker]` attribute, indicating + /// that all its associated items have defaults that cannot be overridden, + /// and thus `impl`s of it are allowed to overlap. + pub is_marker: bool, + /// The ICH of this trait's DefPath, cached here so it doesn't have to be /// recomputed all the time. pub def_path_hash: DefPathHash, @@ -53,13 +58,15 @@ impl<'a, 'gcx, 'tcx> TraitDef { unsafety: hir::Unsafety, paren_sugar: bool, has_auto_impl: bool, + is_marker: bool, def_path_hash: DefPathHash) -> TraitDef { TraitDef { def_id, - paren_sugar, unsafety, + paren_sugar, has_auto_impl, + is_marker, def_path_hash, } } diff --git a/src/librustc_metadata/decoder.rs b/src/librustc_metadata/decoder.rs index 9907df7ed02..e0f435f5ea5 100644 --- a/src/librustc_metadata/decoder.rs +++ b/src/librustc_metadata/decoder.rs @@ -539,6 +539,7 @@ impl<'a, 'tcx> CrateMetadata { data.unsafety, data.paren_sugar, data.has_auto_impl, + data.is_marker, self.def_path_table.def_path_hash(item_id)) } diff --git a/src/librustc_metadata/encoder.rs b/src/librustc_metadata/encoder.rs index 56b38cfbc87..c36ae02ab54 100644 --- a/src/librustc_metadata/encoder.rs +++ b/src/librustc_metadata/encoder.rs @@ -1152,6 +1152,7 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> { unsafety: trait_def.unsafety, paren_sugar: trait_def.paren_sugar, has_auto_impl: tcx.trait_is_auto(def_id), + is_marker: trait_def.is_marker, super_predicates: self.lazy(&tcx.super_predicates_of(def_id)), }; diff --git a/src/librustc_metadata/schema.rs b/src/librustc_metadata/schema.rs index ab22a8e4db9..da2a8ae714b 100644 --- a/src/librustc_metadata/schema.rs +++ b/src/librustc_metadata/schema.rs @@ -472,6 +472,7 @@ pub struct TraitData<'tcx> { pub unsafety: hir::Unsafety, pub paren_sugar: bool, pub has_auto_impl: bool, + pub is_marker: bool, pub super_predicates: Lazy<ty::GenericPredicates<'tcx>>, } @@ -479,6 +480,7 @@ impl_stable_hash_for!(struct TraitData<'tcx> { unsafety, paren_sugar, has_auto_impl, + is_marker, super_predicates }); diff --git a/src/librustc_typeck/collect.rs b/src/librustc_typeck/collect.rs index 5309be21768..5892296102c 100644 --- a/src/librustc_typeck/collect.rs +++ b/src/librustc_typeck/collect.rs @@ -735,8 +735,10 @@ fn trait_def<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, def_id: DefId) -> &'tcx ty:: err.emit(); } + let is_marker = false; // FIXME (scottmcm) + let def_path_hash = tcx.def_path_hash(def_id); - let def = ty::TraitDef::new(def_id, unsafety, paren_sugar, is_auto, def_path_hash); + let def = ty::TraitDef::new(def_id, unsafety, paren_sugar, is_auto, is_marker, def_path_hash); tcx.alloc_trait_def(def) } |
