diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/eval.c | 30 | ||||
-rw-r--r-- | src/testdir/test60.in | 12 | ||||
-rw-r--r-- | src/testdir/test60.ok | 5 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 41 insertions, 8 deletions
diff --git a/src/eval.c b/src/eval.c index f4ec36fd2e..f3b874c7fe 100644 --- a/src/eval.c +++ b/src/eval.c @@ -10363,18 +10363,36 @@ static void f_has(typval_T *argvars, typval_T *rettv) } if (n == FALSE) { - if (STRNICMP(name, "patch", 5) == 0) - n = has_patch(atoi((char *)name + 5)); - else if (STRICMP(name, "vim_starting") == 0) + if (STRNICMP(name, "patch", 5) == 0) { + if (name[5] == '-' + && STRLEN(name) > 11 + && vim_isdigit(name[6]) + && vim_isdigit(name[8]) + && vim_isdigit(name[10])) { + int major = atoi((char *)name + 6); + int minor = atoi((char *)name + 8); + int patch = atoi((char *)name + 10); + + // Expect "patch-9.9.01234". + n = (major < VIM_VERSION_MAJOR + || (major == VIM_VERSION_MAJOR + && (minor < VIM_VERSION_MINOR + || (minor == VIM_VERSION_MINOR + && patch <= highest_patch())))); + } else { + n = has_patch(atoi((char *)name + 5)); + } + } else if (STRICMP(name, "vim_starting") == 0) { n = (starting != 0); - else if (STRICMP(name, "multi_byte_encoding") == 0) + } else if (STRICMP(name, "multi_byte_encoding") == 0) { n = has_mbyte; #if defined(USE_ICONV) && defined(DYNAMIC_ICONV) - else if (STRICMP(name, "iconv") == 0) + } else if (STRICMP(name, "iconv") == 0) { n = iconv_enabled(FALSE); #endif - else if (STRICMP(name, "syntax_items") == 0) + } else if (STRICMP(name, "syntax_items") == 0) { n = syntax_present(curwin); + } } rettv->vval.v_number = n; diff --git a/src/testdir/test60.in b/src/testdir/test60.in index 0f30142dcf..8835df9e0c 100644 --- a/src/testdir/test60.in +++ b/src/testdir/test60.in @@ -1,4 +1,4 @@ -Tests for the exists() function. vim: set ft=vim ts=8 : +Tests for the exists() and has() functions. vim: set ft=vim ts=8 sw=2 : STARTTEST :so small.vim @@ -588,6 +588,16 @@ endfunction redir END endfunction :call TestExists() +:" +:function TestHas() + redir >> test.out + for pl in ['6.9.999', '7.1.999', '7.4.123', '9.1.0', '9.9.1'] + echo 'has patch ' . pl . ': ' . has('patch-' . pl) + endfor + redir END +endfunc +:call TestHas() +:" :delfunc TestExists :delfunc RunTest :delfunc TestFuncArg diff --git a/src/testdir/test60.ok b/src/testdir/test60.ok index 0c382ad281..dabcd0c05d 100644 --- a/src/testdir/test60.ok +++ b/src/testdir/test60.ok @@ -204,3 +204,8 @@ OK g:footest#x = 1 footest#F() 0 UndefFun() 0 +has patch 6.9.999: 1 +has patch 7.1.999: 1 +has patch 7.4.123: 1 +has patch 9.1.0: 0 +has patch 9.9.1: 0 diff --git a/src/version.c b/src/version.c index e1019be5bc..618caece87 100644 --- a/src/version.c +++ b/src/version.c @@ -224,7 +224,7 @@ static int included_patches[] = { 239, //238, //237, - //236, + 236, //235, 234, 233, |