diff --git a/ast/src/from_node/dev_node.c b/ast/src/from_node/dev_node.c index ffe21213..cc0c762c 100644 --- a/ast/src/from_node/dev_node.c +++ b/ast/src/from_node/dev_node.c @@ -6,15 +6,13 @@ /* By: rparodi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/08/09 15:07:10 by rparodi #+# #+# */ -/* Updated: 2024/08/09 15:16:00 by rparodi ### ########.fr */ +/* Updated: 2024/08/14 17:28:46 by maiboyer ### ########.fr */ /* */ /* ************************************************************************** */ #include "ast/_from_node.h" #include "ast/ast.h" #include "gmr/field_identifiers.h" -#include "gmr/field_identifiers.h" -#include "gmr/symbols.h" #include "gmr/symbols.h" #include "me/str/str.h" #include "me/types.h" @@ -22,10 +20,9 @@ #include "parser/api.h" #include -t_error build_sym_negated_command(\ - t_parse_node self, t_const_str input, t_ast_node *out) +t_error build_sym_negated_command(t_parse_node self, t_const_str input, t_ast_node *out) { - t_ast_node ret; + t_ast_node ret; (void)(out); (void)(input); @@ -42,12 +39,12 @@ t_error build_sym_negated_command(\ return (*out = ret, NO_ERROR); } -t_error build_sym_pipeline(\ - t_parse_node self, t_const_str input, t_ast_node *out) +t_error build_sym_pipeline(t_parse_node self, t_const_str input, t_ast_node *out) { - t_ast_node ret; - t_ast_node tmp; - t_usize i; + t_ast_node ret; + t_ast_node tmp; + t_ast_node tmp2; + t_usize i; (void)(out); (void)(input); @@ -61,16 +58,23 @@ t_error build_sym_pipeline(\ while (i < ts_node_child_count(self)) { if (!ts_node_is_named(ts_node_child(self, i)) && (i++, true)) - continue ; + continue; if (ast_from_node(ts_node_child(self, i), input, &tmp)) return (ast_free(ret), ERROR); - vec_ast_push(&ret->data.pipeline.statements, tmp); + if (tmp->kind == AST_PIPELINE) + { + while (!vec_ast_pop_front(&tmp->data.pipeline.statements, &tmp2)) + vec_ast_push(&ret->data.pipeline.statements, tmp2); + ast_free(tmp); + } + else + vec_ast_push(&ret->data.pipeline.statements, tmp); i++; } return (*out = ret, NO_ERROR); } -t_error build_sym_comment(t_parse_node self, t_const_str input, t_ast_node *out) +t_error build_sym_comment(t_parse_node self, t_const_str input, t_ast_node *out) { (void)(out); (void)(input); @@ -83,11 +87,10 @@ t_error build_sym_comment(t_parse_node self, t_const_str input, t_ast_node *out) return (NO_ERROR); } -t_error build_sym_variable_assignment(\ - t_parse_node self, t_const_str input, t_ast_node *out) +t_error build_sym_variable_assignment(t_parse_node self, t_const_str input, t_ast_node *out) { - t_ast_node ret; - t_parse_node temp_ast; + t_ast_node ret; + t_parse_node temp_ast; (void)(self); (void)(input); @@ -106,8 +109,7 @@ t_error build_sym_variable_assignment(\ } if (ts_node_child_count(self) > 2) { - if (ast_from_node(ts_node_child(self, 2), \ - input, &ret->data.variable_assignment.value)) + if (ast_from_node(ts_node_child(self, 2), input, &ret->data.variable_assignment.value)) return (ast_free(ret), ERROR); } return (*out = ret, NO_ERROR); diff --git a/ast/src/from_node/node_utils2.c b/ast/src/from_node/node_utils2.c index 12576edb..3b27ebec 100644 --- a/ast/src/from_node/node_utils2.c +++ b/ast/src/from_node/node_utils2.c @@ -6,15 +6,13 @@ /* By: rparodi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/08/06 18:27:48 by rparodi #+# #+# */ -/* Updated: 2024/08/06 18:30:53 by rparodi ### ########.fr */ +/* Updated: 2024/08/14 17:31:57 by maiboyer ### ########.fr */ /* */ /* ************************************************************************** */ #include "ast/_from_node.h" #include "ast/ast.h" #include "gmr/field_identifiers.h" -#include "gmr/field_identifiers.h" -#include "gmr/symbols.h" #include "gmr/symbols.h" #include "me/str/str.h" #include "me/types.h" @@ -22,13 +20,13 @@ #include "parser/api.h" #include -void _append_redirection(t_ast_node node, t_ast_node redirection) +void _append_redirection(t_ast_node node, t_ast_node redirection) { - t_vec_ast *vec; + t_vec_ast *vec; vec = NULL; - if (!(redirection->kind == AST_FILE_REDIRECTION || \ - redirection->kind == AST_HEREDOC_REDIRECTION)) + + if (node == NULL || redirection == NULL || !(redirection->kind == AST_FILE_REDIRECTION || redirection->kind == AST_HEREDOC_REDIRECTION)) return (ast_free(redirection)); if (node->kind == AST_CASE) vec = &node->data.case_.suffixes_redirections; @@ -37,9 +35,9 @@ void _append_redirection(t_ast_node node, t_ast_node redirection) else if (node->kind == AST_COMPOUND_STATEMENT) vec = &node->data.compound_statement.suffixes_redirections; else if (node->kind == AST_LIST) - vec = &node->data.list.suffixes_redirections; - else if (node->kind == AST_PIPELINE) - vec = &node->data.pipeline.suffixes_redirections; + return (_append_redirection(node->data.list.right, redirection)); + else if (node->kind == AST_PIPELINE && node->data.pipeline.statements.len != 0) + return (_append_redirection(node->data.pipeline.statements.buffer[node->data.pipeline.statements.len - 1], redirection)); else if (node->kind == AST_SUBSHELL) vec = &node->data.subshell.suffixes_redirections; else @@ -50,9 +48,9 @@ void _append_redirection(t_ast_node node, t_ast_node redirection) (ast_free(redirection)); } -t_ast_terminator_kind _select_term(t_parse_node node) +t_ast_terminator_kind _select_term(t_parse_node node) { - t_symbol symbol; + t_symbol symbol; symbol = ts_node_grammar_symbol(ts_node_child(node, 0)); if (symbol == anon_sym_SEMI) @@ -63,10 +61,10 @@ t_ast_terminator_kind _select_term(t_parse_node node) return (AST_TERM_NONE); } -t_str _extract_str(t_parse_node self, t_const_str input) +t_str _extract_str(t_parse_node self, t_const_str input) { - t_usize start; - t_usize end; + t_usize start; + t_usize end; t_str result; start = ts_node_start_byte(self);