0
0
mirror of https://github.com/vim/vim.git synced 2025-10-02 05:04:20 -04:00

updated for version 7.1-120

This commit is contained in:
Bram Moolenaar
2007-09-25 16:00:00 +00:00
parent 719939c888
commit 9d2c8c1a66
21 changed files with 86 additions and 15 deletions

View File

@@ -1,4 +1,4 @@
*eval.txt* For Vim version 7.1. Last change: 2007 Jul 25 *eval.txt* For Vim version 7.1. Last change: 2007 Sep 25
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -1603,7 +1603,7 @@ foldtext( ) String line displayed for closed fold
foldtextresult( {lnum}) String text for closed fold at {lnum} foldtextresult( {lnum}) String text for closed fold at {lnum}
foreground( ) Number bring the Vim window to the foreground foreground( ) Number bring the Vim window to the foreground
function( {name}) Funcref reference to function {name} function( {name}) Funcref reference to function {name}
garbagecollect() none free memory, breaking cyclic references garbagecollect( [at_exit]) none free memory, breaking cyclic references
get( {list}, {idx} [, {def}]) any get item {idx} from {list} or {def} get( {list}, {idx} [, {def}]) any get item {idx} from {list} or {def}
get( {dict}, {key} [, {def}]) any get item {key} from {dict} or {def} get( {dict}, {key} [, {def}]) any get item {key} from {dict} or {def}
getbufline( {expr}, {lnum} [, {end}]) getbufline( {expr}, {lnum} [, {end}])
@@ -2673,7 +2673,7 @@ function({name}) *function()* *E700*
{name} can be a user defined function or an internal function. {name} can be a user defined function or an internal function.
garbagecollect() *garbagecollect()* garbagecollect([at_exit]) *garbagecollect()*
Cleanup unused |Lists| and |Dictionaries| that have circular Cleanup unused |Lists| and |Dictionaries| that have circular
references. There is hardly ever a need to invoke this references. There is hardly ever a need to invoke this
function, as it is automatically done when Vim runs out of function, as it is automatically done when Vim runs out of
@@ -2683,6 +2683,9 @@ garbagecollect() *garbagecollect()*
This is useful if you have deleted a very big |List| and/or This is useful if you have deleted a very big |List| and/or
|Dictionary| with circular references in a script that runs |Dictionary| with circular references in a script that runs
for a long time. for a long time.
When the optional "at_exit" argument is one, garbage
collection will also be done when exiting Vim, if it wasn't
done before. This is useful when checking for memory leaks.
get({list}, {idx} [, {default}]) *get()* get({list}, {idx} [, {default}]) *get()*
Get item {idx} from |List| {list}. When this item is not Get item {idx} from |List| {list}. When this item is not

View File

@@ -6128,6 +6128,7 @@ garbage_collect()
/* Only do this once. */ /* Only do this once. */
want_garbage_collect = FALSE; want_garbage_collect = FALSE;
may_garbage_collect = FALSE; may_garbage_collect = FALSE;
garbage_collect_at_exit = FALSE;
/* /*
* 1. Go through all accessible variables and mark all lists and dicts * 1. Go through all accessible variables and mark all lists and dicts
@@ -7110,7 +7111,7 @@ static struct fst
{"foldtextresult", 1, 1, f_foldtextresult}, {"foldtextresult", 1, 1, f_foldtextresult},
{"foreground", 0, 0, f_foreground}, {"foreground", 0, 0, f_foreground},
{"function", 1, 1, f_function}, {"function", 1, 1, f_function},
{"garbagecollect", 0, 0, f_garbagecollect}, {"garbagecollect", 0, 1, f_garbagecollect},
{"get", 2, 3, f_get}, {"get", 2, 3, f_get},
{"getbufline", 2, 3, f_getbufline}, {"getbufline", 2, 3, f_getbufline},
{"getbufvar", 2, 2, f_getbufvar}, {"getbufvar", 2, 2, f_getbufvar},
@@ -9719,6 +9720,9 @@ f_garbagecollect(argvars, rettv)
/* This is postponed until we are back at the toplevel, because we may be /* This is postponed until we are back at the toplevel, because we may be
* using Lists and Dicts internally. E.g.: ":echo [garbagecollect()]". */ * using Lists and Dicts internally. E.g.: ":echo [garbagecollect()]". */
want_garbage_collect = TRUE; want_garbage_collect = TRUE;
if (argvars[0].v_type != VAR_UNKNOWN && get_tv_number(&argvars[0]) == 1)
garbage_collect_at_exit = TRUE;
} }
/* /*

View File

@@ -301,13 +301,17 @@ EXTERN except_T *caught_stack INIT(= NULL);
#endif #endif
#ifdef FEAT_EVAL #ifdef FEAT_EVAL
/* Garbage collection can only take place when we are sure there are no Lists /*
* Garbage collection can only take place when we are sure there are no Lists
* or Dictionaries being used internally. This is flagged with * or Dictionaries being used internally. This is flagged with
* "may_garbage_collect" when we are at the toplevel. * "may_garbage_collect" when we are at the toplevel.
* "want_garbage_collect" is set by the garbagecollect() function, which means * "want_garbage_collect" is set by the garbagecollect() function, which means
* we do garbage collection before waiting for a char at the toplevel. */ * we do garbage collection before waiting for a char at the toplevel.
* "garbage_collect_at_exit" indicates garbagecollect(1) was called.
*/
EXTERN int may_garbage_collect INIT(= FALSE); EXTERN int may_garbage_collect INIT(= FALSE);
EXTERN int want_garbage_collect INIT(= FALSE); EXTERN int want_garbage_collect INIT(= FALSE);
EXTERN int garbage_collect_at_exit INIT(= FALSE);
/* ID of script being sourced or was sourced to define the current function. */ /* ID of script being sourced or was sourced to define the current function. */
EXTERN scid_T current_SID INIT(= 0); EXTERN scid_T current_SID INIT(= 0);

View File

@@ -1334,6 +1334,10 @@ getout(exitval)
#ifdef FEAT_CSCOPE #ifdef FEAT_CSCOPE
cs_end(); cs_end();
#endif #endif
#ifdef FEAT_EVAL
if (garbage_collect_at_exit)
garbage_collect();
#endif
mch_exit(exitval); mch_exit(exitval);
} }

View File

@@ -6,7 +6,7 @@ VIMPROG = ../vim
# Uncomment this line for using valgrind. # Uncomment this line for using valgrind.
# The output goes into a file "valgrind.$PID" (sorry, no test number). # The output goes into a file "valgrind.$PID" (sorry, no test number).
# VALGRIND = valgrind --tool=memcheck --num-callers=15 --logfile=valgrind # VALGRIND = valgrind --tool=memcheck --leak-check=yes --num-callers=15 --logfile=valgrind
SCRIPTS = test1.out test2.out test3.out test4.out test5.out test6.out \ SCRIPTS = test1.out test2.out test3.out test4.out test5.out test6.out \
test7.out test8.out test9.out test10.out test11.out \ test7.out test8.out test9.out test10.out test11.out \
@@ -39,7 +39,7 @@ gui: nolog $(SCRIPTS) $(SCRIPTS_GUI)
$(SCRIPTS) $(SCRIPTS_GUI): $(VIMPROG) $(SCRIPTS) $(SCRIPTS_GUI): $(VIMPROG)
clean: clean:
-rm -rf *.out *.failed *.rej *.orig test.log tiny.vim small.vim mbyte.vim test.ok X* viminfo -rm -rf *.out *.failed *.rej *.orig test.log tiny.vim small.vim mbyte.vim test.ok X* valgrind.pid* viminfo
test1.out: test1.in test1.out: test1.in
-rm -f $*.failed tiny.vim small.vim mbyte.vim test.ok X* viminfo -rm -f $*.failed tiny.vim small.vim mbyte.vim test.ok X* viminfo
@@ -66,5 +66,9 @@ test1.out: test1.in
fi" fi"
-rm -rf X* test.ok viminfo -rm -rf X* test.ok viminfo
test49.out: test49.vim
test60.out: test60.vim
nolog: nolog:
-echo Test results: >test.log -echo Test results: >test.log

View File

@@ -18,6 +18,7 @@ vaBiBD:?Bug?,/Piece/-2w! test.out
: let tt = "o\<C-V>65\<C-V>x42\<C-V>o103 \<C-V>33a\<C-V>xfg\<C-V>o78\<Esc>" : let tt = "o\<C-V>65\<C-V>x42\<C-V>o103 \<C-V>33a\<C-V>xfg\<C-V>o78\<Esc>"
:endif :endif
:exe "normal " . tt :exe "normal " . tt
:unlet tt
:.w >>test.out :.w >>test.out
:set vb :set vb
/^Piece /^Piece

View File

@@ -37,6 +37,7 @@ mt:let i = 0
: endif : endif
: endif : endif
:endwhile :endwhile
:unlet i j
:'t,$w! test.out :'t,$w! test.out
:qa! :qa!
ENDTEST ENDTEST

View File

@@ -52,7 +52,15 @@ XX+-XX
---*--- ---*---
(one (one
(two (two
[(one again:$-5,$wq! test.out [(one again:$-5,$w! test.out
:delfunc Table
:delfunc Compute
:delfunc Expr1
:delfunc Expr2
:delfunc ListItem
:delfunc ListReset
:unlet retval counter
:q!
ENDTEST ENDTEST
here here

View File

@@ -55,6 +55,7 @@ endfun
/kk$ /kk$
:call append("$", foldlevel(".")) :call append("$", foldlevel("."))
:/^last/+1,$w! test.out :/^last/+1,$w! test.out
:delfun Flvl
:qa! :qa!
ENDTEST ENDTEST

View File

@@ -34,6 +34,7 @@ j:let three = three . "-" . winline()
:call append("$", two) :call append("$", two)
:call append("$", three) :call append("$", three)
:$-2,$w! test.out :$-2,$w! test.out
:unlet one two three
:qa! :qa!
ENDTEST ENDTEST

View File

@@ -1,13 +1,29 @@
This is a test of the script language. This is a test of the script language.
If after adding a new test, the test output doesn't appear properly in If after adding a new test, the test output doesn't appear properly in
test49.failed, try to add one ore more "G"s at the line before ENDTEST. test49.failed, try to add one ore more "G"s at the line ending in "test.out"
STARTTEST STARTTEST
:so small.vim :so small.vim
:se nocp nomore viminfo+=nviminfo :se nocp nomore viminfo+=nviminfo
:so test49.vim :so test49.vim
GGGGGGGGGG"rp:.-,$wq! test.out GGGGGGGGGGGGGG"rp:.-,$w! test.out
:"
:" make valgrind happy
:redir => funclist
:silent func
:redir END
:for line in split(funclist, "\n")
: let name = matchstr(line, 'function \zs[A-Z]\w*\ze(')
: if name != ''
: exe "delfunc " . name
: endif
:endfor
:for v in keys(g:)
: silent! exe "unlet " . v
:endfor
:unlet v
:qa!
ENDTEST ENDTEST
Results of test49.vim: Results of test49.vim:

View File

@@ -345,6 +345,10 @@ let l = [0, 1, 2, 3]
:endfun :endfun
:call Test(1, 2, [3, 4], {5: 6}) " This may take a while :call Test(1, 2, [3, 4], {5: 6}) " This may take a while
:" :"
:delfunc Test
:unlet dict
:call garbagecollect(1)
:"
:/^start:/,$wq! test.out :/^start:/,$wq! test.out
ENDTEST ENDTEST

View File

@@ -17,5 +17,5 @@ endfun
fun s:DoNothing() fun s:DoNothing()
call append(line('$'), "nothing line") call append(line('$'), "nothing line")
endfun endfun
nnoremap <buffer> _x :call <SID>DoNothing()<bar>call <SID>DoLast()<cr> nnoremap <buffer> _x :call <SID>DoNothing()<bar>call <SID>DoLast()<bar>delfunc <SID>DoNothing<bar>delfunc <SID>DoLast<cr>
end: end:

View File

@@ -86,6 +86,7 @@ gg:/^addstart/+1,/^addend/-1w! Xtest.latin1.add
:$put =str :$put =str
`m]s:let [str, a] = spellbadword() `m]s:let [str, a] = spellbadword()
:$put =str :$put =str
:unlet str a
:" :"
:" Postponed prefixes :" Postponed prefixes
:call TestOne('2', '1') :call TestOne('2', '1')
@@ -100,6 +101,10 @@ gg:/^addstart/+1,/^addend/-1w! Xtest.latin1.add
:" NOSLITSUGS :" NOSLITSUGS
:call TestOne('8', '8') :call TestOne('8', '8')
:" :"
:" clean up for valgrind
:delfunc TestOne
:set spl= enc=latin1
:"
gg:/^test output:/,$wq! test.out gg:/^test output:/,$wq! test.out
ENDTEST ENDTEST

View File

@@ -90,6 +90,7 @@ gg:/^addstart/+1,/^addend/-1w! Xtest.utf-8.add
:$put =str :$put =str
`m]s:let [str, a] = spellbadword() `m]s:let [str, a] = spellbadword()
:$put =str :$put =str
:unlet str a
:" :"
:" Postponed prefixes :" Postponed prefixes
:call TestOne('2', '1') :call TestOne('2', '1')
@@ -101,6 +102,10 @@ gg:/^addstart/+1,/^addend/-1w! Xtest.utf-8.add
:call TestOne('6', '6') :call TestOne('6', '6')
:call TestOne('7', '7') :call TestOne('7', '7')
:" :"
:" clean up for valgrind
:delfunc TestOne
:set spl= enc=latin1
:"
gg:/^test output:/,$wq! test.out gg:/^test output:/,$wq! test.out
ENDTEST ENDTEST

View File

@@ -569,6 +569,9 @@ endfunction
redir END redir END
endfunction endfunction
:call TestExists() :call TestExists()
:delfunc TestExists
:delfunc RunTest
:delfunc TestFuncArg
:edit! test.out :edit! test.out
:set ff=unix :set ff=unix
:w :w

View File

@@ -94,4 +94,5 @@ if !exists('*s:my_script_func')
else else
echo "FAILED" echo "FAILED"
endif endif
unlet str

View File

@@ -7,6 +7,7 @@ STARTTEST
:let nr = tabpagenr() :let nr = tabpagenr()
:q :q
:call append(line('$'), 'tab page ' . nr) :call append(line('$'), 'tab page ' . nr)
:unlet nr
:" :"
:" Open three tab pages and use ":tabdo" :" Open three tab pages and use ":tabdo"
:0tabnew :0tabnew
@@ -23,6 +24,7 @@ STARTTEST
:q! :q!
:call append(line('$'), line1) :call append(line('$'), line1)
:call append(line('$'), line2) :call append(line('$'), line2)
:unlet line1 line2
:" :"
:" :"
:/^Results/,$w! test.out :/^Results/,$w! test.out

View File

@@ -60,7 +60,7 @@ STARTTEST
:else :else
: let @r .= "FAILED\n" : let @r .= "FAILED\n"
:endif :endif
:" --- Check that "matchdelete()" returns 0 if succesfull and otherwise -1. :" --- Check that "matchdelete()" returns 0 if successful and otherwise -1.
:let @r .= "*** Test 6: " :let @r .= "*** Test 6: "
:let m = matchadd("MyGroup1", "TODO") :let m = matchadd("MyGroup1", "TODO")
:let r1 = matchdelete(m) :let r1 = matchdelete(m)
@@ -117,7 +117,7 @@ STARTTEST
:" --- Check that "setmatches()" will not add two matches with the same ID. The :" --- Check that "setmatches()" will not add two matches with the same ID. The
:" --- expected behaviour (for now) is to add the first match but not the :" --- expected behaviour (for now) is to add the first match but not the
:" --- second and to return 0 (even though it is a matter of debate whether :" --- second and to return 0 (even though it is a matter of debate whether
:" --- this can be considered succesfull behaviour). :" --- this can be considered successful behaviour).
:let @r .= "*** Test 9: " :let @r .= "*** Test 9: "
:let r1 = setmatches([{'group': 'MyGroup1', 'pattern': 'TODO', 'priority': 10, 'id': 1}, {'group': 'MyGroup2', 'pattern': 'FIXME', 'priority': 10, 'id': 1}]) :let r1 = setmatches([{'group': 'MyGroup1', 'pattern': 'TODO', 'priority': 10, 'id': 1}, {'group': 'MyGroup2', 'pattern': 'FIXME', 'priority': 10, 'id': 1}])
:if getmatches() == [{'group': 'MyGroup1', 'pattern': 'TODO', 'priority': 10, 'id': 1}] && r1 == 0 :if getmatches() == [{'group': 'MyGroup1', 'pattern': 'TODO', 'priority': 10, 'id': 1}] && r1 == 0
@@ -127,7 +127,7 @@ STARTTEST
:endif :endif
:call clearmatches() :call clearmatches()
:unlet r1 :unlet r1
:" --- Check that "setmatches()" returns 0 if succesfull and otherwise -1. :" --- Check that "setmatches()" returns 0 if successful and otherwise -1.
:" --- (A range of valid and invalid input values are tried out to generate the :" --- (A range of valid and invalid input values are tried out to generate the
:" --- return values.) :" --- return values.)
:let @r .= "*** Test 10: " :let @r .= "*** Test 10: "

View File

@@ -44,8 +44,10 @@ STARTTEST
: $put ='ERROR: pat: \"' . t[0] . '\", text: \"' . t[1] . '\", submatch ' . i . ': \"' . l[i] . '\", expected: \"' . e . '\"' : $put ='ERROR: pat: \"' . t[0] . '\", text: \"' . t[1] . '\", submatch ' . i . ': \"' . l[i] . '\", expected: \"' . e . '\"'
: endif : endif
: endfor : endfor
: unlet i
: endif : endif
:endfor :endfor
:unlet t tl e l
:/^Results/,$wq! test.out :/^Results/,$wq! test.out
ENDTEST ENDTEST

View File

@@ -666,6 +666,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
120,
/**/ /**/
119, 119,
/**/ /**/