lexing problems w/ less and great

This commit is contained in:
Jack Halford 2017-02-19 15:03:51 +01:00
parent 8abf9fe433
commit c65e07038b
4 changed files with 10 additions and 10 deletions

View file

@ -54,5 +54,6 @@ int process_redirect(t_process *p)
dup2_close(p->fdin, STDIN); dup2_close(p->fdin, STDIN);
if (p->fdout != STDOUT) if (p->fdout != STDOUT)
dup2_close(p->fdout, STDOUT); dup2_close(p->fdout, STDOUT);
ft_lstdel(&p->redirs, ft_lst_cfree);
return (0); return (0);
} }

View file

@ -18,18 +18,18 @@ int lexer_great(t_list **alst, t_lexer *lexer)
token = (*alst)->content; token = (*alst)->content;
token_append(token, lexer, 0, 0); token_append(token, lexer, 0, 0);
if (lexer->str[lexer->pos + 1] == '&') DG("lexer->str=[%s]", lexer->str);
lexer->pos++;
if (lexer->str[lexer->pos] == '&')
{ {
token->type = TK_GREATAND; token->type = TK_GREATAND;
lexer->pos++;
token_append(token, lexer, 0, 0); token_append(token, lexer, 0, 0);
lexer->pos++; lexer->pos++;
return (lexer_greatand(alst, lexer)); return (lexer_greatand(alst, lexer));
} }
if (lexer->str[lexer->pos + 1] == '>') if (lexer->str[lexer->pos] == '>')
{ {
token->type = TK_DGREAT; token->type = TK_DGREAT;
lexer->pos++;
token_append(token, lexer, 0, 0); token_append(token, lexer, 0, 0);
lexer->pos++; lexer->pos++;
lexer->state = DEFAULT; lexer->state = DEFAULT;

View file

@ -18,20 +18,20 @@ int lexer_less(t_list **alst, t_lexer *lexer)
token = (*alst)->content; token = (*alst)->content;
token_append(token, lexer, 0, 0); token_append(token, lexer, 0, 0);
if (lexer->str[lexer->pos + 1] == '&') lexer->pos++;
if (lexer->str[lexer->pos] == '&')
{ {
token->type = TK_LESSAND; token->type = TK_LESSAND;
lexer->pos++;
token_append(token, lexer, 0, 0); token_append(token, lexer, 0, 0);
lexer->pos++; lexer->pos++;
return (lexer_lessand(alst, lexer)); return (lexer_lessand(alst, lexer));
} }
if (lexer->str[lexer->pos + 1] == '<') if (lexer->str[lexer->pos] == '<')
{ {
token_free(token, 0); token_free(token, 0);
(*alst)->content = token_init(); (*alst)->content = token_init();
token->type = TK_DLESS; token->type = TK_DLESS;
lexer->pos += 2; lexer->pos++;
push(&lexer->stack, DLESS); push(&lexer->stack, DLESS);
lexer->state = DEFAULT; lexer->state = DEFAULT;
ft_lsteadd(&lexer->heredoc_stack, ft_lstnew(alst, sizeof(alst))); ft_lsteadd(&lexer->heredoc_stack, ft_lstnew(alst, sizeof(alst)));

View file

@ -60,7 +60,7 @@ int interactive_shell()
else if (get_lexer_stack(lexer) == DLESS) else if (get_lexer_stack(lexer) == DLESS)
lexer.state = DLESS; lexer.state = DLESS;
ltoken = ft_lstlast(token); ltoken = ft_lstlast(token);
if (lexer_lex((token ? &ltoken : &token), &lexer)) if (lexer_lex(token ? &ltoken : &token, &lexer))
return (1); return (1);
DG("[{mag}%s{eoc}] stack=[%i] state=[%i]", lexer.str, lexer.stack ? *(int*)lexer.stack->content : 0, lexer.state); DG("[{mag}%s{eoc}] stack=[%i] state=[%i]", lexer.str, lexer.stack ? *(int*)lexer.stack->content : 0, lexer.state);
token_print(token); token_print(token);
@ -75,7 +75,6 @@ int interactive_shell()
btree_print(STDBUG, ast, &ft_putast); btree_print(STDBUG, ast, &ft_putast);
if (ft_exec(&ast)) if (ft_exec(&ast))
return (1); return (1);
DG("gonna free [%s] @ [%p]", lexer.str, lexer.str);
ft_strdel(&lexer.str); ft_strdel(&lexer.str);
return (0); return (0);
} }