|
Karsten Hopp |
81373b |
To: vim_dev@googlegroups.com
|
|
Karsten Hopp |
81373b |
Subject: Patch 7.3.603
|
|
Karsten Hopp |
81373b |
Fcc: outbox
|
|
Karsten Hopp |
81373b |
From: Bram Moolenaar <Bram@moolenaar.net>
|
|
Karsten Hopp |
81373b |
Mime-Version: 1.0
|
|
Karsten Hopp |
81373b |
Content-Type: text/plain; charset=UTF-8
|
|
Karsten Hopp |
81373b |
Content-Transfer-Encoding: 8bit
|
|
Karsten Hopp |
81373b |
------------
|
|
Karsten Hopp |
81373b |
|
|
Karsten Hopp |
81373b |
Patch 7.3.603
|
|
Karsten Hopp |
81373b |
Problem: It is possible to add replace builtin functions by calling
|
|
Karsten Hopp |
81373b |
extend() on g:.
|
|
Karsten Hopp |
81373b |
Solution: Add a flag to a dict to indicate it is a scope. Check for
|
|
Karsten Hopp |
81373b |
existing functions. (ZyX)
|
|
Karsten Hopp |
81373b |
Files: src/buffer.c, src/eval.c, src/proto/eval.pro, src/structs.h,
|
|
Karsten Hopp |
81373b |
src/testdir/test34.in, src/testdir/test34.ok, src/window.c
|
|
Karsten Hopp |
81373b |
|
|
Karsten Hopp |
81373b |
|
|
Karsten Hopp |
81373b |
*** ../vim-7.3.602/src/buffer.c 2012-07-10 15:18:18.000000000 +0200
|
|
Karsten Hopp |
81373b |
--- src/buffer.c 2012-07-16 16:52:58.000000000 +0200
|
|
Karsten Hopp |
81373b |
***************
|
|
Karsten Hopp |
81373b |
*** 1747,1753 ****
|
|
Karsten Hopp |
81373b |
buf->b_wininfo->wi_win = curwin;
|
|
Karsten Hopp |
81373b |
|
|
Karsten Hopp |
81373b |
#ifdef FEAT_EVAL
|
|
Karsten Hopp |
81373b |
! init_var_dict(&buf->b_vars, &buf->b_bufvar); /* init b: variables */
|
|
Karsten Hopp |
81373b |
#endif
|
|
Karsten Hopp |
81373b |
#ifdef FEAT_SYN_HL
|
|
Karsten Hopp |
81373b |
hash_init(&buf->b_s.b_keywtab);
|
|
Karsten Hopp |
81373b |
--- 1747,1754 ----
|
|
Karsten Hopp |
81373b |
buf->b_wininfo->wi_win = curwin;
|
|
Karsten Hopp |
81373b |
|
|
Karsten Hopp |
81373b |
#ifdef FEAT_EVAL
|
|
Karsten Hopp |
81373b |
! /* init b: variables */
|
|
Karsten Hopp |
81373b |
! init_var_dict(&buf->b_vars, &buf->b_bufvar, VAR_SCOPE);
|
|
Karsten Hopp |
81373b |
#endif
|
|
Karsten Hopp |
81373b |
#ifdef FEAT_SYN_HL
|
|
Karsten Hopp |
81373b |
hash_init(&buf->b_s.b_keywtab);
|
|
Karsten Hopp |
81373b |
*** ../vim-7.3.602/src/eval.c 2012-07-10 13:41:09.000000000 +0200
|
|
Karsten Hopp |
81373b |
--- src/eval.c 2012-07-16 17:18:11.000000000 +0200
|
|
Karsten Hopp |
81373b |
***************
|
|
Karsten Hopp |
81373b |
*** 850,857 ****
|
|
Karsten Hopp |
81373b |
int i;
|
|
Karsten Hopp |
81373b |
struct vimvar *p;
|
|
Karsten Hopp |
81373b |
|
|
Karsten Hopp |
81373b |
! init_var_dict(&globvardict, &globvars_var);
|
|
Karsten Hopp |
81373b |
! init_var_dict(&vimvardict, &vimvars_var);
|
|
Karsten Hopp |
81373b |
vimvardict.dv_lock = VAR_FIXED;
|
|
Karsten Hopp |
81373b |
hash_init(&compat_hashtab);
|
|
Karsten Hopp |
81373b |
hash_init(&func_hashtab);
|
|
Karsten Hopp |
81373b |
--- 850,857 ----
|
|
Karsten Hopp |
81373b |
int i;
|
|
Karsten Hopp |
81373b |
struct vimvar *p;
|
|
Karsten Hopp |
81373b |
|
|
Karsten Hopp |
81373b |
! init_var_dict(&globvardict, &globvars_var, VAR_DEF_SCOPE);
|
|
Karsten Hopp |
81373b |
! init_var_dict(&vimvardict, &vimvars_var, VAR_SCOPE);
|
|
Karsten Hopp |
81373b |
vimvardict.dv_lock = VAR_FIXED;
|
|
Karsten Hopp |
81373b |
hash_init(&compat_hashtab);
|
|
Karsten Hopp |
81373b |
hash_init(&func_hashtab);
|
|
Karsten Hopp |
81373b |
***************
|
|
Karsten Hopp |
81373b |
*** 2725,2738 ****
|
|
Karsten Hopp |
81373b |
lp->ll_dict = lp->ll_tv->vval.v_dict;
|
|
Karsten Hopp |
81373b |
lp->ll_di = dict_find(lp->ll_dict, key, len);
|
|
Karsten Hopp |
81373b |
|
|
Karsten Hopp |
81373b |
! /* When assigning to g: check that a function and variable name is
|
|
Karsten Hopp |
81373b |
! * valid. */
|
|
Karsten Hopp |
81373b |
! if (rettv != NULL && lp->ll_dict == &globvardict)
|
|
Karsten Hopp |
81373b |
{
|
|
Karsten Hopp |
81373b |
! if (rettv->v_type == VAR_FUNC
|
|
Karsten Hopp |
81373b |
&& var_check_func_name(key, lp->ll_di == NULL))
|
|
Karsten Hopp |
81373b |
! return NULL;
|
|
Karsten Hopp |
81373b |
! if (!valid_varname(key))
|
|
Karsten Hopp |
81373b |
return NULL;
|
|
Karsten Hopp |
81373b |
}
|
|
Karsten Hopp |
81373b |
|
|
Karsten Hopp |
81373b |
--- 2725,2750 ----
|
|
Karsten Hopp |
81373b |
lp->ll_dict = lp->ll_tv->vval.v_dict;
|
|
Karsten Hopp |
81373b |
lp->ll_di = dict_find(lp->ll_dict, key, len);
|
|
Karsten Hopp |
81373b |
|
|
Karsten Hopp |
81373b |
! /* When assigning to a scope dictionary check that a function and
|
|
Karsten Hopp |
81373b |
! * variable name is valid (only variable name unless it is l: or
|
|
Karsten Hopp |
81373b |
! * g: dictionary). Disallow overwriting a builtin function. */
|
|
Karsten Hopp |
81373b |
! if (rettv != NULL && lp->ll_dict->dv_scope != 0)
|
|
Karsten Hopp |
81373b |
{
|
|
Karsten Hopp |
81373b |
! int prevval;
|
|
Karsten Hopp |
81373b |
! int wrong;
|
|
Karsten Hopp |
81373b |
!
|
|
Karsten Hopp |
81373b |
! if (len != -1)
|
|
Karsten Hopp |
81373b |
! {
|
|
Karsten Hopp |
81373b |
! prevval = key[len];
|
|
Karsten Hopp |
81373b |
! key[len] = NUL;
|
|
Karsten Hopp |
81373b |
! }
|
|
Karsten Hopp |
81373b |
! wrong = (lp->ll_dict->dv_scope == VAR_DEF_SCOPE
|
|
Karsten Hopp |
81373b |
! && rettv->v_type == VAR_FUNC
|
|
Karsten Hopp |
81373b |
&& var_check_func_name(key, lp->ll_di == NULL))
|
|
Karsten Hopp |
81373b |
! || !valid_varname(key);
|
|
Karsten Hopp |
81373b |
! if (len != -1)
|
|
Karsten Hopp |
81373b |
! key[len] = prevval;
|
|
Karsten Hopp |
81373b |
! if (wrong)
|
|
Karsten Hopp |
81373b |
return NULL;
|
|
Karsten Hopp |
81373b |
}
|
|
Karsten Hopp |
81373b |
|
|
Karsten Hopp |
81373b |
***************
|
|
Karsten Hopp |
81373b |
*** 6951,6957 ****
|
|
Karsten Hopp |
81373b |
d = (dict_T *)alloc(sizeof(dict_T));
|
|
Karsten Hopp |
81373b |
if (d != NULL)
|
|
Karsten Hopp |
81373b |
{
|
|
Karsten Hopp |
81373b |
! /* Add the list to the list of dicts for garbage collection. */
|
|
Karsten Hopp |
81373b |
if (first_dict != NULL)
|
|
Karsten Hopp |
81373b |
first_dict->dv_used_prev = d;
|
|
Karsten Hopp |
81373b |
d->dv_used_next = first_dict;
|
|
Karsten Hopp |
81373b |
--- 6963,6969 ----
|
|
Karsten Hopp |
81373b |
d = (dict_T *)alloc(sizeof(dict_T));
|
|
Karsten Hopp |
81373b |
if (d != NULL)
|
|
Karsten Hopp |
81373b |
{
|
|
Karsten Hopp |
81373b |
! /* Add the dict to the list of dicts for garbage collection. */
|
|
Karsten Hopp |
81373b |
if (first_dict != NULL)
|
|
Karsten Hopp |
81373b |
first_dict->dv_used_prev = d;
|
|
Karsten Hopp |
81373b |
d->dv_used_next = first_dict;
|
|
Karsten Hopp |
81373b |
***************
|
|
Karsten Hopp |
81373b |
*** 6960,6965 ****
|
|
Karsten Hopp |
81373b |
--- 6972,6978 ----
|
|
Karsten Hopp |
81373b |
|
|
Karsten Hopp |
81373b |
hash_init(&d->dv_hashtab);
|
|
Karsten Hopp |
81373b |
d->dv_lock = 0;
|
|
Karsten Hopp |
81373b |
+ d->dv_scope = 0;
|
|
Karsten Hopp |
81373b |
d->dv_refcount = 0;
|
|
Karsten Hopp |
81373b |
d->dv_copyID = 0;
|
|
Karsten Hopp |
81373b |
}
|
|
Karsten Hopp |
81373b |
***************
|
|
Karsten Hopp |
81373b |
*** 10203,10208 ****
|
|
Karsten Hopp |
81373b |
--- 10216,10234 ----
|
|
Karsten Hopp |
81373b |
{
|
|
Karsten Hopp |
81373b |
--todo;
|
|
Karsten Hopp |
81373b |
di1 = dict_find(d1, hi2->hi_key, -1);
|
|
Karsten Hopp |
81373b |
+ if (d1->dv_scope != 0)
|
|
Karsten Hopp |
81373b |
+ {
|
|
Karsten Hopp |
81373b |
+ /* Disallow replacing a builtin function in l: and g:.
|
|
Karsten Hopp |
81373b |
+ * Check the key to be valid when adding to any
|
|
Karsten Hopp |
81373b |
+ * scope. */
|
|
Karsten Hopp |
81373b |
+ if (d1->dv_scope == VAR_DEF_SCOPE
|
|
Karsten Hopp |
81373b |
+ && HI2DI(hi2)->di_tv.v_type == VAR_FUNC
|
|
Karsten Hopp |
81373b |
+ && var_check_func_name(hi2->hi_key,
|
|
Karsten Hopp |
81373b |
+ di1 == NULL))
|
|
Karsten Hopp |
81373b |
+ break;
|
|
Karsten Hopp |
81373b |
+ if (!valid_varname(hi2->hi_key))
|
|
Karsten Hopp |
81373b |
+ break;
|
|
Karsten Hopp |
81373b |
+ }
|
|
Karsten Hopp |
81373b |
if (di1 == NULL)
|
|
Karsten Hopp |
81373b |
{
|
|
Karsten Hopp |
81373b |
di1 = dictitem_copy(HI2DI(hi2));
|
|
Karsten Hopp |
81373b |
***************
|
|
Karsten Hopp |
81373b |
*** 20027,20033 ****
|
|
Karsten Hopp |
81373b |
{
|
|
Karsten Hopp |
81373b |
sv = SCRIPT_SV(ga_scripts.ga_len + 1) =
|
|
Karsten Hopp |
81373b |
(scriptvar_T *)alloc_clear(sizeof(scriptvar_T));
|
|
Karsten Hopp |
81373b |
! init_var_dict(&sv->sv_dict, &sv->sv_var);
|
|
Karsten Hopp |
81373b |
++ga_scripts.ga_len;
|
|
Karsten Hopp |
81373b |
}
|
|
Karsten Hopp |
81373b |
}
|
|
Karsten Hopp |
81373b |
--- 20053,20059 ----
|
|
Karsten Hopp |
81373b |
{
|
|
Karsten Hopp |
81373b |
sv = SCRIPT_SV(ga_scripts.ga_len + 1) =
|
|
Karsten Hopp |
81373b |
(scriptvar_T *)alloc_clear(sizeof(scriptvar_T));
|
|
Karsten Hopp |
81373b |
! init_var_dict(&sv->sv_dict, &sv->sv_var, VAR_SCOPE);
|
|
Karsten Hopp |
81373b |
++ga_scripts.ga_len;
|
|
Karsten Hopp |
81373b |
}
|
|
Karsten Hopp |
81373b |
}
|
|
Karsten Hopp |
81373b |
***************
|
|
Karsten Hopp |
81373b |
*** 20038,20049 ****
|
|
Karsten Hopp |
81373b |
* point to it.
|
|
Karsten Hopp |
81373b |
*/
|
|
Karsten Hopp |
81373b |
void
|
|
Karsten Hopp |
81373b |
! init_var_dict(dict, dict_var)
|
|
Karsten Hopp |
81373b |
dict_T *dict;
|
|
Karsten Hopp |
81373b |
dictitem_T *dict_var;
|
|
Karsten Hopp |
81373b |
{
|
|
Karsten Hopp |
81373b |
hash_init(&dict->dv_hashtab);
|
|
Karsten Hopp |
81373b |
dict->dv_lock = 0;
|
|
Karsten Hopp |
81373b |
dict->dv_refcount = DO_NOT_FREE_CNT;
|
|
Karsten Hopp |
81373b |
dict->dv_copyID = 0;
|
|
Karsten Hopp |
81373b |
dict_var->di_tv.vval.v_dict = dict;
|
|
Karsten Hopp |
81373b |
--- 20064,20077 ----
|
|
Karsten Hopp |
81373b |
* point to it.
|
|
Karsten Hopp |
81373b |
*/
|
|
Karsten Hopp |
81373b |
void
|
|
Karsten Hopp |
81373b |
! init_var_dict(dict, dict_var, scope)
|
|
Karsten Hopp |
81373b |
dict_T *dict;
|
|
Karsten Hopp |
81373b |
dictitem_T *dict_var;
|
|
Karsten Hopp |
81373b |
+ int scope;
|
|
Karsten Hopp |
81373b |
{
|
|
Karsten Hopp |
81373b |
hash_init(&dict->dv_hashtab);
|
|
Karsten Hopp |
81373b |
dict->dv_lock = 0;
|
|
Karsten Hopp |
81373b |
+ dict->dv_scope = scope;
|
|
Karsten Hopp |
81373b |
dict->dv_refcount = DO_NOT_FREE_CNT;
|
|
Karsten Hopp |
81373b |
dict->dv_copyID = 0;
|
|
Karsten Hopp |
81373b |
dict_var->di_tv.vval.v_dict = dict;
|
|
Karsten Hopp |
81373b |
***************
|
|
Karsten Hopp |
81373b |
*** 22304,22310 ****
|
|
Karsten Hopp |
81373b |
/*
|
|
Karsten Hopp |
81373b |
* Init l: variables.
|
|
Karsten Hopp |
81373b |
*/
|
|
Karsten Hopp |
81373b |
! init_var_dict(&fc->l_vars, &fc->l_vars_var);
|
|
Karsten Hopp |
81373b |
if (selfdict != NULL)
|
|
Karsten Hopp |
81373b |
{
|
|
Karsten Hopp |
81373b |
/* Set l:self to "selfdict". Use "name" to avoid a warning from
|
|
Karsten Hopp |
81373b |
--- 22332,22338 ----
|
|
Karsten Hopp |
81373b |
/*
|
|
Karsten Hopp |
81373b |
* Init l: variables.
|
|
Karsten Hopp |
81373b |
*/
|
|
Karsten Hopp |
81373b |
! init_var_dict(&fc->l_vars, &fc->l_vars_var, VAR_DEF_SCOPE);
|
|
Karsten Hopp |
81373b |
if (selfdict != NULL)
|
|
Karsten Hopp |
81373b |
{
|
|
Karsten Hopp |
81373b |
/* Set l:self to "selfdict". Use "name" to avoid a warning from
|
|
Karsten Hopp |
81373b |
***************
|
|
Karsten Hopp |
81373b |
*** 22325,22331 ****
|
|
Karsten Hopp |
81373b |
* Set a:0 to "argcount".
|
|
Karsten Hopp |
81373b |
* Set a:000 to a list with room for the "..." arguments.
|
|
Karsten Hopp |
81373b |
*/
|
|
Karsten Hopp |
81373b |
! init_var_dict(&fc->l_avars, &fc->l_avars_var);
|
|
Karsten Hopp |
81373b |
add_nr_var(&fc->l_avars, &fc->fixvar[fixvar_idx++].var, "0",
|
|
Karsten Hopp |
81373b |
(varnumber_T)(argcount - fp->uf_args.ga_len));
|
|
Karsten Hopp |
81373b |
/* Use "name" to avoid a warning from some compiler that checks the
|
|
Karsten Hopp |
81373b |
--- 22353,22359 ----
|
|
Karsten Hopp |
81373b |
* Set a:0 to "argcount".
|
|
Karsten Hopp |
81373b |
* Set a:000 to a list with room for the "..." arguments.
|
|
Karsten Hopp |
81373b |
*/
|
|
Karsten Hopp |
81373b |
! init_var_dict(&fc->l_avars, &fc->l_avars_var, VAR_SCOPE);
|
|
Karsten Hopp |
81373b |
add_nr_var(&fc->l_avars, &fc->fixvar[fixvar_idx++].var, "0",
|
|
Karsten Hopp |
81373b |
(varnumber_T)(argcount - fp->uf_args.ga_len));
|
|
Karsten Hopp |
81373b |
/* Use "name" to avoid a warning from some compiler that checks the
|
|
Karsten Hopp |
81373b |
*** ../vim-7.3.602/src/proto/eval.pro 2012-06-29 12:54:32.000000000 +0200
|
|
Karsten Hopp |
81373b |
--- src/proto/eval.pro 2012-07-16 16:55:16.000000000 +0200
|
|
Karsten Hopp |
81373b |
***************
|
|
Karsten Hopp |
81373b |
*** 93,99 ****
|
|
Karsten Hopp |
81373b |
char_u *get_tv_string_chk __ARGS((typval_T *varp));
|
|
Karsten Hopp |
81373b |
char_u *get_var_value __ARGS((char_u *name));
|
|
Karsten Hopp |
81373b |
void new_script_vars __ARGS((scid_T id));
|
|
Karsten Hopp |
81373b |
! void init_var_dict __ARGS((dict_T *dict, dictitem_T *dict_var));
|
|
Karsten Hopp |
81373b |
void vars_clear __ARGS((hashtab_T *ht));
|
|
Karsten Hopp |
81373b |
void copy_tv __ARGS((typval_T *from, typval_T *to));
|
|
Karsten Hopp |
81373b |
void ex_echo __ARGS((exarg_T *eap));
|
|
Karsten Hopp |
81373b |
--- 93,99 ----
|
|
Karsten Hopp |
81373b |
char_u *get_tv_string_chk __ARGS((typval_T *varp));
|
|
Karsten Hopp |
81373b |
char_u *get_var_value __ARGS((char_u *name));
|
|
Karsten Hopp |
81373b |
void new_script_vars __ARGS((scid_T id));
|
|
Karsten Hopp |
81373b |
! void init_var_dict __ARGS((dict_T *dict, dictitem_T *dict_var, int scope));
|
|
Karsten Hopp |
81373b |
void vars_clear __ARGS((hashtab_T *ht));
|
|
Karsten Hopp |
81373b |
void copy_tv __ARGS((typval_T *from, typval_T *to));
|
|
Karsten Hopp |
81373b |
void ex_echo __ARGS((exarg_T *eap));
|
|
Karsten Hopp |
81373b |
*** ../vim-7.3.602/src/structs.h 2012-06-06 19:02:40.000000000 +0200
|
|
Karsten Hopp |
81373b |
--- src/structs.h 2012-07-16 16:56:43.000000000 +0200
|
|
Karsten Hopp |
81373b |
***************
|
|
Karsten Hopp |
81373b |
*** 1106,1111 ****
|
|
Karsten Hopp |
81373b |
--- 1106,1116 ----
|
|
Karsten Hopp |
81373b |
#define VAR_DICT 5 /* "v_dict" is used */
|
|
Karsten Hopp |
81373b |
#define VAR_FLOAT 6 /* "v_float" is used */
|
|
Karsten Hopp |
81373b |
|
|
Karsten Hopp |
81373b |
+ /* Values for "dv_scope". */
|
|
Karsten Hopp |
81373b |
+ #define VAR_SCOPE 1 /* a:, v:, s:, etc. scope dictionaries */
|
|
Karsten Hopp |
81373b |
+ #define VAR_DEF_SCOPE 2 /* l:, g: scope dictionaries: here funcrefs are not
|
|
Karsten Hopp |
81373b |
+ allowed to mask existing functions */
|
|
Karsten Hopp |
81373b |
+
|
|
Karsten Hopp |
81373b |
/* Values for "v_lock". */
|
|
Karsten Hopp |
81373b |
#define VAR_LOCKED 1 /* locked with lock(), can use unlock() */
|
|
Karsten Hopp |
81373b |
#define VAR_FIXED 2 /* locked forever */
|
|
Karsten Hopp |
81373b |
***************
|
|
Karsten Hopp |
81373b |
*** 1181,1186 ****
|
|
Karsten Hopp |
81373b |
--- 1186,1192 ----
|
|
Karsten Hopp |
81373b |
int dv_copyID; /* ID used by deepcopy() */
|
|
Karsten Hopp |
81373b |
dict_T *dv_copydict; /* copied dict used by deepcopy() */
|
|
Karsten Hopp |
81373b |
char dv_lock; /* zero, VAR_LOCKED, VAR_FIXED */
|
|
Karsten Hopp |
81373b |
+ char dv_scope; /* zero, VAR_SCOPE, VAR_DEF_SCOPE */
|
|
Karsten Hopp |
81373b |
dict_T *dv_used_next; /* next dict in used dicts list */
|
|
Karsten Hopp |
81373b |
dict_T *dv_used_prev; /* previous dict in used dicts list */
|
|
Karsten Hopp |
81373b |
};
|
|
Karsten Hopp |
81373b |
*** ../vim-7.3.602/src/testdir/test34.in 2010-08-15 21:57:29.000000000 +0200
|
|
Karsten Hopp |
81373b |
--- src/testdir/test34.in 2012-07-16 16:51:29.000000000 +0200
|
|
Karsten Hopp |
81373b |
***************
|
|
Karsten Hopp |
81373b |
*** 1,5 ****
|
|
Karsten Hopp |
81373b |
--- 1,6 ----
|
|
Karsten Hopp |
81373b |
Test for user functions.
|
|
Karsten Hopp |
81373b |
Also test an <expr> mapping calling a function.
|
|
Karsten Hopp |
81373b |
+ Also test that a builtin function cannot be replaced.
|
|
Karsten Hopp |
81373b |
|
|
Karsten Hopp |
81373b |
STARTTEST
|
|
Karsten Hopp |
81373b |
:so small.vim
|
|
Karsten Hopp |
81373b |
***************
|
|
Karsten Hopp |
81373b |
*** 58,64 ****
|
|
Karsten Hopp |
81373b |
---*---
|
|
Karsten Hopp |
81373b |
(one
|
|
Karsten Hopp |
81373b |
(two
|
|
Karsten Hopp |
81373b |
! [(one again?:$-5,$w! test.out
|
|
Karsten Hopp |
81373b |
:delfunc Table
|
|
Karsten Hopp |
81373b |
:delfunc Compute
|
|
Karsten Hopp |
81373b |
:delfunc Expr1
|
|
Karsten Hopp |
81373b |
--- 59,68 ----
|
|
Karsten Hopp |
81373b |
---*---
|
|
Karsten Hopp |
81373b |
(one
|
|
Karsten Hopp |
81373b |
(two
|
|
Karsten Hopp |
81373b |
! [(one again?:call append(line('$'), max([1, 2, 3]))
|
|
Karsten Hopp |
81373b |
! :call extend(g:, {'max': function('min')})
|
|
Karsten Hopp |
81373b |
! :call append(line('$'), max([1, 2, 3]))
|
|
Karsten Hopp |
81373b |
! :$-7,$w! test.out
|
|
Karsten Hopp |
81373b |
:delfunc Table
|
|
Karsten Hopp |
81373b |
:delfunc Compute
|
|
Karsten Hopp |
81373b |
:delfunc Expr1
|
|
Karsten Hopp |
81373b |
*** ../vim-7.3.602/src/testdir/test34.ok 2011-10-12 22:02:07.000000000 +0200
|
|
Karsten Hopp |
81373b |
--- src/testdir/test34.ok 2012-07-16 16:43:15.000000000 +0200
|
|
Karsten Hopp |
81373b |
***************
|
|
Karsten Hopp |
81373b |
*** 4,6 ****
|
|
Karsten Hopp |
81373b |
--- 4,8 ----
|
|
Karsten Hopp |
81373b |
1. one
|
|
Karsten Hopp |
81373b |
2. two
|
|
Karsten Hopp |
81373b |
1. one again
|
|
Karsten Hopp |
81373b |
+ 3
|
|
Karsten Hopp |
81373b |
+ 3
|
|
Karsten Hopp |
81373b |
*** ../vim-7.3.602/src/window.c 2012-07-06 18:27:34.000000000 +0200
|
|
Karsten Hopp |
81373b |
--- src/window.c 2012-07-16 16:53:45.000000000 +0200
|
|
Karsten Hopp |
81373b |
***************
|
|
Karsten Hopp |
81373b |
*** 3468,3474 ****
|
|
Karsten Hopp |
81373b |
# endif
|
|
Karsten Hopp |
81373b |
#ifdef FEAT_EVAL
|
|
Karsten Hopp |
81373b |
/* init t: variables */
|
|
Karsten Hopp |
81373b |
! init_var_dict(&tp->tp_vars, &tp->tp_winvar);
|
|
Karsten Hopp |
81373b |
#endif
|
|
Karsten Hopp |
81373b |
tp->tp_ch_used = p_ch;
|
|
Karsten Hopp |
81373b |
}
|
|
Karsten Hopp |
81373b |
--- 3468,3474 ----
|
|
Karsten Hopp |
81373b |
# endif
|
|
Karsten Hopp |
81373b |
#ifdef FEAT_EVAL
|
|
Karsten Hopp |
81373b |
/* init t: variables */
|
|
Karsten Hopp |
81373b |
! init_var_dict(&tp->tp_vars, &tp->tp_winvar, VAR_SCOPE);
|
|
Karsten Hopp |
81373b |
#endif
|
|
Karsten Hopp |
81373b |
tp->tp_ch_used = p_ch;
|
|
Karsten Hopp |
81373b |
}
|
|
Karsten Hopp |
81373b |
***************
|
|
Karsten Hopp |
81373b |
*** 4410,4416 ****
|
|
Karsten Hopp |
81373b |
#endif
|
|
Karsten Hopp |
81373b |
#ifdef FEAT_EVAL
|
|
Karsten Hopp |
81373b |
/* init w: variables */
|
|
Karsten Hopp |
81373b |
! init_var_dict(&new_wp->w_vars, &new_wp->w_winvar);
|
|
Karsten Hopp |
81373b |
#endif
|
|
Karsten Hopp |
81373b |
#ifdef FEAT_FOLDING
|
|
Karsten Hopp |
81373b |
foldInitWin(new_wp);
|
|
Karsten Hopp |
81373b |
--- 4410,4416 ----
|
|
Karsten Hopp |
81373b |
#endif
|
|
Karsten Hopp |
81373b |
#ifdef FEAT_EVAL
|
|
Karsten Hopp |
81373b |
/* init w: variables */
|
|
Karsten Hopp |
81373b |
! init_var_dict(&new_wp->w_vars, &new_wp->w_winvar, VAR_SCOPE);
|
|
Karsten Hopp |
81373b |
#endif
|
|
Karsten Hopp |
81373b |
#ifdef FEAT_FOLDING
|
|
Karsten Hopp |
81373b |
foldInitWin(new_wp);
|
|
Karsten Hopp |
81373b |
*** ../vim-7.3.602/src/version.c 2012-07-16 17:27:57.000000000 +0200
|
|
Karsten Hopp |
81373b |
--- src/version.c 2012-07-16 17:29:06.000000000 +0200
|
|
Karsten Hopp |
81373b |
***************
|
|
Karsten Hopp |
81373b |
*** 716,717 ****
|
|
Karsten Hopp |
81373b |
--- 716,719 ----
|
|
Karsten Hopp |
81373b |
{ /* Add new patch number below this line */
|
|
Karsten Hopp |
81373b |
+ /**/
|
|
Karsten Hopp |
81373b |
+ 603,
|
|
Karsten Hopp |
81373b |
/**/
|
|
Karsten Hopp |
81373b |
|
|
Karsten Hopp |
81373b |
--
|
|
Karsten Hopp |
81373b |
Birthdays are healthy. The more you have them, the longer you live.
|
|
Karsten Hopp |
81373b |
|
|
Karsten Hopp |
81373b |
/// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
|
|
Karsten Hopp |
81373b |
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
|
|
Karsten Hopp |
81373b |
\\\ an exciting new programming language -- http://www.Zimbu.org ///
|
|
Karsten Hopp |
81373b |
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
|