Fix wrong "void value expression" error

* parse.y (value_expr_check): `then` or `else` only `if` is not a
  void value expression, as the counterpart is evaluated as `nil`.
  [Bug #15932]
This commit is contained in:
Nobuyoshi Nakada 2019-06-17 22:30:52 +09:00
Родитель 01b3a38043
Коммит c8e9e0b74b
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4BC7D6DF58D8DF60
2 изменённых файлов: 4 добавлений и 4 удалений

Просмотреть файл

@ -10552,12 +10552,10 @@ value_expr_check(struct parser_params *p, NODE *node)
case NODE_IF:
case NODE_UNLESS:
if (!node->nd_body) {
node = node->nd_else;
break;
return NULL;
}
else if (!node->nd_else) {
node = node->nd_body;
break;
return NULL;
}
vn = value_expr_check(p, node->nd_body);
if (!vn) return NULL;

Просмотреть файл

@ -1392,6 +1392,8 @@ eom
mesg = /void value expression/
assert_syntax_error("tap {a = (true ? next : break)}", mesg)
assert_valid_syntax("tap {a = (true ? true : break)}")
assert_valid_syntax("tap {a = (break if false)}")
assert_valid_syntax("tap {a = (break unless true)}")
end
private