updated for version 7.0179
diff --git a/src/testdir/test58.ok b/src/testdir/test58.ok
index 75caa7e..b7ed094 100644
--- a/src/testdir/test58.ok
+++ b/src/testdir/test58.ok
@@ -20,11 +20,11 @@
 wrong
 -------
 bad
-['put', 'OK', 'uk']
+['put', 'uk', 'OK']
 inputs
 ['input', 'puts', 'outputs']
 comment
-['Comment']
+['Comment', 'outtest', 'the end']
 ok
 ['OK', 'uk', 'put']
 Ok
@@ -34,7 +34,7 @@
 déôl
 ['deol', 'déôr', 'test']
 end
-['put', 'OK', 'test']
+['put', 'uk', 'test']
 the
 ['put', 'uk', 'test']
 gebletegek
@@ -141,7 +141,7 @@
 wordutilize
 ['word utilize', 'wordutils', 'wordutil']
 pro
-['bork', 'end', 'word']
+['bork', 'word', 'end']
 borkborkborkborkborkbork
 ['bork borkborkborkborkbork', 'borkbork borkborkborkbork', 'borkborkbork borkborkbork']
 tomatotomatotomato
@@ -185,7 +185,7 @@
 middle
 []
 startmiddle
-['startmiddleend']
+['startmiddleend', 'startmiddlebar']
 middleend
 []
 endstart
@@ -217,7 +217,7 @@
 middle
 []
 leadmiddle
-['leadmiddleend']
+['leadmiddleend', 'leadmiddlebar']
 middleend
 []
 endlead
@@ -249,7 +249,7 @@
 middle
 []
 leadmiddle
-[]
+['leadmiddlebar']
 middletail
 []
 taillead
diff --git a/src/testdir/test59.ok b/src/testdir/test59.ok
index 9c49be4..29c9696 100644
--- a/src/testdir/test59.ok
+++ b/src/testdir/test59.ok
@@ -20,11 +20,11 @@
 wrong
 -------
 bad
-['put', 'OK', 'uk']
+['put', 'uk', 'OK']
 inputs
 ['input', 'puts', 'outputs']
 comment
-['Comment']
+['Comment', 'outtest', 'the end']
 ok
 ['OK', 'uk', 'put']
 Ok
@@ -34,7 +34,7 @@
 déôl
 ['deol', 'déôr', 'test']
 end
-['put', 'OK', 'test']
+['put', 'uk', 'test']
 the
 ['put', 'uk', 'test']
 gebletegek
@@ -141,7 +141,7 @@
 wordutilize
 ['word utilize', 'wordutils', 'wordutil']
 pro
-['bork', 'end', 'word']
+['bork', 'word', 'end']
 borkborkborkborkborkbork
 ['bork borkborkborkborkbork', 'borkbork borkborkborkbork', 'borkborkbork borkborkbork']
 tomatotomatotomato
@@ -185,7 +185,7 @@
 middle
 []
 startmiddle
-['startmiddleend']
+['startmiddleend', 'startmiddlebar']
 middleend
 []
 endstart
@@ -217,7 +217,7 @@
 middle
 []
 leadmiddle
-['leadmiddleend']
+['leadmiddleend', 'leadmiddlebar']
 middleend
 []
 endlead
@@ -249,7 +249,7 @@
 middle
 []
 leadmiddle
-[]
+['leadmiddlebar']
 middletail
 []
 taillead
diff --git a/src/testdir/test60.in b/src/testdir/test60.in
index 9899a94..2c414b3 100644
--- a/src/testdir/test60.in
+++ b/src/testdir/test60.in
@@ -51,6 +51,10 @@
     let test_cases += [['&textwidth', 1]]
     " Existing and working option (short form)
     let test_cases += [['&tw', 1]]
+    " Global option
+    let test_cases += [['&g:errorformat', 1]]
+    " Local option
+    let test_cases += [['&l:errorformat', 1]]
     " Negative form of existing and working option (long form)
     let test_cases += [['&nojoinspaces', 0]]
     " Negative form of existing and working option (short form)
@@ -212,6 +216,26 @@
 	echo "FAILED"
     endif
 
+    " Existing local curly-brace variable
+    let str = "local"
+    let curly_{str}_var = 1
+    echo 'curly_' . str . '_var: 1'
+    if exists('curly_{str}_var')
+	echo "OK"
+    else
+	echo "FAILED"
+    endif
+
+    " Non-existing local curly-brace variable
+    unlet curly_{str}_var
+    echo 'curly_' . str . '_var: 0'
+    if !exists('curly_{str}_var')
+	echo "OK"
+    else
+	echo "FAILED"
+    endif
+
+
     " Existing global variable
     let g:global_var = 1
     echo 'g:global_var: 1'
@@ -230,29 +254,46 @@
 	echo "FAILED"
     endif
 
-    " Existing local curly-brace variable
-    let curly_local_var = 1
-    let str = "local"
-    echo 'curly_{str}_var: 1'
-    if exists('curly_{str}_var')
+    " Existing global list
+    let g:global_list = ["blue", "orange"]
+    echo 'g:global_list: 1'
+    if exists('g:global_list')
 	echo "OK"
     else
 	echo "FAILED"
     endif
 
-    " Non-existing local curly-brace variable
-    unlet curly_local_var
-    echo 'curly_{str}_var: 0'
-    if !exists('curly_{str}_var')
+    " Non-existing global list
+    unlet g:global_list
+    echo 'g:global_list: 0'
+    if !exists('g:global_list')
+	echo "OK"
+    else
+	echo "FAILED"
+    endif
+
+    " Existing global dictionary
+    let g:global_dict = {"xcord":100, "ycord":2}
+    echo 'g:global_dict: 1'
+    if exists('g:global_dict')
+	echo "OK"
+    else
+	echo "FAILED"
+    endif
+
+    " Non-existing global dictionary
+    unlet g:global_dict
+    echo 'g:global_dict: 0'
+    if !exists('g:global_dict')
 	echo "OK"
     else
 	echo "FAILED"
     endif
 
     " Existing global curly-brace variable
-    let g:curly_global_var = 1
     let str = "global"
-    echo 'g:curly_{str}_var: 1'
+    let g:curly_{str}_var = 1
+    echo 'g:curly_' . str . '_var: 1'
     if exists('g:curly_{str}_var')
 	echo "OK"
     else
@@ -260,17 +301,212 @@
     endif
 
     " Non-existing global curly-brace variable
-    unlet g:curly_global_var
-    echo 'g:curly_{str}_var: 0'
+    unlet g:curly_{str}_var
+    echo 'g:curly_' . str . '_var: 0'
     if !exists('g:curly_{str}_var')
 	echo "OK"
     else
 	echo "FAILED"
     endif
 
+    " Existing window variable
+    echo 'w:window_var: 1'
+    let w:window_var = 1
+    if exists('w:window_var')
+	echo "OK"
+    else
+	echo "FAILED"
+    endif
+
+    " Non-existing window variable
+    unlet w:window_var
+    echo 'w:window_var: 0'
+    if !exists('w:window_var')
+	echo "OK"
+    else
+	echo "FAILED"
+    endif
+
+    " Existing window list
+    let w:window_list = ["blue", "orange"]
+    echo 'w:window_list: 1'
+    if exists('w:window_list')
+	echo "OK"
+    else
+	echo "FAILED"
+    endif
+
+    " Non-existing window list
+    unlet w:window_list
+    echo 'w:window_list: 0'
+    if !exists('w:window_list')
+	echo "OK"
+    else
+	echo "FAILED"
+    endif
+
+    " Existing window dictionary
+    let w:window_dict = {"xcord":100, "ycord":2}
+    echo 'w:window_dict: 1'
+    if exists('w:window_dict')
+	echo "OK"
+    else
+	echo "FAILED"
+    endif
+
+    " Non-existing window dictionary
+    unlet w:window_dict
+    echo 'w:window_dict: 0'
+    if !exists('w:window_dict')
+	echo "OK"
+    else
+	echo "FAILED"
+    endif
+
+    " Existing window curly-brace variable
+    let str = "window"
+    let w:curly_{str}_var = 1
+    echo 'w:curly_' . str . '_var: 1'
+    if exists('w:curly_{str}_var')
+	echo "OK"
+    else
+	echo "FAILED"
+    endif
+
+    " Non-existing window curly-brace variable
+    unlet w:curly_{str}_var
+    echo 'w:curly_' . str . '_var: 0'
+    if !exists('w:curly_{str}_var')
+	echo "OK"
+    else
+	echo "FAILED"
+    endif
+
+    " Existing buffer variable
+    echo 'b:buffer_var: 1'
+    let b:buffer_var = 1
+    if exists('b:buffer_var')
+	echo "OK"
+    else
+	echo "FAILED"
+    endif
+
+    " Non-existing buffer variable
+    unlet b:buffer_var
+    echo 'b:buffer_var: 0'
+    if !exists('b:buffer_var')
+	echo "OK"
+    else
+	echo "FAILED"
+    endif
+
+    " Existing buffer list
+    let b:buffer_list = ["blue", "orange"]
+    echo 'b:buffer_list: 1'
+    if exists('b:buffer_list')
+	echo "OK"
+    else
+	echo "FAILED"
+    endif
+
+    " Non-existing buffer list
+    unlet b:buffer_list
+    echo 'b:buffer_list: 0'
+    if !exists('b:buffer_list')
+	echo "OK"
+    else
+	echo "FAILED"
+    endif
+
+    " Existing buffer dictionary
+    let b:buffer_dict = {"xcord":100, "ycord":2}
+    echo 'b:buffer_dict: 1'
+    if exists('b:buffer_dict')
+	echo "OK"
+    else
+	echo "FAILED"
+    endif
+
+    " Non-existing buffer dictionary
+    unlet b:buffer_dict
+    echo 'b:buffer_dict: 0'
+    if !exists('b:buffer_dict')
+	echo "OK"
+    else
+	echo "FAILED"
+    endif
+
+    " Existing buffer curly-brace variable
+    let str = "buffer"
+    let b:curly_{str}_var = 1
+    echo 'b:curly_' . str . '_var: 1'
+    if exists('b:curly_{str}_var')
+	echo "OK"
+    else
+	echo "FAILED"
+    endif
+
+    " Non-existing buffer curly-brace variable
+    unlet b:curly_{str}_var
+    echo 'b:curly_' . str . '_var: 0'
+    if !exists('b:curly_{str}_var')
+	echo "OK"
+    else
+	echo "FAILED"
+    endif
+
     " Script-local tests
     source test60.vim
 
+    " Existing Vim internal variable
+    echo 'v:version: 1'
+    if exists('v:version')
+	echo "OK"
+    else
+	echo "FAILED"
+    endif
+
+    " Non-existing Vim internal variable
+    echo 'v:non_exists_var: 0'
+    if !exists('v:non_exists_var')
+	echo "OK"
+    else
+	echo "FAILED"
+    endif
+
+    " Function arguments
+    function TestFuncArg(func_arg, ...)
+        echo 'a:func_arg: 1'
+        if exists('a:func_arg')
+            echo "OK"
+        else
+            echo "FAILED"
+        endif
+
+        echo 'a:non_exists_arg: 0'
+        if !exists('a:non_exists_arg')
+            echo "OK"
+        else
+            echo "FAILED"
+        endif
+
+        echo 'a:1: 1'
+        if exists('a:1')
+            echo "OK"
+        else
+            echo "FAILED"
+        endif
+
+        echo 'a:2: 0'
+        if !exists('a:2')
+            echo "OK"
+        else
+            echo "FAILED"
+        endif
+    endfunction
+
+    call TestFuncArg("arg1", "arg2")
+
     redir END
 endfunction
 :call TestExists()
diff --git a/src/testdir/test60.ok b/src/testdir/test60.ok
index fe6c4b7..46a72e4 100644
--- a/src/testdir/test60.ok
+++ b/src/testdir/test60.ok
@@ -33,6 +33,10 @@
 OK
 &tw: 1
 OK
+&g:errorformat: 1
+OK
+&l:errorformat: 1
+OK
 &nojoinspaces: 0
 OK
 &nojs: 0
@@ -85,27 +89,87 @@
 OK
 local_dict: 0
 OK
+curly_local_var: 1
+OK
+curly_local_var: 0
+OK
 g:global_var: 1
 OK
 g:global_var: 0
 OK
-curly_{str}_var: 1
+g:global_list: 1
 OK
-curly_{str}_var: 0
+g:global_list: 0
 OK
-g:curly_{str}_var: 1
+g:global_dict: 1
 OK
-g:curly_{str}_var: 0
+g:global_dict: 0
+OK
+g:curly_global_var: 1
+OK
+g:curly_global_var: 0
+OK
+w:window_var: 1
+OK
+w:window_var: 0
+OK
+w:window_list: 1
+OK
+w:window_list: 0
+OK
+w:window_dict: 1
+OK
+w:window_dict: 0
+OK
+w:curly_window_var: 1
+OK
+w:curly_window_var: 0
+OK
+b:buffer_var: 1
+OK
+b:buffer_var: 0
+OK
+b:buffer_list: 1
+OK
+b:buffer_list: 0
+OK
+b:buffer_dict: 1
+OK
+b:buffer_dict: 0
+OK
+b:curly_buffer_var: 1
+OK
+b:curly_buffer_var: 0
 OK
 s:script_var: 1
 OK
 s:script_var: 0
 OK
-s:curly_{str}_var: 1
+s:script_list: 1
 OK
-s:curly_{str}_var: 0
+s:script_list: 0
+OK
+s:script_dict: 1
+OK
+s:script_dict: 0
+OK
+s:curly_script_var: 1
+OK
+s:curly_script_var: 0
 OK
 *s:my_script_func: 1
 OK
 *s:my_script_func: 0
 OK
+v:version: 1
+OK
+v:non_exists_var: 0
+OK
+a:func_arg: 1
+OK
+a:non_exists_arg: 0
+OK
+a:1: 1
+OK
+a:2: 0
+OK
diff --git a/src/testdir/test60.vim b/src/testdir/test60.vim
new file mode 100644
index 0000000..48eea42
--- /dev/null
+++ b/src/testdir/test60.vim
@@ -0,0 +1,97 @@
+" Vim script for exists() function test
+" Script-local variables are checked here
+
+" Existing script-local variable
+let s:script_var = 1
+echo 's:script_var: 1'
+if exists('s:script_var')
+    echo "OK"
+else
+    echo "FAILED"
+endif
+
+" Non-existing script-local variable
+unlet s:script_var
+echo 's:script_var: 0'
+if !exists('s:script_var')
+    echo "OK"
+else
+    echo "FAILED"
+endif
+
+" Existing script-local list
+let s:script_list = ["blue", "orange"]
+echo 's:script_list: 1'
+if exists('s:script_list')
+    echo "OK"
+else
+    echo "FAILED"
+endif
+
+" Non-existing script-local list
+unlet s:script_list
+echo 's:script_list: 0'
+if !exists('s:script_list')
+    echo "OK"
+else
+    echo "FAILED"
+endif
+
+" Existing script-local dictionary
+let s:script_dict = {"xcord":100, "ycord":2}
+echo 's:script_dict: 1'
+if exists('s:script_dict')
+    echo "OK"
+else
+    echo "FAILED"
+endif
+
+" Non-existing script-local dictionary
+unlet s:script_dict
+echo 's:script_dict: 0'
+if !exists('s:script_dict')
+    echo "OK"
+else
+    echo "FAILED"
+endif
+
+" Existing script curly-brace variable
+let str = "script"
+let s:curly_{str}_var = 1
+echo 's:curly_' . str . '_var: 1'
+if exists('s:curly_{str}_var')
+    echo "OK"
+else
+    echo "FAILED"
+endif
+
+" Non-existing script-local curly-brace variable
+unlet s:curly_{str}_var
+echo 's:curly_' . str . '_var: 0'
+if !exists('s:curly_{str}_var')
+    echo "OK"
+else
+    echo "FAILED"
+endif
+
+" Existing script-local function
+function! s:my_script_func()
+endfunction
+
+echo '*s:my_script_func: 1'
+if exists('*s:my_script_func')
+    echo "OK"
+else
+    echo "FAILED"
+endif
+
+" Non-existing script-local function
+delfunction s:my_script_func
+
+echo '*s:my_script_func: 0'
+if !exists('*s:my_script_func')
+    echo "OK"
+else
+    echo "FAILED"
+endif
+