@@ -1358,7 +1358,8 @@ set_var_lval(
13581358 || (!var_check_ro (di -> di_flags , lp -> ll_name , FALSE)
13591359 && !tv_check_lock (& di -> di_tv , lp -> ll_name , FALSE)))
13601360 && tv_op (& tv , rettv , op ) == OK )
1361- set_var (lp -> ll_name , & tv , FALSE);
1361+ set_var_const (lp -> ll_name , NULL , & tv , FALSE,
1362+ ASSIGN_NO_DECL , 0 );
13621363 clear_tv (& tv );
13631364 }
13641365 }
@@ -1784,6 +1785,8 @@ next_for_item(void *fi_void, char_u *arg)
17841785 | ASSIGN_NO_MEMBER_TYPE )
17851786 : 0 );
17861787 listitem_T * item ;
1788+ int skip_assign = in_vim9script () && arg [0 ] == '_'
1789+ && !eval_isnamec (arg [1 ]);
17871790
17881791 if (fi -> fi_blob != NULL )
17891792 {
@@ -1795,6 +1798,8 @@ next_for_item(void *fi_void, char_u *arg)
17951798 tv .v_lock = VAR_FIXED ;
17961799 tv .vval .v_number = blob_get (fi -> fi_blob , fi -> fi_bi );
17971800 ++ fi -> fi_bi ;
1801+ if (skip_assign )
1802+ return TRUE;
17981803 return ex_let_vars (arg , & tv , TRUE, fi -> fi_semicolon ,
17991804 fi -> fi_varcount , flag , NULL ) == OK ;
18001805 }
@@ -1812,7 +1817,10 @@ next_for_item(void *fi_void, char_u *arg)
18121817 tv .vval .v_string = vim_strnsave (fi -> fi_string + fi -> fi_byte_idx , len );
18131818 fi -> fi_byte_idx += len ;
18141819 ++ fi -> fi_bi ;
1815- result = ex_let_vars (arg , & tv , TRUE, fi -> fi_semicolon ,
1820+ if (skip_assign )
1821+ result = TRUE;
1822+ else
1823+ result = ex_let_vars (arg , & tv , TRUE, fi -> fi_semicolon ,
18161824 fi -> fi_varcount , flag , NULL ) == OK ;
18171825 vim_free (tv .vval .v_string );
18181826 return result ;
@@ -1825,7 +1833,10 @@ next_for_item(void *fi_void, char_u *arg)
18251833 {
18261834 fi -> fi_lw .lw_item = item -> li_next ;
18271835 ++ fi -> fi_bi ;
1828- result = (ex_let_vars (arg , & item -> li_tv , TRUE, fi -> fi_semicolon ,
1836+ if (skip_assign )
1837+ result = TRUE;
1838+ else
1839+ result = (ex_let_vars (arg , & item -> li_tv , TRUE, fi -> fi_semicolon ,
18291840 fi -> fi_varcount , flag , NULL ) == OK );
18301841 }
18311842 return result ;
@@ -2177,6 +2188,11 @@ eval_next_line(evalarg_T *evalarg)
21772188 vim_free (evalarg -> eval_tofree );
21782189 evalarg -> eval_tofree = line ;
21792190 }
2191+
2192+ // Advanced to the next line, "arg" no longer points into the previous
2193+ // line.
2194+ VIM_CLEAR (evalarg -> eval_tofree_cmdline );
2195+
21802196 return skipwhite (line );
21812197}
21822198
@@ -5376,6 +5392,8 @@ var2fpos(
53765392 }
53775393 return & pos ;
53785394 }
5395+ if (in_vim9script ())
5396+ semsg (_ (e_invalid_value_for_line_number_str ), name );
53795397 return NULL ;
53805398}
53815399
@@ -6189,6 +6207,7 @@ ex_execute(exarg_T *eap)
61896207 char_u * p ;
61906208 garray_T ga ;
61916209 int len ;
6210+ long start_lnum = SOURCING_LNUM ;
61926211
61936212 ga_init2 (& ga , 1 , 80 );
61946213
@@ -6242,6 +6261,9 @@ ex_execute(exarg_T *eap)
62426261
62436262 if (ret != FAIL && ga .ga_data != NULL )
62446263 {
6264+ // use the first line of continuation lines for messages
6265+ SOURCING_LNUM = start_lnum ;
6266+
62456267 if (eap -> cmdidx == CMD_echomsg || eap -> cmdidx == CMD_echoerr )
62466268 {
62476269 // Mark the already saved text as finishing the line, so that what
0 commit comments