mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-24 21:10:12 +01:00
Replace impl fn with override fn (#6008)
This proposal renames the syntax used to mark an overriding definition of a virtual method from `impl fn` to `override fn` to avoid ambiguity: besides indicating an overriding virtual function, it can be parsed as an "impl" declaration when the construct following "impl" begins with a lambda introduced by "fn". Closes #5711 --------- Co-authored-by: Richard Smith <richard@metafoo.co.uk>
This commit is contained in:
co-authored by
Richard Smith
parent
973d721916
commit
f4bd6e42f9
@@ -128,7 +128,8 @@ static auto GetVirtualModifier(const KeywordModifierSet& modifier_set)
|
||||
SemIR::Function::VirtualModifier::Virtual)
|
||||
.Case(KeywordModifierSet::Abstract,
|
||||
SemIR::Function::VirtualModifier::Abstract)
|
||||
.Case(KeywordModifierSet::Impl, SemIR::Function::VirtualModifier::Impl)
|
||||
.Case(KeywordModifierSet::Override,
|
||||
SemIR::Function::VirtualModifier::Override)
|
||||
.Default(SemIR::Function::VirtualModifier::None);
|
||||
}
|
||||
|
||||
@@ -342,10 +343,11 @@ static auto RequestVtableIfVirtual(
|
||||
}
|
||||
|
||||
auto& class_info = context.classes().Get(class_decl->class_id);
|
||||
if (virtual_modifier == SemIR::Function::VirtualModifier::Impl &&
|
||||
if (virtual_modifier == SemIR::Function::VirtualModifier::Override &&
|
||||
!class_info.base_id.has_value()) {
|
||||
CARBON_DIAGNOSTIC(ImplWithoutBase, Error, "impl without base class");
|
||||
context.emitter().Emit(node_id, ImplWithoutBase);
|
||||
CARBON_DIAGNOSTIC(OverrideWithoutBase, Error,
|
||||
"override without base class");
|
||||
context.emitter().Emit(node_id, OverrideWithoutBase);
|
||||
virtual_modifier = SemIR::Function::VirtualModifier::None;
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user