mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-04 22:02:52 +01:00
Add KeywordModifierSet helper for conversion to (likely SemIR) enums (#4290)
(based on https://github.com/carbon-language/carbon-lang/pull/4272#discussion_r1751001345) Could haggle over the name "ToEnum" probably avoids the debate over "enumeration" (the type being returned) v "enumerator" (the value being returned) --------- Co-authored-by: Jon Ross-Perkins <jperkins@google.com>
This commit is contained in:
co-authored by
Jon Ross-Perkins
parent
6311552fcc
commit
b8f61a712e
@@ -194,18 +194,15 @@ static auto BuildFunctionDecl(Context& context,
|
||||
DiagnoseModifiers(context, introducer, is_definition, parent_scope_inst_id,
|
||||
parent_scope_inst);
|
||||
bool is_extern = introducer.modifier_set.HasAnyOf(KeywordModifierSet::Extern);
|
||||
SemIR::FunctionFields::VirtualModifier virtual_modifier =
|
||||
SemIR::FunctionFields::VirtualModifier::None;
|
||||
|
||||
if (introducer.modifier_set.HasAnyOf(KeywordModifierSet::Virtual)) {
|
||||
virtual_modifier = SemIR::FunctionFields::VirtualModifier::Virtual;
|
||||
}
|
||||
if (introducer.modifier_set.HasAnyOf(KeywordModifierSet::Abstract)) {
|
||||
virtual_modifier = SemIR::FunctionFields::VirtualModifier::Abstract;
|
||||
}
|
||||
if (introducer.modifier_set.HasAnyOf(KeywordModifierSet::Impl)) {
|
||||
virtual_modifier = SemIR::FunctionFields::VirtualModifier::Impl;
|
||||
}
|
||||
auto virtual_modifier =
|
||||
introducer.modifier_set.ToEnum<SemIR::Function::VirtualModifier>()
|
||||
.Case(KeywordModifierSet::Virtual,
|
||||
SemIR::Function::VirtualModifier::Virtual)
|
||||
.Case(KeywordModifierSet::Abstract,
|
||||
SemIR::Function::VirtualModifier::Abstract)
|
||||
.Case(KeywordModifierSet::Impl,
|
||||
SemIR::Function::VirtualModifier::Impl)
|
||||
.Default(SemIR::Function::VirtualModifier::None);
|
||||
if (introducer.modifier_set.HasAnyOf(KeywordModifierSet::Interface)) {
|
||||
// TODO: Once we are saving the modifiers for a function, add check that
|
||||
// the function may only be defined if it is marked `default` or `final`.
|
||||
|
||||
Reference in New Issue
Block a user