@@ -3737,24 +3737,27 @@ do_unlet(name, forceit)
37373737 ht = find_var_ht(name, &varname);
37383738 if (ht != NULL && *varname != NUL)
37393739 {
3740- if (ht == &globvarht)
3741- d = &globvardict;
3742- else if (current_funccal != NULL
3743- && ht == ¤t_funccal->l_vars.dv_hashtab)
3744- d = ¤t_funccal->l_vars;
3745- else
3746- {
3747- di = find_var_in_ht(ht, *name, (char_u *)"", FALSE);
3748- d = di->di_tv.vval.v_dict;
3749- }
37503740 hi = hash_find(ht, varname);
37513741 if (!HASHITEM_EMPTY(hi))
37523742 {
37533743 di = HI2DI(hi);
37543744 if (var_check_fixed(di->di_flags, name, FALSE)
3755- || var_check_ro(di->di_flags, name, FALSE)
3756- || tv_check_lock(d->dv_lock, name, FALSE))
3745+ || var_check_ro(di->di_flags, name, FALSE))
37573746 return FAIL;
3747+
3748+ if (ht == &globvarht)
3749+ d = &globvardict;
3750+ else if (current_funccal != NULL
3751+ && ht == ¤t_funccal->l_vars.dv_hashtab)
3752+ d = ¤t_funccal->l_vars;
3753+ else
3754+ {
3755+ di = find_var_in_ht(ht, *name, (char_u *)"", FALSE);
3756+ d = di->di_tv.vval.v_dict;
3757+ }
3758+ if (d == NULL || tv_check_lock(d->dv_lock, name, FALSE))
3759+ return FAIL;
3760+
37583761 delete_var(ht, hi);
37593762 return OK;
37603763 }
0 commit comments