mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-04 22:02:52 +01:00
Basic support for impl virtual override keyword (#2493)
Features:
* Add basic support for `impl` virtual methods (override virtual method)
* Error on invalid declaration for `impl` and `virtual`, covering simple use cases
* Add `abstract` fn parser-only support
Changes:
* Modify parser to handle new function specifiers, resolve conflicts
* Group `virtual_override` and `FN`, and group `impl_kind` and `IMPL` to avoid ambiguities with around `impl` token parsing
* Add new `VirtualOverride` enum for function declarations, and matching `virt_override() -> VirtualOverride` getter
* Update function declaration logic
Depends on #2462
This commit is contained in:
@@ -342,14 +342,15 @@ auto FunctionDeclaration::Create(Nonnull<Arena*> arena,
|
||||
Nonnull<TuplePattern*> param_pattern,
|
||||
ReturnTerm return_term,
|
||||
std::optional<Nonnull<Block*>> body,
|
||||
bool is_virtual)
|
||||
VirtualOverride virt_override)
|
||||
-> ErrorOr<Nonnull<FunctionDeclaration*>> {
|
||||
DeducedParameters split_params;
|
||||
CARBON_ASSIGN_OR_RETURN(split_params,
|
||||
SplitDeducedParameters(source_loc, deduced_params));
|
||||
return arena->New<FunctionDeclaration>(
|
||||
source_loc, name, std::move(split_params.resolved_params),
|
||||
split_params.self_pattern, param_pattern, return_term, body, is_virtual);
|
||||
split_params.self_pattern, param_pattern, return_term, body,
|
||||
virt_override);
|
||||
}
|
||||
|
||||
void CallableDeclaration::PrintDepth(int depth, llvm::raw_ostream& out) const {
|
||||
|
||||
Reference in New Issue
Block a user