Skip to content

Commit 8577bb4

Browse files
committed
Refactor ConstVariableOrigin into ConstVariableOrigin and ConstVariableOriginKind
1 parent 4dcc49c commit 8577bb4

File tree

7 files changed

+54
-20
lines changed

7 files changed

+54
-20
lines changed

src/librustc/infer/canonical/mod.rs

+9-3
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
//! [c]: https://rust-lang.github.io/rustc-guide/traits/canonicalization.html
2323
2424
use crate::infer::{InferCtxt, RegionVariableOrigin, TypeVariableOrigin, TypeVariableOriginKind};
25-
use crate::infer::ConstVariableOrigin;
25+
use crate::infer::{ConstVariableOrigin, ConstVariableOriginKind};
2626
use crate::mir::interpret::ConstValue;
2727
use rustc_data_structures::indexed_vec::IndexVec;
2828
use rustc_macros::HashStable;
@@ -407,10 +407,16 @@ impl<'cx, 'gcx, 'tcx> InferCtxt<'cx, 'gcx, 'tcx> {
407407
CanonicalVarKind::Const(ui) => {
408408
self.next_const_var_in_universe(
409409
self.next_ty_var_in_universe(
410-
TypeVariableOrigin::MiscVariable(span),
410+
TypeVariableOrigin {
411+
kind: TypeVariableOriginKind::MiscVariable,
412+
span,
413+
},
411414
universe_map(ui),
412415
),
413-
ConstVariableOrigin::MiscVariable(span),
416+
ConstVariableOrigin {
417+
kind: ConstVariableOriginKind::MiscVariable,
418+
span,
419+
},
414420
universe_map(ui),
415421
).into()
416422
}

src/librustc/infer/combine.rs

+6-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ use super::{InferCtxt, MiscVariable, TypeTrace};
2828
use super::lub::Lub;
2929
use super::sub::Sub;
3030
use super::type_variable::TypeVariableValue;
31-
use super::unify_key::{ConstVarValue, ConstVariableValue, ConstVariableOrigin};
31+
use super::unify_key::{ConstVarValue, ConstVariableValue};
32+
use super::unify_key::{ConstVariableOrigin, ConstVariableOriginKind};
3233

3334
use crate::hir::def_id::DefId;
3435
use crate::mir::interpret::ConstValue;
@@ -165,7 +166,10 @@ impl<'infcx, 'gcx, 'tcx> InferCtxt<'infcx, 'gcx, 'tcx> {
165166
self.const_unification_table
166167
.borrow_mut()
167168
.unify_var_value(vid, ConstVarValue {
168-
origin: ConstVariableOrigin::ConstInference(DUMMY_SP),
169+
origin: ConstVariableOrigin {
170+
kind: ConstVariableOriginKind::ConstInference,
171+
span: DUMMY_SP,
172+
},
169173
val: ConstVariableValue::Known { value },
170174
})
171175
.map_err(|e| const_unification_error(vid_is_expected, e))?;

src/librustc/infer/mod.rs

+9-3
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ use self::outlives::env::OutlivesEnvironment;
4040
use self::region_constraints::{GenericKind, RegionConstraintData, VarInfos, VerifyBound};
4141
use self::region_constraints::{RegionConstraintCollector, RegionSnapshot};
4242
use self::type_variable::{TypeVariableOrigin, TypeVariableOriginKind};
43-
use self::unify_key::{ToType, ConstVariableOrigin};
43+
use self::unify_key::{ToType, ConstVariableOrigin, ConstVariableOriginKind};
4444

4545
pub mod at;
4646
pub mod canonical;
@@ -1119,7 +1119,10 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
11191119
self.tcx.mk_ty_var(ty_var_id).into()
11201120
}
11211121
GenericParamDefKind::Const { .. } => {
1122-
let origin = ConstVariableOrigin::ConstParameterDefinition(span, param.name);
1122+
let origin = ConstVariableOrigin {
1123+
kind: ConstVariableOriginKind::ConstParameterDefinition(param.name),
1124+
span,
1125+
};
11231126
let const_var_id =
11241127
self.const_unification_table
11251128
.borrow_mut()
@@ -1421,7 +1424,10 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
14211424
span,
14221425
})
14231426
};
1424-
let fld_c = |_, ty| self.next_const_var(ty, ConstVariableOrigin::MiscVariable(span));
1427+
let fld_c = |_, ty| self.next_const_var(ty, ConstVariableOrigin {
1428+
kind: ConstVariableOriginKind:: MiscVariable,
1429+
span,
1430+
});
14251431
self.tcx.replace_bound_vars(value, fld_r, fld_t, fld_c)
14261432
}
14271433

src/librustc/infer/resolve.rs

+6-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
use super::{InferCtxt, FixupError, FixupResult, Span, type_variable::TypeVariableOrigin};
1+
use super::{InferCtxt, FixupError, FixupResult, Span};
2+
use super::type_variable::{TypeVariableOrigin, TypeVariableOriginKind};
23
use crate::mir::interpret::ConstValue;
34
use crate::ty::{self, Ty, Const, TyCtxt, TypeFoldable, InferConst, TypeFlags};
45
use crate::ty::fold::{TypeFolder, TypeVisitor};
@@ -123,8 +124,10 @@ impl<'a, 'gcx, 'tcx> TypeVisitor<'tcx> for UnresolvedTypeFinder<'a, 'gcx, 'tcx>
123124
let ty_var_span =
124125
if let ty::TyVar(ty_vid) = infer_ty {
125126
let ty_vars = self.infcx.type_variables.borrow();
126-
if let TypeVariableOrigin::TypeParameterDefinition(span, _name)
127-
= *ty_vars.var_origin(ty_vid)
127+
if let TypeVariableOrigin {
128+
kind: TypeVariableOriginKind::TypeParameterDefinition(_),
129+
span,
130+
} = *ty_vars.var_origin(ty_vid)
128131
{
129132
Some(span)
130133
} else {

src/librustc/infer/unify_key.rs

+15-6
Original file line numberDiff line numberDiff line change
@@ -79,13 +79,19 @@ impl ToType for FloatVarValue {
7979

8080
// Generic consts.
8181

82+
#[derive(Copy, Clone, Debug)]
83+
pub struct ConstVariableOrigin {
84+
pub kind: ConstVariableOriginKind,
85+
pub span: Span,
86+
}
87+
8288
/// Reasons to create a const inference variable
8389
#[derive(Copy, Clone, Debug)]
84-
pub enum ConstVariableOrigin {
85-
MiscVariable(Span),
86-
ConstInference(Span),
87-
ConstParameterDefinition(Span, InternedString),
88-
SubstitutionPlaceholder(Span),
90+
pub enum ConstVariableOriginKind {
91+
MiscVariable,
92+
ConstInference,
93+
ConstParameterDefinition(InternedString),
94+
SubstitutionPlaceholder,
8995
}
9096

9197
#[derive(Copy, Clone, Debug)]
@@ -159,7 +165,10 @@ impl<'tcx> UnifyValue for ConstVarValue<'tcx> {
159165
}?;
160166

161167
Ok(ConstVarValue {
162-
origin: ConstVariableOrigin::ConstInference(DUMMY_SP),
168+
origin: ConstVariableOrigin {
169+
kind: ConstVariableOriginKind::ConstInference,
170+
span: DUMMY_SP,
171+
},
163172
val,
164173
})
165174
}

src/librustc_typeck/check/_match.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -1009,7 +1009,10 @@ https://doc.rust-lang.org/reference/types.html#trait-objects");
10091009
// ...but otherwise we want to use any supertype of the
10101010
// discriminant. This is sort of a workaround, see note (*) in
10111011
// `check_pat` for some details.
1012-
let discrim_ty = self.next_ty_var(TypeVariableOrigin::TypeInference(discrim.span));
1012+
let discrim_ty = self.next_ty_var(TypeVariableOrigin {
1013+
kind: TypeVariableOriginKind::TypeInference,
1014+
span: discrim.span,
1015+
});
10131016
self.check_expr_has_type_or_error(discrim, discrim_ty);
10141017
discrim_ty
10151018
}

src/librustc_typeck/check/method/probe.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ use rustc::traits::query::method_autoderef::{MethodAutoderefBadTy};
2121
use rustc::ty::{self, ParamEnvAnd, Ty, TyCtxt, ToPolyTraitRef, ToPredicate, TraitRef, TypeFoldable};
2222
use rustc::ty::GenericParamDefKind;
2323
use rustc::infer::type_variable::{TypeVariableOrigin, TypeVariableOriginKind};
24-
use rustc::infer::unify_key::ConstVariableOrigin;
24+
use rustc::infer::unify_key::{ConstVariableOrigin, ConstVariableOriginKind};
2525
use rustc::util::nodemap::FxHashSet;
2626
use rustc::infer::{self, InferOk};
2727
use rustc::infer::canonical::{Canonical, QueryResponse};
@@ -1580,7 +1580,10 @@ impl<'a, 'gcx, 'tcx> ProbeContext<'a, 'gcx, 'tcx> {
15801580
}
15811581
GenericParamDefKind::Const { .. } => {
15821582
let span = self.tcx.def_span(def_id);
1583-
let origin = ConstVariableOrigin::SubstitutionPlaceholder(span);
1583+
let origin = ConstVariableOrigin {
1584+
kind: ConstVariableOriginKind::SubstitutionPlaceholder,
1585+
span,
1586+
};
15841587
self.next_const_var(self.tcx.type_of(param.def_id), origin).into()
15851588
}
15861589
}

0 commit comments

Comments
 (0)