mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 22:02:55 +01:00
Feature destructor (#2116)
This commit is contained in:
@@ -18,7 +18,7 @@ namespace Carbon {
|
||||
// Aggregate information about a function being analyzed.
|
||||
struct FunctionData {
|
||||
// The function declaration.
|
||||
Nonnull<FunctionDeclaration*> declaration;
|
||||
Nonnull<CallableDeclaration*> declaration;
|
||||
|
||||
// True if the function has a deduced return type, and we've already seen
|
||||
// a `return` statement in its body.
|
||||
@@ -72,6 +72,7 @@ static auto ResolveControlFlow(Nonnull<Statement*> statement,
|
||||
"signature.";
|
||||
}
|
||||
}
|
||||
|
||||
return Success();
|
||||
}
|
||||
case StatementKind::Break:
|
||||
@@ -138,12 +139,13 @@ static auto ResolveControlFlow(Nonnull<Statement*> statement,
|
||||
|
||||
auto ResolveControlFlow(Nonnull<Declaration*> declaration) -> ErrorOr<Success> {
|
||||
switch (declaration->kind()) {
|
||||
case DeclarationKind::DestructorDeclaration:
|
||||
case DeclarationKind::FunctionDeclaration: {
|
||||
auto& function = cast<FunctionDeclaration>(*declaration);
|
||||
if (function.body().has_value()) {
|
||||
FunctionData data = {.declaration = &function};
|
||||
auto& callable = cast<CallableDeclaration>(*declaration);
|
||||
if (callable.body().has_value()) {
|
||||
FunctionData data = {.declaration = &callable};
|
||||
CARBON_RETURN_IF_ERROR(
|
||||
ResolveControlFlow(*function.body(), std::nullopt, &data));
|
||||
ResolveControlFlow(*callable.body(), std::nullopt, &data));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user