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);
if (p->fdout != STDOUT)
dup2_close(p->fdout, STDOUT);
ft_lstdel(&p->redirs, ft_lst_cfree);
return (0);
}

View file

@ -18,18 +18,18 @@ int lexer_great(t_list **alst, t_lexer *lexer)
token = (*alst)->content;
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;
lexer->pos++;
token_append(token, lexer, 0, 0);
lexer->pos++;
return (lexer_greatand(alst, lexer));
}
if (lexer->str[lexer->pos + 1] == '>')
if (lexer->str[lexer->pos] == '>')
{
token->type = TK_DGREAT;
lexer->pos++;
token_append(token, lexer, 0, 0);
lexer->pos++;
lexer->state = DEFAULT;

View file

@ -18,20 +18,20 @@ int lexer_less(t_list **alst, t_lexer *lexer)
token = (*alst)->content;
token_append(token, lexer, 0, 0);
if (lexer->str[lexer->pos + 1] == '&')
lexer->pos++;
if (lexer->str[lexer->pos] == '&')
{
token->type = TK_LESSAND;
lexer->pos++;
token_append(token, lexer, 0, 0);
lexer->pos++;
return (lexer_lessand(alst, lexer));
}
if (lexer->str[lexer->pos + 1] == '<')
if (lexer->str[lexer->pos] == '<')
{
token_free(token, 0);
(*alst)->content = token_init();
token->type = TK_DLESS;
lexer->pos += 2;
lexer->pos++;
push(&lexer->stack, DLESS);
lexer->state = DEFAULT;
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)
lexer.state = DLESS;
ltoken = ft_lstlast(token);
if (lexer_lex((token ? &ltoken : &token), &lexer))
if (lexer_lex(token ? &ltoken : &token, &lexer))
return (1);
DG("[{mag}%s{eoc}] stack=[%i] state=[%i]", lexer.str, lexer.stack ? *(int*)lexer.stack->content : 0, lexer.state);
token_print(token);
@ -75,7 +75,6 @@ int interactive_shell()
btree_print(STDBUG, ast, &ft_putast);
if (ft_exec(&ast))
return (1);
DG("gonna free [%s] @ [%p]", lexer.str, lexer.str);
ft_strdel(&lexer.str);
return (0);
}