rustc: Treat existential traits as base types for coherence purposes
This commit is contained in:
parent
fdf0c1b353
commit
9b7d9a9a1b
1 changed files with 11 additions and 10 deletions
|
@ -166,16 +166,15 @@ class CoherenceChecker {
|
||||||
self.get_base_type(base_mutability_and_type.ty)
|
self.get_base_type(base_mutability_and_type.ty)
|
||||||
}
|
}
|
||||||
|
|
||||||
ty_enum(*) | ty_class(*) {
|
ty_enum(*) | ty_trait(*) | ty_class(*) {
|
||||||
some(original_type)
|
some(original_type)
|
||||||
}
|
}
|
||||||
|
|
||||||
ty_nil | ty_bot | ty_bool | ty_int(*) | ty_uint(*) | ty_float(*) |
|
ty_nil | ty_bot | ty_bool | ty_int(*) | ty_uint(*) | ty_float(*) |
|
||||||
ty_str | ty_estr(*) | ty_vec(*) | ty_evec(*) | ty_rec(*) |
|
ty_str | ty_estr(*) | ty_vec(*) | ty_evec(*) | ty_rec(*) |
|
||||||
ty_fn(*) | ty_trait(*) | ty_tup(*) | ty_var(*) |
|
ty_fn(*) | ty_tup(*) | ty_var(*) | ty_var_integral(*) |
|
||||||
ty_var_integral(*) | ty_param(*) | ty_self | ty_constr(*) |
|
ty_param(*) | ty_self | ty_constr(*) | ty_type | ty_opaque_box |
|
||||||
ty_type | ty_opaque_box | ty_opaque_closure_ptr(*) |
|
ty_opaque_closure_ptr(*) | ty_unboxed_vec(*) {
|
||||||
ty_unboxed_vec(*) {
|
|
||||||
none
|
none
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -189,12 +188,14 @@ class CoherenceChecker {
|
||||||
}
|
}
|
||||||
some(base_type) {
|
some(base_type) {
|
||||||
alt get(base_type).struct {
|
alt get(base_type).struct {
|
||||||
ty_enum(def_id, _) | ty_class(def_id, _) {
|
ty_enum(def_id, _) |
|
||||||
|
ty_class(def_id, _) |
|
||||||
|
ty_trait(def_id, _) {
|
||||||
ret some(def_id);
|
ret some(def_id);
|
||||||
}
|
}
|
||||||
_ {
|
_ {
|
||||||
fail "get_base_type() returned a type that wasn't an \
|
fail "get_base_type() returned a type that wasn't an \
|
||||||
enum or class";
|
enum, class, or trait";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -394,13 +395,13 @@ class CoherenceChecker {
|
||||||
let results = @dvec();
|
let results = @dvec();
|
||||||
for items.each |item| {
|
for items.each |item| {
|
||||||
alt item.node {
|
alt item.node {
|
||||||
item_class(*) | item_enum(*) {
|
item_class(*) | item_enum(*) | item_trait(*) {
|
||||||
results.push(local_def(item.id));
|
results.push(local_def(item.id));
|
||||||
}
|
}
|
||||||
|
|
||||||
item_const(*) | item_fn(*) | item_mod(*) |
|
item_const(*) | item_fn(*) | item_mod(*) |
|
||||||
item_foreign_mod(*) | item_ty(*) | item_trait(*) |
|
item_foreign_mod(*) | item_ty(*) | item_impl(*) |
|
||||||
item_impl(*) | item_mac(*) {
|
item_mac(*) {
|
||||||
// Nothing to do.
|
// Nothing to do.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue