mirror of
				https://github.com/vim/vim.git
				synced 2025-10-30 09:47:20 -04:00 
			
		
		
		
	patch 9.0.0140: execute() does not use the "legacy" command modifier
Problem:    execute() does not use the "legacy" command modifier.
Solution:   pass the command modifier in sticky_cmdmod_flags. (Kota Kato,
            closes #10845)
			
			
This commit is contained in:
		
				
					committed by
					
						 Bram Moolenaar
						Bram Moolenaar
					
				
			
			
				
	
			
			
			
						parent
						
							398649ee44
						
					
				
				
					commit
					3d3f6ac098
				
			| @@ -3929,6 +3929,7 @@ execute_common(typval_T *argvars, typval_T *rettv, int arg_off) | |||||||
|     int		save_redir_off = redir_off; |     int		save_redir_off = redir_off; | ||||||
|     garray_T	save_ga; |     garray_T	save_ga; | ||||||
|     int		save_msg_col = msg_col; |     int		save_msg_col = msg_col; | ||||||
|  |     int		save_sticky_cmdmod_flags = sticky_cmdmod_flags; | ||||||
|     int		echo_output = FALSE; |     int		echo_output = FALSE; | ||||||
|  |  | ||||||
|     rettv->vval.v_string = NULL; |     rettv->vval.v_string = NULL; | ||||||
| @@ -3985,6 +3986,9 @@ execute_common(typval_T *argvars, typval_T *rettv, int arg_off) | |||||||
|     if (!echo_output) |     if (!echo_output) | ||||||
| 	msg_col = 0;  // prevent leading spaces | 	msg_col = 0;  // prevent leading spaces | ||||||
|  |  | ||||||
|  |     // For "legacy call execute('cmd')" and "vim9cmd execute('cmd')" apply the | ||||||
|  |     // command modifiers to "cmd". | ||||||
|  |     sticky_cmdmod_flags = cmdmod.cmod_flags & (CMOD_LEGACY | CMOD_VIM9CMD); | ||||||
|     if (cmd != NULL) |     if (cmd != NULL) | ||||||
| 	do_cmdline_cmd(cmd); | 	do_cmdline_cmd(cmd); | ||||||
|     else |     else | ||||||
| @@ -3997,6 +4001,7 @@ execute_common(typval_T *argvars, typval_T *rettv, int arg_off) | |||||||
| 		      DOCMD_NOWAIT|DOCMD_VERBOSE|DOCMD_REPEAT|DOCMD_KEYTYPED); | 		      DOCMD_NOWAIT|DOCMD_VERBOSE|DOCMD_REPEAT|DOCMD_KEYTYPED); | ||||||
| 	--list->lv_refcount; | 	--list->lv_refcount; | ||||||
|     } |     } | ||||||
|  |     sticky_cmdmod_flags = save_sticky_cmdmod_flags; | ||||||
|  |  | ||||||
|     // Need to append a NUL to the result. |     // Need to append a NUL to the result. | ||||||
|     if (ga_grow(&redir_execute_ga, 1) == OK) |     if (ga_grow(&redir_execute_ga, 1) == OK) | ||||||
|   | |||||||
| @@ -142,6 +142,42 @@ def Test_cmdmod_execute() | |||||||
|   END |   END | ||||||
|   v9.CheckScriptSuccess(lines) |   v9.CheckScriptSuccess(lines) | ||||||
|   delfunc g:TheFunc |   delfunc g:TheFunc | ||||||
|  |  | ||||||
|  |   # vim9cmd execute(cmd) executes code in vim9 script context | ||||||
|  |   lines =<< trim END | ||||||
|  |     vim9cmd execute("g:vim9executetest = 'bar'") | ||||||
|  |     call assert_equal('bar', g:vim9executetest) | ||||||
|  |   END | ||||||
|  |   v9.CheckScriptSuccess(lines) | ||||||
|  |   unlet g:vim9executetest | ||||||
|  |  | ||||||
|  |   lines =<< trim END | ||||||
|  |     vim9cmd execute(["g:vim9executetest1 = 'baz'", "g:vim9executetest2 = 'foo'"]) | ||||||
|  |     call assert_equal('baz', g:vim9executetest1) | ||||||
|  |     call assert_equal('foo', g:vim9executetest2) | ||||||
|  |   END | ||||||
|  |   v9.CheckScriptSuccess(lines) | ||||||
|  |   unlet g:vim9executetest1 | ||||||
|  |   unlet g:vim9executetest2 | ||||||
|  |  | ||||||
|  |   # legacy call execute(cmd) executes code in vim script context | ||||||
|  |   lines =<< trim END | ||||||
|  |     vim9script | ||||||
|  |     legacy call execute("let g:vim9executetest = 'bar'") | ||||||
|  |     assert_equal('bar', g:vim9executetest) | ||||||
|  |   END | ||||||
|  |   v9.CheckScriptSuccess(lines) | ||||||
|  |   unlet g:vim9executetest | ||||||
|  |  | ||||||
|  |   lines =<< trim END | ||||||
|  |     vim9script | ||||||
|  |     legacy call execute(["let g:vim9executetest1 = 'baz'", "let g:vim9executetest2 = 'foo'"]) | ||||||
|  |     assert_equal('baz', g:vim9executetest1) | ||||||
|  |     assert_equal('foo', g:vim9executetest2) | ||||||
|  |   END | ||||||
|  |   v9.CheckScriptSuccess(lines) | ||||||
|  |   unlet g:vim9executetest1 | ||||||
|  |   unlet g:vim9executetest2 | ||||||
| enddef | enddef | ||||||
|  |  | ||||||
| def Test_edit_wildcards() | def Test_edit_wildcards() | ||||||
|   | |||||||
| @@ -735,6 +735,8 @@ static char *(features[]) = | |||||||
|  |  | ||||||
| static int included_patches[] = | static int included_patches[] = | ||||||
| {   /* Add new patch number below this line */ | {   /* Add new patch number below this line */ | ||||||
|  | /**/ | ||||||
|  |     140, | ||||||
| /**/ | /**/ | ||||||
|     139, |     139, | ||||||
| /**/ | /**/ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user