mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 12:21:06 +01:00
Make type contexts expect a value of type Type. (#2357)
In particular, this means that a type can implement `ImplicitAs(Type)` and have values of that type behave like types.
This implies that `()` and `{}` are no longer types. They are now values whose type is the result of converting `()` or `{}` to type `Type`, as has been discussed recently and seems to be the supported direction. This fixes various cases where these types were previously mishandled.
This commit is contained in:
@@ -71,7 +71,7 @@ void AbstractPattern::AppendElementsTo(
|
||||
}
|
||||
} else if (const auto* value = value_.dyn_cast<const Value*>()) {
|
||||
if (const auto* tuple = dyn_cast<TupleValue>(value)) {
|
||||
const auto* tuple_type = cast<TupleValue>(type_);
|
||||
const auto* tuple_type = cast<TupleType>(type_);
|
||||
CARBON_CHECK(tuple->elements().size() == tuple_type->elements().size());
|
||||
for (size_t i = 0; i != tuple->elements().size(); ++i) {
|
||||
out.push_back(
|
||||
@@ -180,7 +180,7 @@ auto PatternMatrix::FirstColumnDiscriminators() const -> DiscriminatorSet {
|
||||
continue;
|
||||
case AbstractPattern::Compound: {
|
||||
const Value& type = row[0].type();
|
||||
if (const auto* tuple = dyn_cast<TupleValue>(&type)) {
|
||||
if (const auto* tuple = dyn_cast<TupleType>(&type)) {
|
||||
// If we find a tuple match, we've found all constructors (there's
|
||||
// only one!) and none were missing.
|
||||
return {
|
||||
|
||||
Reference in New Issue
Block a user