Mercurial > vim
diff src/vim9compile.c @ 21439:166c15374bda v8.2.1270
patch 8.2.1270: Vim9: not skipping over function type declaration
Commit: https://github.com/vim/vim/commit/2f1980f7b74a6a47d72f9c56417bc4ad47c6b66c
Author: Bram Moolenaar <Bram@vim.org>
Date: Wed Jul 22 19:30:06 2020 +0200
patch 8.2.1270: Vim9: not skipping over function type declaration
Problem: Vim9: not skipping over function type declaration with only a
return type.
Solution: Skip over the return type. (issue #6507)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Wed, 22 Jul 2020 19:45:04 +0200 |
parents | 0f0fee4122d3 |
children | 78d97ee2c707 |
line wrap: on
line diff
--- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -1881,26 +1881,35 @@ skip_type(char_u *start) if (*p == '>') ++p; } - else if (*p == '(' && STRNCMP("func", start, 4) == 0) - { - // handle func(args): type - ++p; - while (*p != ')' && *p != NUL) + else if ((*p == '(' || (*p == ':' && VIM_ISWHITE(p[1]))) + && STRNCMP("func", start, 4) == 0) + { + if (*p == '(') { - char_u *sp = p; - - p = skip_type(p); - if (p == sp) - return p; // syntax error - if (*p == ',') - p = skipwhite(p + 1); + // handle func(args): type + ++p; + while (*p != ')' && *p != NUL) + { + char_u *sp = p; + + p = skip_type(p); + if (p == sp) + return p; // syntax error + if (*p == ',') + p = skipwhite(p + 1); + } + if (*p == ')') + { + if (p[1] == ':') + p = skip_type(skipwhite(p + 2)); + else + p = skipwhite(p + 1); + } } - if (*p == ')') + else { - if (p[1] == ':') - p = skip_type(skipwhite(p + 2)); - else - p = skipwhite(p + 1); + // handle func: return_type + p = skip_type(skipwhite(p + 1)); } }