@@ -950,7 +950,7 @@ eval_expr(char_u *arg, char_u **nextcmd)
950950
951951
952952/*
953- * Call some vimL function and return the result in "*rettv".
953+ * Call some Vim script function and return the result in "*rettv".
954954 * Uses argv[argc] for the function arguments. Only Number and String
955955 * arguments are currently supported.
956956 * Returns OK or FAIL.
@@ -1027,7 +1027,7 @@ call_vim_function(
10271027}
10281028
10291029/*
1030- * Call vimL function "func" and return the result as a number.
1030+ * Call Vim script function "func" and return the result as a number.
10311031 * Returns -1 when calling the function fails.
10321032 * Uses argv[argc] for the function arguments.
10331033 */
@@ -1055,7 +1055,7 @@ call_func_retnr(
10551055
10561056# if (defined(FEAT_USR_CMDS ) && defined(FEAT_CMDL_COMPL )) || defined(PROTO )
10571057/*
1058- * Call vimL function "func" and return the result as a string.
1058+ * Call Vim script function "func" and return the result as a string.
10591059 * Returns NULL when calling the function fails.
10601060 * Uses argv[argc] for the function arguments.
10611061 */
@@ -1080,7 +1080,7 @@ call_func_retstr(
10801080# endif
10811081
10821082/*
1083- * Call vimL function "func" and return the result as a List.
1083+ * Call Vim script function "func" and return the result as a List.
10841084 * Uses argv[argc] for the function arguments.
10851085 * Returns NULL when there is something wrong.
10861086 */
@@ -1898,6 +1898,8 @@ get_lval(
18981898 * Loop until no more [idx] or .key is following.
18991899 */
19001900 lp -> ll_tv = & v -> di_tv ;
1901+ var1 .v_type = VAR_UNKNOWN ;
1902+ var2 .v_type = VAR_UNKNOWN ;
19011903 while (* p == '[' || (* p == '.' && lp -> ll_tv -> v_type == VAR_DICT ))
19021904 {
19031905 if (!(lp -> ll_tv -> v_type == VAR_LIST && lp -> ll_tv -> vval .v_list != NULL )
@@ -1955,17 +1957,15 @@ get_lval(
19551957 {
19561958 if (!quiet )
19571959 EMSG (_ (e_dictrange ));
1958- if (!empty1 )
1959- clear_tv (& var1 );
1960+ clear_tv (& var1 );
19601961 return NULL ;
19611962 }
19621963 if (rettv != NULL && (rettv -> v_type != VAR_LIST
19631964 || rettv -> vval .v_list == NULL ))
19641965 {
19651966 if (!quiet )
19661967 EMSG (_ ("E709: [:] requires a List value" ));
1967- if (!empty1 )
1968- clear_tv (& var1 );
1968+ clear_tv (& var1 );
19691969 return NULL ;
19701970 }
19711971 p = skipwhite (p + 1 );
@@ -1976,15 +1976,13 @@ get_lval(
19761976 lp -> ll_empty2 = FALSE;
19771977 if (eval1 (& p , & var2 , TRUE) == FAIL ) /* recursive! */
19781978 {
1979- if (!empty1 )
1980- clear_tv (& var1 );
1979+ clear_tv (& var1 );
19811980 return NULL ;
19821981 }
19831982 if (get_tv_string_chk (& var2 ) == NULL )
19841983 {
19851984 /* not a number or string */
1986- if (!empty1 )
1987- clear_tv (& var1 );
1985+ clear_tv (& var1 );
19881986 clear_tv (& var2 );
19891987 return NULL ;
19901988 }
@@ -1998,10 +1996,8 @@ get_lval(
19981996 {
19991997 if (!quiet )
20001998 EMSG (_ (e_missbrac ));
2001- if (!empty1 )
2002- clear_tv (& var1 );
2003- if (lp -> ll_range && !lp -> ll_empty2 )
2004- clear_tv (& var2 );
1999+ clear_tv (& var1 );
2000+ clear_tv (& var2 );
20052001 return NULL ;
20062002 }
20072003
@@ -2064,16 +2060,14 @@ get_lval(
20642060 {
20652061 if (!quiet )
20662062 EMSG2 (_ (e_dictkey ), key );
2067- if (len == -1 )
2068- clear_tv (& var1 );
2063+ clear_tv (& var1 );
20692064 return NULL ;
20702065 }
20712066 if (len == -1 )
20722067 lp -> ll_newkey = vim_strsave (key );
20732068 else
20742069 lp -> ll_newkey = vim_strnsave (key , len );
2075- if (len == -1 )
2076- clear_tv (& var1 );
2070+ clear_tv (& var1 );
20772071 if (lp -> ll_newkey == NULL )
20782072 p = NULL ;
20792073 break ;
@@ -2086,8 +2080,7 @@ get_lval(
20862080 return NULL ;
20872081 }
20882082
2089- if (len == -1 )
2090- clear_tv (& var1 );
2083+ clear_tv (& var1 );
20912084 lp -> ll_tv = & lp -> ll_di -> di_tv ;
20922085 }
20932086 else
@@ -2098,11 +2091,10 @@ get_lval(
20982091 if (empty1 )
20992092 lp -> ll_n1 = 0 ;
21002093 else
2101- {
2094+ /* is number or string */
21022095 lp -> ll_n1 = (long )get_tv_number (& var1 );
2103- /* is number or string */
2104- clear_tv (& var1 );
2105- }
2096+ clear_tv (& var1 );
2097+
21062098 lp -> ll_dict = NULL ;
21072099 lp -> ll_list = lp -> ll_tv -> vval .v_list ;
21082100 lp -> ll_li = list_find (lp -> ll_list , lp -> ll_n1 );
@@ -2116,8 +2108,7 @@ get_lval(
21162108 }
21172109 if (lp -> ll_li == NULL )
21182110 {
2119- if (lp -> ll_range && !lp -> ll_empty2 )
2120- clear_tv (& var2 );
2111+ clear_tv (& var2 );
21212112 if (!quiet )
21222113 EMSGN (_ (e_listidx ), lp -> ll_n1 );
21232114 return NULL ;
@@ -2161,6 +2152,7 @@ get_lval(
21612152 }
21622153 }
21632154
2155+ clear_tv (& var1 );
21642156 return p ;
21652157}
21662158
0 commit comments