diff options
-rw-r--r-- | src/eval.c | 22 | ||||
-rw-r--r-- | src/version.c | 2 |
2 files changed, 23 insertions, 1 deletions
diff --git a/src/eval.c b/src/eval.c index 231197351..0762cabac 100644 --- a/src/eval.c +++ b/src/eval.c @@ -701,6 +701,7 @@ static void list_one_var __ARGS((dictitem_T *v, char_u *prefix)); static void list_one_var_a __ARGS((char_u *prefix, char_u *name, int type, char_u *string)); static void set_var __ARGS((char_u *name, typval_T *varp, int copy)); static int var_check_ro __ARGS((int flags, char_u *name)); +static int var_check_fixed __ARGS((int flags, char_u *name)); static int tv_check_lock __ARGS((int lock, char_u *name)); static void copy_tv __ARGS((typval_T *from, typval_T *to)); static int item_copy __ARGS((typval_T *from, typval_T *to, int deep, int copyID)); @@ -3364,6 +3365,8 @@ do_unlet(name, forceit) hi = hash_find(ht, varname); if (!HASHITEM_EMPTY(hi)) { + if (var_check_fixed(HI2DI(hi)->di_flags, name)) + return FAIL; if (var_check_ro(HI2DI(hi)->di_flags, name)) return FAIL; delete_var(ht, hi); @@ -17818,7 +17821,7 @@ set_var(name, tv, copy) } /* - * Return TRUE if di_flags "flags" indicate read-only variable "name". + * Return TRUE if di_flags "flags" indicates variable "name" is read-only. * Also give an error message. */ static int @@ -17840,6 +17843,23 @@ var_check_ro(flags, name) } /* + * Return TRUE if di_flags "flags" indicates variable "name" is fixed. + * Also give an error message. + */ + static int +var_check_fixed(flags, name) + int flags; + char_u *name; +{ + if (flags & DI_FLAGS_FIX) + { + EMSG2(_("E795: Cannot delete variable %s"), name); + return TRUE; + } + return FALSE; +} + +/* * Return TRUE if typeval "tv" is set to be locked (immutable). * Also give an error message, using "name". */ diff --git a/src/version.c b/src/version.c index 722107c73..549f18bd6 100644 --- a/src/version.c +++ b/src/version.c @@ -667,6 +667,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 77, +/**/ 76, /**/ 75, |