Mercurial > vim
diff src/vim9compile.c @ 25034:8d660d1cca8d v8.2.3054
patch 8.2.3054: Vim9: unpack assignment using "_" after semicolon fails
Commit: https://github.com/vim/vim/commit/4d5dfe20839e9d13c95eaf4254467f952653b042
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Jun 26 13:59:29 2021 +0200
patch 8.2.3054: Vim9: unpack assignment using "_" after semicolon fails
Problem: Vim9: unpack assignment using "_" after semicolon fails.
Solution: Drop the expression result. (closes https://github.com/vim/vim/issues/8453)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 26 Jun 2021 14:00:06 +0200 |
parents | 123590c942b7 |
children | ffc3e1164652 |
line wrap: on
line diff
--- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -6598,6 +6598,7 @@ compile_assignment(char_u *arg, exarg_T int var_count = 0; int var_idx; int semicolon = 0; + int did_generate_slice = FALSE; garray_T *instr = &cctx->ctx_instr; garray_T *stack = &cctx->ctx_type_stack; char_u *op; @@ -6801,6 +6802,7 @@ compile_assignment(char_u *arg, exarg_T else if (semicolon && var_idx == var_count - 1) { // For "[var; var] = expr" get the rest of the list + did_generate_slice = TRUE; if (generate_SLICE(cctx, var_count - 1) == FAIL) goto theend; } @@ -7010,8 +7012,9 @@ compile_assignment(char_u *arg, exarg_T var_start = skipwhite(lhs.lhs_dest_end + 1); } - // for "[var, var] = expr" drop the "expr" value - if (var_count > 0 && !semicolon) + // For "[var, var] = expr" drop the "expr" value. + // Also for "[var, var; _] = expr". + if (var_count > 0 && (!semicolon || !did_generate_slice)) { if (generate_instr_drop(cctx, ISN_DROP, 1) == NULL) goto theend;