@@ -2451,7 +2451,7 @@ f_char2nr(typval_T *argvars, typval_T *rettv)
24512451 utf8 = (int )tv_get_number_chk (& argvars [1 ], NULL );
24522452
24532453 if (utf8 )
2454- rettv -> vval .v_number = ( * utf_ptr2char ) (tv_get_string (& argvars [0 ]));
2454+ rettv -> vval .v_number = utf_ptr2char (tv_get_string (& argvars [0 ]));
24552455 else
24562456 rettv -> vval .v_number = (* mb_ptr2char )(tv_get_string (& argvars [0 ]));
24572457 }
@@ -4811,6 +4811,7 @@ f_getchar(typval_T *argvars, typval_T *rettv)
48114811{
48124812 varnumber_T n ;
48134813 int error = FALSE;
4814+ int save_reg_executing = reg_executing ;
48144815
48154816#ifdef MESSAGE_QUEUE
48164817 // vpeekc() used to check for messages, but that caused problems, invoking
@@ -4845,6 +4846,7 @@ f_getchar(typval_T *argvars, typval_T *rettv)
48454846 }
48464847 -- no_mapping ;
48474848 -- allow_keys ;
4849+ reg_executing = save_reg_executing ;
48484850
48494851 set_vim_var_nr (VV_MOUSE_WIN , 0 );
48504852 set_vim_var_nr (VV_MOUSE_WINID , 0 );
@@ -5480,9 +5482,23 @@ getpos_both(
54805482 (varnumber_T )0 );
54815483 if (getcurpos )
54825484 {
5485+ int save_set_curswant = curwin -> w_set_curswant ;
5486+ colnr_T save_curswant = curwin -> w_curswant ;
5487+ colnr_T save_virtcol = curwin -> w_virtcol ;
5488+
54835489 update_curswant ();
54845490 list_append_number (l , curwin -> w_curswant == MAXCOL ?
54855491 (varnumber_T )MAXCOL : (varnumber_T )curwin -> w_curswant + 1 );
5492+
5493+ // Do not change "curswant", as it is unexpected that a get
5494+ // function has a side effect.
5495+ if (save_set_curswant )
5496+ {
5497+ curwin -> w_set_curswant = save_set_curswant ;
5498+ curwin -> w_curswant = save_curswant ;
5499+ curwin -> w_virtcol = save_virtcol ;
5500+ curwin -> w_valid &= ~VALID_VIRTCOL ;
5501+ }
54865502 }
54875503 }
54885504 else
@@ -5770,6 +5786,8 @@ get_win_info(win_T *wp, short tpnr, short winnr)
57705786 dict_add_number (dict , "winid" , wp -> w_id );
57715787 dict_add_number (dict , "height" , wp -> w_height );
57725788 dict_add_number (dict , "winrow" , wp -> w_winrow + 1 );
5789+ dict_add_number (dict , "topline" , wp -> w_topline );
5790+ dict_add_number (dict , "botline" , wp -> w_botline - 1 );
57735791#ifdef FEAT_MENU
57745792 dict_add_number (dict , "winbar" , wp -> w_winbar_height );
57755793#endif
@@ -6163,7 +6181,7 @@ f_has(typval_T *argvars, typval_T *rettv)
61636181#ifdef MSWIN
61646182 "win32" ,
61656183#endif
6166- #if defined(UNIX ) && ( defined (__CYGWIN32__ ) || defined ( __CYGWIN__ ) )
6184+ #if defined(UNIX ) && defined (__CYGWIN__ )
61676185 "win32unix" ,
61686186#endif
61696187#ifdef _WIN64
@@ -8724,7 +8742,7 @@ f_nr2char(typval_T *argvars, typval_T *rettv)
87248742 if (argvars [1 ].v_type != VAR_UNKNOWN )
87258743 utf8 = (int )tv_get_number_chk (& argvars [1 ], NULL );
87268744 if (utf8 )
8727- buf [( * utf_char2bytes ) ((int )tv_get_number (& argvars [0 ]), buf )] = NUL ;
8745+ buf [utf_char2bytes ((int )tv_get_number (& argvars [0 ]), buf )] = NUL ;
87288746 else
87298747 buf [(* mb_char2bytes )((int )tv_get_number (& argvars [0 ]), buf )] = NUL ;
87308748 }
@@ -11678,7 +11696,7 @@ f_sign_jump(typval_T *argvars, typval_T *rettv)
1167811696
1167911697 rettv -> vval .v_number = -1 ;
1168011698
11681- // Sign identifer
11699+ // Sign identifier
1168211700 sign_id = (int )tv_get_number_chk (& argvars [0 ], & notanum );
1168311701 if (notanum )
1168411702 return ;
@@ -11730,7 +11748,7 @@ f_sign_place(typval_T *argvars, typval_T *rettv)
1173011748
1173111749 rettv -> vval .v_number = -1 ;
1173211750
11733- // Sign identifer
11751+ // Sign identifier
1173411752 sign_id = (int )tv_get_number_chk (& argvars [0 ], & notanum );
1173511753 if (notanum )
1173611754 return ;
0 commit comments