summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2016-01-31 18:45:24 +0100
committerBram Moolenaar <Bram@vim.org>2016-01-31 18:45:24 +0100
commit155500077c80cdb5d9c63996000c011b66a676bf (patch)
tree4af4b56ec06197b39241f8f734a71dd99411efd0
parent448a22549b4528fd81d520497f30672567199c96 (diff)
patch 7.4.1228v7.4.1228
Problem: copy() and deepcopy() fail with special variables. (Nikolai Pavlov) Solution: Make it work. Add a test. Closes #614.
-rw-r--r--src/eval.c1
-rw-r--r--src/testdir/test_viml.vim10
-rw-r--r--src/version.c2
3 files changed, 13 insertions, 0 deletions
diff --git a/src/eval.c b/src/eval.c
index a4f5531d96..4c530a0bf2 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -21939,6 +21939,7 @@ item_copy(
#endif
case VAR_STRING:
case VAR_FUNC:
+ case VAR_SPECIAL:
copy_tv(from, to);
break;
case VAR_LIST:
diff --git a/src/testdir/test_viml.vim b/src/testdir/test_viml.vim
index f7b34146ac..6c755bb534 100644
--- a/src/testdir/test_viml.vim
+++ b/src/testdir/test_viml.vim
@@ -1001,6 +1001,16 @@ func Test_type()
call assert_equal(v:none, eval(string(v:none)))
call assert_equal(v:null, eval(string(v:null)))
+ call assert_equal(v:false, copy(v:false))
+ call assert_equal(v:true, copy(v:true))
+ call assert_equal(v:none, copy(v:none))
+ call assert_equal(v:null, copy(v:null))
+
+ call assert_equal([v:false], deepcopy([v:false]))
+ call assert_equal([v:true], deepcopy([v:true]))
+ call assert_equal([v:none], deepcopy([v:none]))
+ call assert_equal([v:null], deepcopy([v:null]))
+
call assert_true(empty(v:false))
call assert_false(empty(v:true))
call assert_true(empty(v:null))
diff --git a/src/version.c b/src/version.c
index 1130a20a2e..6eb8b240d8 100644
--- a/src/version.c
+++ b/src/version.c
@@ -743,6 +743,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1228,
+/**/
1227,
/**/
1226,