/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/06/27 11:48:27 by dkaiser #+# #+# */
-/* Updated: 2024/07/01 11:43:59 by dkaiser ### ########.fr */
+/* Updated: 2024/07/08 16:09:32 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
enum e_node_type
{
- ASSIGN_NODE,
PIPE_NODE,
CMD_NODE,
STRING_NODE
typedef struct s_cmd
{
char **args;
+ struct s_assign **assigns;
struct s_redirection redirs[2];
} t_cmd;
union u_node_content
{
- struct s_assign assign;
struct s_pipe pipe;
struct s_cmd cmd;
char *string;
} t_node;
t_node *new_node(int type);
-t_node *new_assign_node(char *var, char *value);
t_node *new_pipe_node(t_node *left, t_node *right);
-t_node *new_cmd_node(char **args, t_redirection redirs[2]);
+t_node *new_cmd_node(char **args, t_assign **assigns, t_redirection redirs[2]);
t_node *new_string_node(char *string);
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/06/27 11:41:46 by dkaiser #+# #+# */
-/* Updated: 2024/06/28 14:55:50 by dkaiser ### ########.fr */
+/* Updated: 2024/07/08 16:15:21 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
#include "ast.h"
-static void free_assign_node(t_node *node);
static void free_pipe_node(t_node *node);
static void free_cmd_node(t_node *node);
+static void free_assigns(t_assign **assigns);
void free_node(t_node *node)
{
- if (node->type == ASSIGN_NODE)
- free_assign_node(node);
- else if (node->type == PIPE_NODE)
+ if (node->type == PIPE_NODE)
free_pipe_node(node);
else if (node->type == CMD_NODE)
free_cmd_node(node);
i++;
}
free(node->content.cmd.args);
+ free_assigns(node->content.cmd.assigns);
free(node->content.cmd.redirs[0].specifier);
free(node->content.cmd.redirs[1].specifier);
}
+
+static void free_assigns(t_assign **assigns)
+{
+ int i;
+
+ i = 0;
+ while (assigns[i] != NULL)
+ {
+ free(assigns[i]->var);
+ free(assigns[i]->value);
+ free(assigns[i]);
+ i++;
+ }
+ free(assigns);
+}
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/06/27 11:21:03 by dkaiser #+# #+# */
-/* Updated: 2024/06/28 15:04:15 by dkaiser ### ########.fr */
+/* Updated: 2024/07/08 16:10:44 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
return (node);
}
-t_node *new_assign_node(char *var, char *value)
-{
- t_node *node;
-
- node = new_node(ASSIGN_NODE);
- if (node == NULL)
- return (NULL);
- node->content.assign.var = var;
- node->content.assign.value = value;
- return (node);
-}
-
t_node *new_pipe_node(t_node *left, t_node *right)
{
t_node *node;
return (node);
}
-t_node *new_cmd_node(char **args, t_redirection redirs[2])
+t_node *new_cmd_node(char **args, t_assign **assigns, t_redirection redirs[2])
{
t_node *node;
if (node == NULL)
return (NULL);
node->content.cmd.args = args;
+ node->content.cmd.assigns = assigns;
node->content.cmd.redirs[0] = redirs[0];
node->content.cmd.redirs[1] = redirs[1];
return (node);