emsg(_(e_cannot_extend_null_list));
return;
}
- l2 = argvars[1].vval.v_list;
- if ((is_new || !value_check_lock(l1->lv_lock, arg_errmsg, TRUE))
- && l2 != NULL)
+ if (is_new || !value_check_lock(l1->lv_lock, arg_errmsg, TRUE))
{
if (is_new)
{
return;
}
+ l2 = argvars[1].vval.v_list;
+ if (l2 == NULL)
+ goto theend;
+
if (argvars[2].v_type != VAR_UNKNOWN)
{
before = (long)tv_get_number_chk(&argvars[2], &error);
goto cleanup;
list_extend(l1, l2, item);
+theend:
if (is_new)
{
rettv->v_type = VAR_LIST;
LET l = [1, 2, 3]
call extend(l, [4, 5, 6], -3)
- call assert_equal([4, 5, 6, 1, 2, 3], l)
+ call assert_equal([4, 5, 6, 1, 2, 3], l)
+
+ LET l = [1, 2, 3]
+ call assert_equal([1, 2, 3], l->extend([]))
+ call assert_equal([1, 2, 3], l->extend(test_null_list()))
+ call assert_equal([1, 2, 3], l)
END
call v9.CheckLegacyAndVim9Success(lines)
LET d = {'a': 'A', 'b': 9}
call extend(d, {'b': 0, 'c': 'C'}, "keep")
call assert_equal({'a': 'A', 'b': 9, 'c': 'C'}, d)
+
+ LET d = {'a': 'A', 'b': 9}
+ call assert_equal({'a': 'A', 'b': 9}, d->extend({}))
+ call assert_equal({'a': 'A', 'b': 9}, d->extend(test_null_dict()))
+ call assert_equal({'a': 'A', 'b': 9}, d)
END
call v9.CheckLegacyAndVim9Success(lines)
call assert_equal([1, 2, 3], l)
lockvar l
call assert_equal([1, 2, 3, 4, 5], extendnew(l, [4, 5]))
+ let l2 = extendnew(l, test_null_list())
+ call assert_equal([1, 2, 3], l2)
+ let l2 += [4]
+ call assert_equal([1, 2, 3, 4], l2)
+ call assert_equal([1, 2, 3], l)
" Test extendnew() with dictionaries.
let d = {'a': {'b': 'B'}}
call assert_equal({'a': {'b': 'B'}}, d)
lockvar d
call assert_equal({'a': {'b': 'B'}, 'c': 'cc'}, extendnew(d, {'c': 'cc'}))
+ let d2 = extendnew(d, test_null_dict())
+ call assert_equal({'a': {'b': 'B'}}, d2)
+ let d2['c'] = 'C'
+ call assert_equal({'a': {'b': 'B'}, 'c': 'C'}, d2)
+ call assert_equal({'a': {'b': 'B'}}, d)
endfunc
func s:check_scope_dict(x, fixed)