diff --git a/exec/src/run_ast/_ast_into_str5.c b/exec/src/run_ast/_ast_into_str5.c index 06c10b1a..ca548750 100644 --- a/exec/src/run_ast/_ast_into_str5.c +++ b/exec/src/run_ast/_ast_into_str5.c @@ -6,7 +6,7 @@ /* By: maiboyer +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/09/14 12:26:51 by maiboyer #+# #+# */ -/* Updated: 2024/09/18 21:47:34 by maiboyer ### ########.fr */ +/* Updated: 2024/10/10 17:44:20 by maiboyer ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/parser/src/yarn/ast_cmd.c b/parser/src/yarn/ast_cmd.c index cd2eb3a4..f9917410 100644 --- a/parser/src/yarn/ast_cmd.c +++ b/parser/src/yarn/ast_cmd.c @@ -6,7 +6,7 @@ /* By: maiboyer +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/10/09 12:44:53 by maiboyer #+# #+# */ -/* Updated: 2024/10/10 17:19:30 by maiboyer ### ########.fr */ +/* Updated: 2024/10/10 17:48:57 by maiboyer ### ########.fr */ /* */ /* ************************************************************************** */ @@ -110,25 +110,17 @@ t_error _tok_word_expansion(t_token *tok, t_ast_node *out) t_error _tok_word_nquote(t_token *tok, t_ast_node *out) { t_ast_node ret; - t_ast_node tmp; - ret = ast_alloc(AST_WORD); - ret->data.word.kind = AST_WORD_NO_QUOTE; - tmp = ast_alloc(AST_RAW_STRING); - tmp->data.raw_string.str = (t_str)_token_to_string(tok, false); - vec_ast_push(&ret->data.word.inner, tmp); + ret = ast_alloc(AST_RAW_STRING); + ret->data.raw_string.str = (t_str)_token_to_string(tok, false); return (*out = ret, NO_ERROR); } t_error _tok_word_squote(t_token *tok, t_ast_node *out) { t_ast_node ret; - t_ast_node tmp; - ret = ast_alloc(AST_WORD); - ret->data.word.kind = AST_WORD_SINGLE_QUOTE; - tmp = ast_alloc(AST_RAW_STRING); - tmp->data.raw_string.str = (t_str)_token_to_string(tok, false); - vec_ast_push(&ret->data.word.inner, tmp); + ret = ast_alloc(AST_RAW_STRING); + ret->data.raw_string.str = (t_str)_token_to_string(tok, false); return (*out = ret, NO_ERROR); } t_error _tok_word_dquote(t_token *tok, t_ast_node *out) @@ -156,7 +148,7 @@ t_error _tok_word(t_token *tok, t_ast_node *out) if (_tok_word_expansion(tok, out)) return (ERROR); } - else if (tok->type == TOK_NQUOTE) + else if (tok->type == TOK_NQUOTE || tok->type == TOK_WHITESPACE) { if (_tok_word_nquote(tok, out)) return (ERROR); diff --git a/sources/_helper_main.c b/sources/_helper_main.c index 3e452b0f..8c3ad1c9 100644 --- a/sources/_helper_main.c +++ b/sources/_helper_main.c @@ -6,7 +6,7 @@ /* By: rparodi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/09/06 16:31:41 by rparodi #+# #+# */ -/* Updated: 2024/10/10 17:39:40 by maiboyer ### ########.fr */ +/* Updated: 2024/10/10 17:48:06 by maiboyer ### ########.fr */ /* */ /* ************************************************************************** */ @@ -26,8 +26,8 @@ #include #include -void ft_exit(t_state *maiboyerlpb, t_u8 exit_status); -void parse_str(t_state *state); +void ft_exit(t_state *maiboyerlpb, t_u8 exit_status); +t_error parse_str(t_state *state); t_error get_user_input(t_state *state) { @@ -78,7 +78,11 @@ void ft_take_args(t_state *state) if (state->str_input == NULL) ft_exit(state, 0); line_history_add(state->str_input); - parse_str(state); + if (parse_str(state)) + { + mem_free(state->str_input); + continue; + } exec_shcat(state); mem_free(state->str_input); } diff --git a/sources/main.c b/sources/main.c index 66e01d49..d54ff042 100644 --- a/sources/main.c +++ b/sources/main.c @@ -6,7 +6,7 @@ /* By: rparodi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/03/28 14:40:38 by rparodi #+# #+# */ -/* Updated: 2024/10/10 17:37:45 by maiboyer ### ########.fr */ +/* Updated: 2024/10/10 17:47:24 by maiboyer ### ########.fr */ /* */ /* ************************************************************************** */ @@ -83,25 +83,25 @@ t_error populate_env(t_hashmap_env *env, t_str envp[]) t_error yarn(t_vec_token ts, t_vec_ast *output); -void parse_str(t_state *state) +t_error parse_str(t_state *state) { t_vec_token tokens; t_vec_ast ast; if (tokenize(state->str_input, &tokens)) - return; + return (ERROR); if (ts_apply_passes(tokens, &tokens)) - return; - // TODO: remove - ts_print(&tokens); + return (ERROR); + ts_print(&tokens); // TODO: remove if (yarn(tokens, &ast)) - return ((void)printf("failed to ast build\n")); + return ((void)printf("failed to ast build\n"), (ERROR)); if (ast.len != 1) - me_abort("Unhandled error: ast.len != 1"); + return (ERROR); vec_ast_pop(&ast, &state->ast); ast_print(state->ast); printf("\nast\n"); vec_ast_free(ast); + return (NO_ERROR); } t_i32 main(t_i32 argc, t_str argv[], t_str envp[])