From 8b5c742002ee48002334303ed03bd2440845c9d6 Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Thu, 23 Mar 2017 15:19:41 +0100 Subject: [PATCH] bquotes inside dquotes lexing --- 42sh/Makefile | 1 + 42sh/includes/lexer.h | 3 ++- 42sh/src/lexer/get_lexer_stack2.c | 21 +++++++++++++++++++++ 42sh/src/lexer/lexer_bquote.c | 5 +++-- 4 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 42sh/src/lexer/get_lexer_stack2.c diff --git a/42sh/Makefile b/42sh/Makefile index 10862470..715952e6 100644 --- a/42sh/Makefile +++ b/42sh/Makefile @@ -214,6 +214,7 @@ job_control/sigttin_handler.c\ job_control/sigttou_handler.c\ lexer/do_lexer_routine.c\ lexer/get_lexer_stack.c\ +lexer/get_lexer_stack2.c\ lexer/get_reserved_words.c\ lexer/get_state_global.c\ lexer/get_state_redir.c\ diff --git a/42sh/includes/lexer.h b/42sh/includes/lexer.h index 91ec40ae..93fa6b49 100644 --- a/42sh/includes/lexer.h +++ b/42sh/includes/lexer.h @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/12/01 12:15:50 by jhalford #+# #+# */ -/* Updated: 2017/03/22 22:07:49 by wescande ### ########.fr */ +/* Updated: 2017/03/23 15:18:36 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -85,6 +85,7 @@ char *stack_to_prompt(t_list *stack); t_lexstate get_state_global(t_lexer *lexer); t_lexstate get_state_redir(t_lexer *lexer); int get_lexer_stack(t_lexer lexer); +int get_lexer_stack2(t_lexer lexer); int get_reserved_words(t_list *temp); int isrw_delim(t_type type); int keep_last_type(t_type *type, t_list *token); diff --git a/42sh/src/lexer/get_lexer_stack2.c b/42sh/src/lexer/get_lexer_stack2.c new file mode 100644 index 00000000..015ae3a4 --- /dev/null +++ b/42sh/src/lexer/get_lexer_stack2.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* get_lexer_stack2.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/23 15:15:46 by jhalford #+# #+# */ +/* Updated: 2017/03/23 15:19:00 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +int get_lexer_stack2(t_lexer lexer) +{ + if (!(lexer.stack && lexer.stack->next)) + return (0); + return (*(int*)lexer.stack->next->content); +} + diff --git a/42sh/src/lexer/lexer_bquote.c b/42sh/src/lexer/lexer_bquote.c index 88f5af97..c2749334 100644 --- a/42sh/src/lexer/lexer_bquote.c +++ b/42sh/src/lexer/lexer_bquote.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/09 22:03:48 by jhalford #+# #+# */ -/* Updated: 2017/03/23 03:41:34 by wescande ### ########.fr */ +/* Updated: 2017/03/23 15:17:27 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -36,7 +36,8 @@ int lexer_bquote(t_list **alst, t_lexer *lexer) if (lexer->str[lexer->pos] == 0) return (push(&lexer->stack, BACKSLASH) ? 0 : 0); } - token_append(token, lexer, back || token->type == TK_ASSIGNMENT_WORD, back); + token_append(token, lexer, back || token->type == TK_ASSIGNMENT_WORD + || get_lexer_stack2(*lexer) == DQUOTE, back); lexer->pos++; return (lexer_lex(alst, lexer)); }