]> granicus.if.org Git - vim/commitdiff
patch 8.2.3701: Vim9: invalid LHS is not possible v8.2.3701
authorBram Moolenaar <Bram@vim.org>
Mon, 29 Nov 2021 22:02:12 +0000 (22:02 +0000)
committerBram Moolenaar <Bram@vim.org>
Mon, 29 Nov 2021 22:02:12 +0000 (22:02 +0000)
Problem:    Vim9: invalid LHS is not possible.
Solution:   Remove unreachable error message.

src/version.c
src/vim9compile.c

index c7daabc0d7515ddc742999574572ec4584e4f662..b8dbf37b57ffc5404e862705bfd33c4d6799412b 100644 (file)
@@ -753,6 +753,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    3701,
 /**/
     3700,
 /**/
index 2c4e2030ba4622c0bfeec5aa9795f973ab1a9c0c..e5e806cb60dcb2f9cf7c03b4f9834a8223e130be 100644 (file)
@@ -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;
 }