Add framework for the extern keyword. (#3755)

This doesn't add full support. I'm separating it out to make the effects
of the modifier changes clearer for review. I'm restructuring a little
with the expectation that we'll have some more categories of modifier
keywords in the future (similar to `extern`, these may not be in a "set"
such as access), and thus easily scaling up to a few more would be
useful.
This commit is contained in:
Jon Ross-Perkins
2024-03-08 16:01:12 +00:00
committed by GitHub
parent 56d70dc3a2
commit 096daecc57
21 changed files with 241 additions and 102 deletions
+11 -3
View File
@@ -101,17 +101,25 @@ static auto BuildFunctionDecl(Context& context,
// Process modifiers.
auto modifiers = DiagnoseModifiers(context, name_context.target_scope_id);
if (!!(modifiers & KeywordModifierSet::Access)) {
context.TODO(context.decl_state_stack().innermost().saw_access_modifier,
context.TODO(context.decl_state_stack().innermost().modifier_node_id(
ModifierOrder::Access),
"access modifier");
}
if (!!(modifiers & KeywordModifierSet::Extern)) {
context.TODO(context.decl_state_stack().innermost().modifier_node_id(
ModifierOrder::Extern),
"extern modifier");
}
if (!!(modifiers & KeywordModifierSet::Method)) {
context.TODO(context.decl_state_stack().innermost().saw_decl_modifier,
context.TODO(context.decl_state_stack().innermost().modifier_node_id(
ModifierOrder::Decl),
"method modifier");
}
if (!!(modifiers & 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`.
context.TODO(context.decl_state_stack().innermost().saw_decl_modifier,
context.TODO(context.decl_state_stack().innermost().modifier_node_id(
ModifierOrder::Decl),
"interface modifier");
}
context.decl_state_stack().Pop(DeclState::Fn);