diff options
author | Bram Moolenaar <Bram@vim.org> | 2021-11-29 22:02:12 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-11-29 22:02:12 +0000 |
commit | c750d91a07ace532e993349aa5c13dda5c888cc0 (patch) | |
tree | 6627430830249d7c4733084063ac11f46529ce95 | |
parent | 6b839ac77586f69a814d2940f59f0125f55c5f81 (diff) | |
download | vim-git-c750d91a07ace532e993349aa5c13dda5c888cc0.tar.gz |
patch 8.2.3701: Vim9: invalid LHS is not possiblev8.2.3701
Problem: Vim9: invalid LHS is not possible.
Solution: Remove unreachable error message.
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/vim9compile.c | 57 |
2 files changed, 26 insertions, 33 deletions
diff --git a/src/version.c b/src/version.c index c7daabc0d..b8dbf37b5 100644 --- a/src/version.c +++ b/src/version.c @@ -754,6 +754,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 3701, +/**/ 3700, /**/ 3699, diff --git a/src/vim9compile.c b/src/vim9compile.c index 2c4e2030b..e5e806cb6 100644 --- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -6503,52 +6503,43 @@ compile_lhs( lhs->lhs_member_type = lhs->lhs_type; if (lhs->lhs_has_index) { + char_u *after = var_start + lhs->lhs_varlen; + char_u *p; + // Something follows after the variable: "var[idx]" or "var.key". - // TODO: should we also handle "->func()" here? if (is_decl) { emsg(_(e_cannot_use_index_when_declaring_variable)); return FAIL; } - if (var_start[lhs->lhs_varlen] == '[' - || var_start[lhs->lhs_varlen] == '.') + // Now: var_start[lhs->lhs_varlen] is '[' or '.' + // Only the last index is used below, if there are others + // before it generate code for the expression. Thus for + // "ll[1][2]" the expression is "ll[1]" and "[2]" is the index. + for (;;) { - char_u *after = var_start + lhs->lhs_varlen; - char_u *p; - - // Only the last index is used below, if there are others - // before it generate code for the expression. Thus for - // "ll[1][2]" the expression is "ll[1]" and "[2]" is the index. - for (;;) - { - p = skip_index(after); - if (*p != '[' && *p != '.') - { - lhs->lhs_varlen_total = p - var_start; - break; - } - after = p; - } - if (after > var_start + lhs->lhs_varlen) + p = skip_index(after); + if (*p != '[' && *p != '.') { - lhs->lhs_varlen = after - var_start; - lhs->lhs_dest = dest_expr; - // We don't know the type before evaluating the expression, - // use "any" until then. - lhs->lhs_type = &t_any; + lhs->lhs_varlen_total = p - var_start; + break; } - - if (lhs->lhs_type->tt_member == NULL) - lhs->lhs_member_type = &t_any; - else - lhs->lhs_member_type = lhs->lhs_type->tt_member; + after = p; } - else + if (after > var_start + lhs->lhs_varlen) { - semsg("Not supported yet: %s", var_start); - return FAIL; + lhs->lhs_varlen = after - var_start; + lhs->lhs_dest = dest_expr; + // We don't know the type before evaluating the expression, + // use "any" until then. + lhs->lhs_type = &t_any; } + + if (lhs->lhs_type->tt_member == NULL) + lhs->lhs_member_type = &t_any; + else + lhs->lhs_member_type = lhs->lhs_type->tt_member; } return OK; } |