fix: memory issues, parser errors and get_ast_if returning always NULL
This commit is contained in:
parent
5740195cb3
commit
52d35cf355
4 changed files with 5 additions and 2 deletions
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue