Reorganize interface parsing so that it's shared with class and constraint (#2666)

We could similarly add others -- this is intended to make it easy to add more that parse essentially the same.

The functionality expected is that types will use GetDeclarationContext in order to error on certain functionality in the declaration scope loop. e.g., with how constraints and interfaces currently don't allow definitions.

I've only moved out `package` because it's only valid on the top line. It might still be good to parse it later, but with slightly different logic because it would always be an error, and the declaration context isn't quite the right framing for that.

Also unifies some errors with `fn`.
This commit is contained in:
Jon Ross-Perkins
2023-03-13 17:24:01 -07:00
committed by GitHub
parent 6d5c6ada59
commit e613ad5323
19 changed files with 352 additions and 130 deletions
@@ -362,6 +362,30 @@ auto SemanticsParseTreeHandler::HandleCallExpressionStart(
return true;
}
auto SemanticsParseTreeHandler::HandleClassDeclaration(
ParseTree::Node parse_node) -> bool {
emitter_->Emit(parse_node, SemanticsTodo, "HandleClassDeclaration");
return false;
}
auto SemanticsParseTreeHandler::HandleClassDefinition(
ParseTree::Node parse_node) -> bool {
emitter_->Emit(parse_node, SemanticsTodo, "HandleClassDefinition");
return false;
}
auto SemanticsParseTreeHandler::HandleClassDefinitionStart(
ParseTree::Node parse_node) -> bool {
emitter_->Emit(parse_node, SemanticsTodo, "HandleClassDefinitionStart");
return false;
}
auto SemanticsParseTreeHandler::HandleClassIntroducer(
ParseTree::Node parse_node) -> bool {
emitter_->Emit(parse_node, SemanticsTodo, "HandleClassIntroducer");
return false;
}
auto SemanticsParseTreeHandler::HandleCodeBlock(ParseTree::Node parse_node)
-> bool {
emitter_->Emit(parse_node, SemanticsTodo, "HandleCodeBlock");
@@ -691,6 +715,31 @@ auto SemanticsParseTreeHandler::HandleNameReference(ParseTree::Node parse_node)
return true;
}
auto SemanticsParseTreeHandler::HandleNamedConstraintDeclaration(
ParseTree::Node parse_node) -> bool {
emitter_->Emit(parse_node, SemanticsTodo, "HandleNamedConstraintDeclaration");
return false;
}
auto SemanticsParseTreeHandler::HandleNamedConstraintDefinition(
ParseTree::Node parse_node) -> bool {
emitter_->Emit(parse_node, SemanticsTodo, "HandleNamedConstraintDefinition");
return false;
}
auto SemanticsParseTreeHandler::HandleNamedConstraintDefinitionStart(
ParseTree::Node parse_node) -> bool {
emitter_->Emit(parse_node, SemanticsTodo,
"HandleNamedConstraintDefinitionStart");
return false;
}
auto SemanticsParseTreeHandler::HandleNamedConstraintIntroducer(
ParseTree::Node parse_node) -> bool {
emitter_->Emit(parse_node, SemanticsTodo, "HandleNamedConstraintIntroducer");
return false;
}
auto SemanticsParseTreeHandler::HandlePackageApi(ParseTree::Node parse_node)
-> bool {
emitter_->Emit(parse_node, SemanticsTodo, "HandlePackageApi");