summaryrefslogtreecommitdiff
path: root/src/parser.c
diff options
context:
space:
mode:
authorJohnny Richard <johnny@johnnyrichard.com>2023-04-30 00:43:25 +0200
committerJohnny Richard <johnny@johnnyrichard.com>2023-04-30 00:43:25 +0200
commit2cabcc44858627f0951d9b702baf8120be7c5cf3 (patch)
treedd634dd1813c0b5b40a9aaf2ef420883703d5fc2 /src/parser.c
parent9f034b4ebfe15844ea610ec2dd2fca1a9f7ce338 (diff)
style: Add -Wmissing-declarations to CC CFLAGS
The refactoring also replace a if statement by switch statement. Signed-off-by: Johnny Richard <johnny@johnnyrichard.com>
Diffstat (limited to 'src/parser.c')
-rw-r--r--src/parser.c49
1 files changed, 25 insertions, 24 deletions
diff --git a/src/parser.c b/src/parser.c
index e02d1fe..6b954c2 100644
--- a/src/parser.c
+++ b/src/parser.c
@@ -91,7 +91,7 @@ parser_parse_type(type_t *type, parser_t *parser)
return false;
}
-bool
+static bool
parser_literal_integer_node(ast_node_t *node, token_t *token)
{
char number_as_str[token->value.size];
@@ -118,35 +118,36 @@ token_to_binary_operation_kind(token_t *token)
}
}
-bool
+static bool
parser_parse_factor(parser_t *parser, ast_node_t *node)
{
token_t token;
lexer_next_token(parser->lexer, &token);
- if (token.kind == TOKEN_NUMBER) {
- return parser_literal_integer_node(node, &token);
- } else if (token.kind == TOKEN_OPAREN) {
- parser_parse_expression(parser, node);
- if (!drop_expected_token(parser, TOKEN_CPAREN))
+ switch (token.kind) {
+ case TOKEN_NUMBER:
+ return parser_literal_integer_node(node, &token);
+ case TOKEN_OPAREN:
+ if (!parser_parse_expression(parser, node))
+ return false;
+ if (!drop_expected_token(parser, TOKEN_CPAREN))
+ return false;
+ return true;
+ case TOKEN_NAME:
+ /// FIXME: Check if the identifier is defined
+ ast_node_init_identifier(node, token.value);
+ return true;
+ default: {
+ parser_error_t error;
+ error.token = token;
+ sprintf(error.message, "unexpected '%s (" SVFMT ")' token", token_kind_to_str(token.kind), SVARG(&token.value));
+ parser->errors[parser->errors_len++] = error;
return false;
- return true;
- } else if (token.kind == TOKEN_NAME) {
- /// FIXME: Check if the identifier is defined
- ast_node_init_identifier(node, token.value);
- return true;
+ }
}
-
- // FIXME: Extract this erros logic to a function
- parser_error_t error;
- error.token = token;
- sprintf(error.message, "unexpected '%s (" SVFMT ")' token", token_kind_to_str(token.kind), SVARG(&token.value));
- parser->errors[parser->errors_len++] = error;
-
- return false;
}
-bool
+static bool
parser_parse_term(parser_t *parser, ast_node_t *node)
{
if (!parser_parse_factor(parser, node))
@@ -207,7 +208,7 @@ parser_parse_expression(parser_t *parser, ast_node_t *node)
return true;
}
-bool
+static bool
parser_parse_return_stmt(parser_t *parser, ast_node_t *node)
{
ast_node_t *argument_token = ast_node_new();
@@ -221,7 +222,7 @@ parser_parse_return_stmt(parser_t *parser, ast_node_t *node)
return true;
}
-bool
+static bool
parser_parse_variable_definition(parser_t *parser, string_view_t variable_name, ast_node_t *node)
{
if (!drop_expected_token(parser, TOKEN_COLON))
@@ -250,7 +251,7 @@ parser_parse_variable_definition(parser_t *parser, string_view_t variable_name,
return true;
}
-bool
+static bool
parser_parse_block_declarations(parser_t *parser, vector_t *body)
{
token_t current_token;