Skip to content

Commit 8e3dc57

Browse files
committed
impl DiscriminantKind for all types
1 parent e77213d commit 8e3dc57

File tree

7 files changed

+23
-11
lines changed

7 files changed

+23
-11
lines changed

chalk-integration/src/lowering.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1118,6 +1118,7 @@ impl Lower for WellKnownTrait {
11181118
WellKnownTrait::Unsize => rust_ir::WellKnownTrait::Unsize,
11191119
WellKnownTrait::Unpin => rust_ir::WellKnownTrait::Unpin,
11201120
WellKnownTrait::CoerceUnsized => rust_ir::WellKnownTrait::CoerceUnsized,
1121+
WellKnownTrait::DiscriminantKind => rust_ir::WellKnownTrait::DiscriminantKind,
11211122
}
11221123
}
11231124
}

chalk-parse/src/ast.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ pub enum WellKnownTrait {
141141
Unsize,
142142
Unpin,
143143
CoerceUnsized,
144+
DiscriminantKind,
144145
}
145146

146147
#[derive(Clone, PartialEq, Eq, Debug)]

chalk-parse/src/parser.lalrpop

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -55,16 +55,21 @@ ObjectSafeKeyword: () = "#" "[" "object_safe" "]";
5555
PhantomDataKeyword: () = "#" "[" "phantom_data" "]";
5656

5757
WellKnownTrait: WellKnownTrait = {
58-
"#" "[" "lang" "(" "sized" ")" "]" => WellKnownTrait::Sized,
59-
"#" "[" "lang" "(" "copy" ")" "]" => WellKnownTrait::Copy,
60-
"#" "[" "lang" "(" "clone" ")" "]" => WellKnownTrait::Clone,
61-
"#" "[" "lang" "(" "drop" ")" "]" => WellKnownTrait::Drop,
62-
"#" "[" "lang" "(" "fn_once" ")" "]" => WellKnownTrait::FnOnce,
63-
"#" "[" "lang" "(" "fn_mut" ")" "]" => WellKnownTrait::FnMut,
64-
"#" "[" "lang" "(" "fn" ")" "]" => WellKnownTrait::Fn,
65-
"#" "[" "lang" "(" "unsize" ")" "]" => WellKnownTrait::Unsize,
66-
"#" "[" "lang" "(" "unpin" ")" "]" => WellKnownTrait::Unpin,
67-
"#" "[" "lang" "(" "coerce_unsized" ")" "]" => WellKnownTrait::CoerceUnsized,
58+
"#" "[" "lang" "(" <n:WellKnownTraitName> ")" "]" => n,
59+
}
60+
61+
WellKnownTraitName: WellKnownTrait = {
62+
"sized" => WellKnownTrait::Sized,
63+
"copy" => WellKnownTrait::Copy,
64+
"clone" => WellKnownTrait::Clone,
65+
"drop" => WellKnownTrait::Drop,
66+
"fn_once" => WellKnownTrait::FnOnce,
67+
"fn_mut" => WellKnownTrait::FnMut,
68+
"fn" => WellKnownTrait::Fn,
69+
"unsize" => WellKnownTrait::Unsize,
70+
"unpin" => WellKnownTrait::Unpin,
71+
"coerce_unsized" => WellKnownTrait::CoerceUnsized,
72+
"discriminant_kind" => WellKnownTrait::DiscriminantKind,
6873
};
6974

7075
AdtRepr: Atom = "#" "[" "repr" "(" <name:Id> ")" "]" => name.str;

chalk-solve/src/clauses/builtin_traits.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ pub fn add_builtin_program_clauses<I: Interner>(
4141
WellKnownTrait::Unsize => {
4242
unsize::add_unsize_program_clauses(db, builder, &trait_ref, ty)
4343
}
44+
// DiscriminantKind is automatically implemented for all types
45+
WellKnownTrait::DiscriminantKind => builder.push_fact(trait_ref),
4446
// There are no builtin impls provided for the following traits:
4547
WellKnownTrait::Unpin | WellKnownTrait::Drop | WellKnownTrait::CoerceUnsized => (),
4648
}

chalk-solve/src/display/items.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ impl<I: Interner> RenderAsRust<I> for TraitDatum<I> {
201201
WellKnownTrait::Unsize => "unsize",
202202
WellKnownTrait::Unpin => "unpin",
203203
WellKnownTrait::CoerceUnsized => "coerce_unsized",
204+
WellKnownTrait::DiscriminantKind => "discriminant_kind",
204205
};
205206
writeln!(f, "#[lang({})]", name)?;
206207
}

chalk-solve/src/rust_ir.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,7 @@ pub enum WellKnownTrait {
262262
Unsize,
263263
Unpin,
264264
CoerceUnsized,
265+
DiscriminantKind,
265266
}
266267

267268
chalk_ir::const_visit!(WellKnownTrait);

chalk-solve/src/wf.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,8 @@ where
419419
| WellKnownTrait::FnOnce
420420
| WellKnownTrait::FnMut
421421
| WellKnownTrait::Unsize
422-
| WellKnownTrait::Sized => false,
422+
| WellKnownTrait::Sized
423+
| WellKnownTrait::DiscriminantKind => false,
423424
};
424425

425426
if is_legal {

0 commit comments

Comments
 (0)