diff options
author | Bram Moolenaar <Bram@vim.org> | 2006-02-24 23:53:04 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2006-02-24 23:53:04 +0000 |
commit | 32466aa2e9c45ab355dbaf99a9eedf334bc2e29f (patch) | |
tree | 1644d959a04f9f8c6ea5a8fe3c79f037c6915559 /src/eval.c | |
parent | 2a3f7eeebfa05a33cc1d8fbba66a3dff976e8dd7 (diff) | |
download | vim-git-32466aa2e9c45ab355dbaf99a9eedf334bc2e29f.tar.gz |
updated for version 7.0206v7.0206
Diffstat (limited to 'src/eval.c')
-rw-r--r-- | src/eval.c | 41 |
1 files changed, 36 insertions, 5 deletions
diff --git a/src/eval.c b/src/eval.c index fef09d02f..52525e6c4 100644 --- a/src/eval.c +++ b/src/eval.c @@ -14934,7 +14934,6 @@ f_tabpagenr(argvars, rettv) { int nr = 1; #ifdef FEAT_WINDOWS - tabpage_T *tp; char_u *arg; if (argvars[0].v_type != VAR_UNKNOWN) @@ -14944,15 +14943,13 @@ f_tabpagenr(argvars, rettv) if (arg != NULL) { if (STRCMP(arg, "$") == 0) - for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) - ++nr; + nr = tabpage_index(NULL); else EMSG2(_(e_invexpr2), arg); } } else - for (tp = first_tabpage; tp != curtab; tp = tp->tp_next) - ++nr; + nr = tabpage_index(curtab); #endif rettv->vval.v_number = nr; } @@ -15616,6 +15613,7 @@ f_writefile(argvars, rettv) /* * Translate a String variable into a position. + * Returns NULL when there is an error. */ static pos_T * var2fpos(varp, lnum) @@ -15626,6 +15624,39 @@ var2fpos(varp, lnum) static pos_T pos; pos_T *pp; + /* Argument can be [lnum, col]. */ + if (varp->v_type == VAR_LIST) + { + list_T *l; + listitem_T *li; + int len; + + l = varp->vval.v_list; + if (l == NULL) + return NULL; + + /* Get the line number */ + li = list_find(l, 0L); + if (li == NULL) + return NULL; + pos.lnum = get_tv_number(&li->li_tv); + if (pos.lnum <= 0 || pos.lnum > curbuf->b_ml.ml_line_count) + return NULL; /* invalid line number */ + + /* Get the column number */ + li = list_find(l, 1L); + if (li == NULL) + return NULL; + pos.col = get_tv_number(&li->li_tv); + len = (long)STRLEN(ml_get(pos.lnum)); + if (pos.col <= 0 || ((len == 0 && pos.col > 1) + || (len > 0 && pos.col > len))) + return NULL; /* invalid column number */ + + pos.col--; + return &pos; + } + name = get_tv_string_chk(varp); if (name == NULL) return NULL; |