|
|
@@ -206,67 +206,86 @@ auto TypeStructureBuilder::Build(SemIR::TypeIterator type_iter)
|
|
|
while (true) {
|
|
|
using Step = SemIR::TypeIterator::Step;
|
|
|
CARBON_KIND_SWITCH(type_iter.Next().any) {
|
|
|
- case CARBON_KIND(Step::Done _):
|
|
|
+ case CARBON_KIND(Step::Done _): {
|
|
|
// TODO: This requires 4 SmallVector moves (two here and two in the
|
|
|
// constructor). Find a way to reduce that.
|
|
|
return TypeStructure(std::exchange(structure_, {}),
|
|
|
std::exchange(symbolic_type_indices_, {}),
|
|
|
std::exchange(concrete_types_, {}));
|
|
|
- case CARBON_KIND(Step::End _):
|
|
|
+ }
|
|
|
+ case CARBON_KIND(Step::End _): {
|
|
|
AppendStructuralConcreteCloseParen();
|
|
|
break;
|
|
|
- case CARBON_KIND(Step::ConcreteType concrete):
|
|
|
+ }
|
|
|
+ case CARBON_KIND(Step::ConcreteType concrete): {
|
|
|
AppendStructuralConcrete(concrete.type_id);
|
|
|
break;
|
|
|
- case CARBON_KIND(Step::SymbolicType _):
|
|
|
+ }
|
|
|
+ case CARBON_KIND(Step::SymbolicType _): {
|
|
|
AppendStructuralSymbolic();
|
|
|
break;
|
|
|
- case CARBON_KIND(Step::TemplateType _):
|
|
|
+ }
|
|
|
+ case CARBON_KIND(Step::TemplateType _): {
|
|
|
AppendStructuralSymbolic();
|
|
|
break;
|
|
|
- case CARBON_KIND(Step::ConcreteValue value):
|
|
|
+ }
|
|
|
+ case CARBON_KIND(Step::ConcreteValue value): {
|
|
|
AppendStructuralConcrete(
|
|
|
context_->constant_values().Get(value.inst_id));
|
|
|
break;
|
|
|
- case CARBON_KIND(Step::SymbolicValue _):
|
|
|
+ }
|
|
|
+ case CARBON_KIND(Step::SymbolicValue _): {
|
|
|
AppendStructuralSymbolic();
|
|
|
break;
|
|
|
- case CARBON_KIND(Step::StructFieldName field_name):
|
|
|
+ }
|
|
|
+ case CARBON_KIND(Step::StructFieldName field_name): {
|
|
|
AppendStructuralConcrete(field_name.name_id);
|
|
|
break;
|
|
|
- case CARBON_KIND(Step::ClassStartOnly class_start):
|
|
|
+ }
|
|
|
+ case CARBON_KIND(Step::ClassStartOnly class_start): {
|
|
|
AppendStructuralConcrete(class_start.class_id);
|
|
|
break;
|
|
|
- case CARBON_KIND(Step::ClassStart class_start):
|
|
|
+ }
|
|
|
+ case CARBON_KIND(Step::ClassStart class_start): {
|
|
|
AppendStructuralConcreteOpenParen(class_start.class_id);
|
|
|
break;
|
|
|
- case CARBON_KIND(Step::StructStartOnly _):
|
|
|
+ }
|
|
|
+ case CARBON_KIND(Step::StructStartOnly _): {
|
|
|
AppendStructuralConcrete(TypeStructure::ConcreteStructType());
|
|
|
break;
|
|
|
- case CARBON_KIND(Step::StructStart _):
|
|
|
+ }
|
|
|
+ case CARBON_KIND(Step::StructStart _): {
|
|
|
AppendStructuralConcreteOpenParen(TypeStructure::ConcreteStructType());
|
|
|
break;
|
|
|
- case CARBON_KIND(Step::TupleStartOnly _):
|
|
|
+ }
|
|
|
+ case CARBON_KIND(Step::TupleStartOnly _): {
|
|
|
AppendStructuralConcrete(TypeStructure::ConcreteTupleType());
|
|
|
break;
|
|
|
- case CARBON_KIND(Step::TupleStart _):
|
|
|
+ }
|
|
|
+ case CARBON_KIND(Step::TupleStart _): {
|
|
|
AppendStructuralConcreteOpenParen(TypeStructure::ConcreteTupleType());
|
|
|
break;
|
|
|
- case CARBON_KIND(Step::InterfaceStartOnly interface_start):
|
|
|
+ }
|
|
|
+ case CARBON_KIND(Step::InterfaceStartOnly interface_start): {
|
|
|
AppendStructuralConcrete(interface_start.interface_id);
|
|
|
break;
|
|
|
- case CARBON_KIND(Step::InterfaceStart interface_start):
|
|
|
+ }
|
|
|
+ case CARBON_KIND(Step::InterfaceStart interface_start): {
|
|
|
AppendStructuralConcreteOpenParen(interface_start.interface_id);
|
|
|
break;
|
|
|
- case CARBON_KIND(Step::IntStart int_start):
|
|
|
+ }
|
|
|
+ case CARBON_KIND(Step::IntStart int_start): {
|
|
|
AppendStructuralConcreteOpenParen(int_start.type_id);
|
|
|
break;
|
|
|
- case CARBON_KIND(Step::ArrayStart _):
|
|
|
+ }
|
|
|
+ case CARBON_KIND(Step::ArrayStart _): {
|
|
|
AppendStructuralConcreteOpenParen(TypeStructure::ConcreteArrayType());
|
|
|
break;
|
|
|
- case CARBON_KIND(Step::PointerStart _):
|
|
|
+ }
|
|
|
+ case CARBON_KIND(Step::PointerStart _): {
|
|
|
AppendStructuralConcreteOpenParen(TypeStructure::ConcretePointerType());
|
|
|
break;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|