minishell/ast/src/print_ast/ast_print_node.c
2024-10-12 17:54:07 +02:00

88 lines
2.5 KiB
C

/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ast_print_node.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: rparodi <rparodi@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/07/26 13:07:12 by rparodi #+# #+# */
/* Updated: 2024/10/12 17:51:14 by rparodi ### ########.fr */
/* */
/* ************************************************************************** */
#include "ast/_print_ast.h"
void ast_print_node_variable_assignment(t_ast_node self)
{
if (self == NULL)
return ;
if (self->kind != AST_VARIABLE_ASSIGNMENT)
return ;
if (self->data.variable_assignment.bang)
printf("! ");
printf("%s=", self->data.variable_assignment.name);
if (self->data.variable_assignment.value != NULL)
ast_print(self->data.variable_assignment.value);
printf(" ");
}
void ast_print_node_pipeline(t_ast_node self)
{
t_usize i;
if (self == NULL)
return ;
if (self->kind != AST_PIPELINE)
return ;
if (self->data.pipeline.bang)
printf("! ");
if (self->data.pipeline.statements.len != 0)
{
i = 0;
ast_print(self->data.pipeline.statements.buffer[i++]);
while (i < self->data.pipeline.statements.len)
{
printf(" | ");
ast_print(self->data.pipeline.statements.buffer[i++]);
}
}
i = 0;
while (i < self->data.pipeline.suffixes_redirections.len)
{
printf(" ");
ast_print(self->data.pipeline.suffixes_redirections.buffer[i++]);
}
_print_term(self->data.pipeline.term);
}
void ast_print_node_list(t_ast_node self)
{
t_usize i;
if (self == NULL)
return ;
if (self->kind != AST_LIST)
return ;
ast_print(self->data.list.left);
if (self->data.list.op == AST_LIST_OR)
printf(" || ");
if (self->data.list.op == AST_LIST_AND)
printf(" && ");
ast_print(self->data.list.right);
i = 0;
while (i < self->data.list.suffixes_redirections.len)
{
ast_print(self->data.list.suffixes_redirections.buffer[i++]);
printf(" ");
}
_print_term(self->data.list.term);
}
void ast_print_node_extglob(t_ast_node self)
{
if (self == NULL)
return ;
if (self->kind != AST_EXTGLOB)
return ;
printf("%s", self->data.extglob.pattern);
}