=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/cmd-parse.y,v retrieving revision 1.21 retrieving revision 1.22 diff -u -r1.21 -r1.22 --- src/usr.bin/tmux/cmd-parse.y 2019/12/12 15:01:54 1.21 +++ src/usr.bin/tmux/cmd-parse.y 2020/01/27 08:23:42 1.22 @@ -1,4 +1,4 @@ -/* $OpenBSD: cmd-parse.y,v 1.21 2019/12/12 15:01:54 nicm Exp $ */ +/* $OpenBSD: cmd-parse.y,v 1.22 2020/01/27 08:23:42 nicm Exp $ */ /* * Copyright (c) 2019 Nicholas Marriott @@ -133,8 +133,13 @@ free($2); } -statement : condition +statement : /* empty */ { + $$ = xmalloc (sizeof *$$); + TAILQ_INIT($$); + } + | condition + { struct cmd_parse_state *ps = &parse_state; if (ps->scope == NULL || ps->scope->flag) @@ -144,11 +149,6 @@ cmd_parse_free_commands($1); } } - | assignment - { - $$ = xmalloc (sizeof *$$); - TAILQ_INIT($$); - } | commands { struct cmd_parse_state *ps = &parse_state; @@ -194,8 +194,10 @@ free($1); } -assignment : /* empty */ - | EQUALS +optional_assignment : /* empty */ + | assignment + +assignment : EQUALS { struct cmd_parse_state *ps = &parse_state; int flags = ps->input->flags; @@ -372,16 +374,24 @@ $$ = $1; } -command : assignment TOKEN +command : assignment { struct cmd_parse_state *ps = &parse_state; $$ = xcalloc(1, sizeof *$$); + $$->name = NULL; + $$->line = ps->input->line; + } + | optional_assignment TOKEN + { + struct cmd_parse_state *ps = &parse_state; + + $$ = xcalloc(1, sizeof *$$); $$->name = $2; $$->line = ps->input->line; } - | assignment TOKEN arguments + | optional_assignment TOKEN arguments { struct cmd_parse_state *ps = &parse_state; @@ -631,6 +641,8 @@ * command list. */ TAILQ_FOREACH_SAFE(cmd, cmds, entry, next) { + if (cmd->name == NULL) + continue; alias = cmd_get_alias(cmd->name); if (alias == NULL) continue; @@ -676,6 +688,8 @@ */ result = cmd_list_new(); TAILQ_FOREACH(cmd, cmds, entry) { + if (cmd->name == NULL) + continue; log_debug("%s: %u %s", __func__, cmd->line, cmd->name); cmd_log_argv(cmd->argc, cmd->argv, __func__);