fix: memory issues, parser errors and get_ast_if returning always NULL

This commit is contained in:
matteo 2026-01-30 16:51:10 +01:00 committed by Matteo Flebus
parent 5740195cb3
commit 52d35cf355
4 changed files with 5 additions and 2 deletions

View file

@ -201,6 +201,8 @@ int exec_ast_command(struct ast_command *command, struct hash_map *vars)
int exec_ast_if(struct ast_if *if_node, struct hash_map *vars) int exec_ast_if(struct ast_if *if_node, struct hash_map *vars)
{ {
if (if_node == NULL)
return 2;
int cond = execution(if_node->condition, vars); int cond = execution(if_node->condition, vars);
if (cond == 0) if (cond == 0)
return execution(if_node->then_clause, vars); return execution(if_node->then_clause, vars);

View file

@ -140,6 +140,7 @@ bool grammar_init(void)
// Element // Element
add_first(RULE_ELEMENT, TOKEN_WORD); add_first(RULE_ELEMENT, TOKEN_WORD);
add_first(RULE_ELEMENT, TOKEN_ASSIGNMENT_WORD);
add_firsts(RULE_ELEMENT, first(RULE_REDIRECTION)); add_firsts(RULE_ELEMENT, first(RULE_REDIRECTION));
// Prefix // Prefix

View file

@ -281,7 +281,7 @@ struct ast *parse_simple_command(struct lexer_context *ctx)
struct ast *parse_element(struct lexer_context *ctx) struct ast *parse_element(struct lexer_context *ctx)
{ {
struct token *token = PEEK_TOKEN(); struct token *token = PEEK_TOKEN();
if (token->type == TOKEN_WORD) if (token->type == TOKEN_WORD || token->type == TOKEN_ASSIGNMENT_WORD)
{ {
token = POP_TOKEN(); token = POP_TOKEN();
return ast_create_word(token->data); return ast_create_word(token->data);

View file

@ -19,7 +19,7 @@ struct ast *ast_create_if(struct ast *condition, struct ast *then_clause,
struct ast_if *ast_get_if(struct ast *node) struct ast_if *ast_get_if(struct ast *node)
{ {
if (node == NULL || node->type == AST_IF) if (node == NULL || node->type != AST_IF)
return NULL; return NULL;
return node->data; return node->data;
} }