patch 8.0.1285: occasional crash when using a channel
Problem: Occasional crash when using a channel. (Marek)
Solution: Decrement reference count later. (closes #2315)
diff --git a/runtime/autoload/filetype.vim b/runtime/autoload/dist/ft.vim
similarity index 92%
rename from runtime/autoload/filetype.vim
rename to runtime/autoload/dist/ft.vim
index 66e64b2..2603c68 100644
--- a/runtime/autoload/filetype.vim
+++ b/runtime/autoload/dist/ft.vim
@@ -1,7 +1,7 @@
" Vim functions for file type detection
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
-" Last Change: 2017 Nov 09
+" Last Change: 2017 Nov 11
" These functions are moved here from runtime/filetype.vim to make startup
" faster.
@@ -10,7 +10,7 @@
let s:cpo_save = &cpo
set cpo&vim
-func filetype#Check_inp()
+func dist#ft#Check_inp()
if getline(1) =~ '^\*'
setf abaqus
else
@@ -32,14 +32,14 @@
" This function checks for the kind of assembly that is wanted by the user, or
" can be detected from the first five lines of the file.
-func filetype#FTasm()
+func dist#ft#FTasm()
" make sure b:asmsyntax exists
if !exists("b:asmsyntax")
let b:asmsyntax = ""
endif
if b:asmsyntax == ""
- call filetype#FTasmsyntax()
+ call dist#ft#FTasmsyntax()
endif
" if b:asmsyntax still isn't set, default to asmsyntax or GNU
@@ -54,7 +54,7 @@
exe "setf " . fnameescape(b:asmsyntax)
endfunc
-func filetype#FTasmsyntax()
+func dist#ft#FTasmsyntax()
" see if file contains any asmsyntax=foo overrides. If so, change
" b:asmsyntax appropriately
let head = " ".getline(1)." ".getline(2)." ".getline(3)." ".getline(4).
@@ -69,7 +69,7 @@
" Check if one of the first five lines contains "VB_Name". In that case it is
" probably a Visual Basic file. Otherwise it's assumed to be "alt" filetype.
-func filetype#FTVB(alt)
+func dist#ft#FTVB(alt)
if getline(1).getline(2).getline(3).getline(4).getline(5) =~? 'VB_Name\|Begin VB\.\(Form\|MDIForm\|UserControl\)'
setf vb
else
@@ -77,7 +77,7 @@
endif
endfunc
-func filetype#FTbtm()
+func dist#ft#FTbtm()
if exists("g:dosbatch_syntax_for_btm") && g:dosbatch_syntax_for_btm
setf dosbatch
else
@@ -85,7 +85,7 @@
endif
endfunc
-func filetype#BindzoneCheck(default)
+func dist#ft#BindzoneCheck(default)
if getline(1).getline(2).getline(3).getline(4) =~ '^; <<>> DiG [0-9.]\+.* <<>>\|$ORIGIN\|$TTL\|IN\s\+SOA'
setf bindzone
elseif a:default != ''
@@ -93,7 +93,7 @@
endif
endfunc
-func filetype#FTlpc()
+func dist#ft#FTlpc()
if exists("g:lpc_syntax_for_c")
let lnum = 1
while lnum <= 12
@@ -107,7 +107,7 @@
setf c
endfunc
-func filetype#FTheader()
+func dist#ft#FTheader()
if match(getline(1, min([line("$"), 200])), '^@\(interface\|end\|class\)') > -1
if exists("g:c_syntax_for_h")
setf objc
@@ -128,7 +128,7 @@
" If the first line starts with # or ! it's probably a ch file.
" If a line has "main", "include", "//" ir "/*" it's probably ch.
" Otherwise CHILL is assumed.
-func filetype#FTchange()
+func dist#ft#FTchange()
let lnum = 1
while lnum <= 10
if getline(lnum)[0] == '@'
@@ -152,7 +152,7 @@
setf chill
endfunc
-func filetype#FTent()
+func dist#ft#FTent()
" This function checks for valid cl syntax in the first five lines.
" Look for either an opening comment, '#', or a block start, '{".
" If not found, assume SGML.
@@ -172,7 +172,7 @@
setf dtd
endfunc
-func filetype#EuphoriaCheck()
+func dist#ft#EuphoriaCheck()
if exists('g:filetype_euphoria')
exe 'setf ' . g:filetype_euphoria
else
@@ -180,7 +180,7 @@
endif
endfunc
-func filetype#DtraceCheck()
+func dist#ft#DtraceCheck()
let lines = getline(1, min([line("$"), 100]))
if match(lines, '^module\>\|^import\>') > -1
" D files often start with a module and/or import statement.
@@ -192,7 +192,7 @@
endif
endfunc
-func filetype#FTe()
+func dist#ft#FTe()
if exists('g:filetype_euphoria')
exe 'setf ' . g:filetype_euphoria
else
@@ -209,7 +209,7 @@
endfunc
" Distinguish between HTML, XHTML and Django
-func filetype#FThtml()
+func dist#ft#FThtml()
let n = 1
while n < 10 && n < line("$")
if getline(n) =~ '\<DTD\s\+XHTML\s'
@@ -226,7 +226,7 @@
endfunc
" Distinguish between standard IDL and MS-IDL
-func filetype#FTidl()
+func dist#ft#FTidl()
let n = 1
while n < 50 && n < line("$")
if getline(n) =~ '^\s*import\s\+"\(unknwn\|objidl\)\.idl"'
@@ -239,7 +239,7 @@
endfunc
" Distinguish between "default" and Cproto prototype file. */
-func filetype#ProtoCheck(default)
+func dist#ft#ProtoCheck(default)
" Cproto files have a comment in the first line and a function prototype in
" the second line, it always ends in ";". Indent files may also have
" comments, thus we can't match comments to see the difference.
@@ -252,7 +252,7 @@
endif
endfunc
-func filetype#FTm()
+func dist#ft#FTm()
let n = 1
let saw_comment = 0 " Whether we've seen a multiline comment leader.
while n < 100
@@ -296,7 +296,7 @@
endif
endfunc
-func filetype#FTmms()
+func dist#ft#FTmms()
let n = 1
while n < 10
let line = getline(n)
@@ -315,7 +315,7 @@
" This function checks if one of the first five lines start with a dot. In
" that case it is probably an nroff file: 'filetype' is set and 1 is returned.
-func filetype#FTnroff()
+func dist#ft#FTnroff()
if getline(1)[0] . getline(2)[0] . getline(3)[0] . getline(4)[0] . getline(5)[0] =~ '\.'
setf nroff
return 1
@@ -323,7 +323,7 @@
return 0
endfunc
-func filetype#FTmm()
+func dist#ft#FTmm()
let n = 1
while n < 10
let line = getline(n)
@@ -336,7 +336,7 @@
setf nroff
endfunc
-func filetype#FTpl()
+func dist#ft#FTpl()
if exists("g:filetype_pl")
exe "setf " . g:filetype_pl
else
@@ -351,7 +351,7 @@
endif
endfunc
-func filetype#FTinc()
+func dist#ft#FTinc()
if exists("g:filetype_inc")
exe "setf " . g:filetype_inc
else
@@ -363,7 +363,7 @@
elseif lines =~ "<?"
setf php
else
- call filetype#FTasmsyntax()
+ call dist#ft#FTasmsyntax()
if exists("b:asmsyntax")
exe "setf " . fnameescape(b:asmsyntax)
else
@@ -373,7 +373,7 @@
endif
endfunc
-func filetype#FTprogress_cweb()
+func dist#ft#FTprogress_cweb()
if exists("g:filetype_w")
exe "setf " . g:filetype_w
return
@@ -385,7 +385,7 @@
endif
endfunc
-func filetype#FTprogress_asm()
+func dist#ft#FTprogress_asm()
if exists("g:filetype_i")
exe "setf " . g:filetype_i
return
@@ -396,7 +396,7 @@
while lnum <= 10 && lnum < line('$')
let line = getline(lnum)
if line =~ '^\s*;' || line =~ '^\*'
- call filetype#FTasm()
+ call dist#ft#FTasm()
return
elseif line !~ '^\s*$' || line =~ '^/\*'
" Not an empty line: Doesn't look like valid assembly code.
@@ -408,7 +408,7 @@
setf progress
endfunc
-func filetype#FTprogress_pascal()
+func dist#ft#FTprogress_pascal()
if exists("g:filetype_p")
exe "setf " . g:filetype_p
return
@@ -433,7 +433,7 @@
setf progress
endfunc
-func filetype#FTr()
+func dist#ft#FTr()
let max = line("$") > 50 ? 50 : line("$")
for n in range(1, max)
@@ -466,7 +466,7 @@
endif
endfunc
-func filetype#McSetf()
+func dist#ft#McSetf()
" Rely on the file to start with a comment.
" MS message text files use ';', Sendmail files use '#' or 'dnl'
for lnum in range(1, min([line("$"), 20]))
@@ -483,21 +483,21 @@
endfunc
" Called from filetype.vim and scripts.vim.
-func filetype#SetFileTypeSH(name)
+func dist#ft#SetFileTypeSH(name)
if expand("<amatch>") =~ g:ft_ignore_pat
return
endif
if a:name =~ '\<csh\>'
" Some .sh scripts contain #!/bin/csh.
- call filetype#SetFileTypeShell("csh")
+ call dist#ft#SetFileTypeShell("csh")
return
elseif a:name =~ '\<tcsh\>'
" Some .sh scripts contain #!/bin/tcsh.
- call filetype#SetFileTypeShell("tcsh")
+ call dist#ft#SetFileTypeShell("tcsh")
return
elseif a:name =~ '\<zsh\>'
" Some .sh scripts contain #!/bin/zsh.
- call filetype#SetFileTypeShell("zsh")
+ call dist#ft#SetFileTypeShell("zsh")
return
elseif a:name =~ '\<ksh\>'
let b:is_kornshell = 1
@@ -524,13 +524,13 @@
unlet b:is_bash
endif
endif
- call filetype#SetFileTypeShell("sh")
+ call dist#ft#SetFileTypeShell("sh")
endfunc
" For shell-like file types, check for an "exec" command hidden in a comment,
" as used for Tcl.
" Also called from scripts.vim, thus can't be local to this script.
-func filetype#SetFileTypeShell(name)
+func dist#ft#SetFileTypeShell(name)
if expand("<amatch>") =~ g:ft_ignore_pat
return
endif
@@ -550,18 +550,18 @@
exe "setf " . a:name
endfunc
-func filetype#CSH()
+func dist#ft#CSH()
if exists("g:filetype_csh")
- call filetype#SetFileTypeShell(g:filetype_csh)
+ call dist#ft#SetFileTypeShell(g:filetype_csh)
elseif &shell =~ "tcsh"
- call filetype#SetFileTypeShell("tcsh")
+ call dist#ft#SetFileTypeShell("tcsh")
else
- call filetype#SetFileTypeShell("csh")
+ call dist#ft#SetFileTypeShell("csh")
endif
endfunc
let s:ft_rules_udev_rules_pattern = '^\s*\cudev_rules\s*=\s*"\([^"]\{-1,}\)/*".*'
-func filetype#FTRules()
+func dist#ft#FTRules()
let path = expand('<amatch>:p')
if path =~ '^/\(etc/udev/\%(rules\.d/\)\=.*\.rules\|lib/udev/\%(rules\.d/\)\=.*\.rules\)$'
setf udevrules
@@ -594,7 +594,7 @@
setf hog
endfunc
-func filetype#SQL()
+func dist#ft#SQL()
if exists("g:filetype_sql")
exe "setf " . g:filetype_sql
else
@@ -608,7 +608,7 @@
" file.
" (Slow test) If a file contains a 'use' statement then it is almost certainly
" a Perl file.
-func filetype#FTperl()
+func dist#ft#FTperl()
let dirname = expand("%:p:h:t")
if expand("%:e") == 't' && (dirname == 't' || dirname == 'xt')
setf perl
@@ -629,7 +629,7 @@
" 1. Check the first line of the file for "%&<format>".
" 2. Check the first 1000 non-comment lines for LaTeX or ConTeXt keywords.
" 3. Default to "latex" or to g:tex_flavor, can be set in user's vimrc.
-func filetype#FTtex()
+func dist#ft#FTtex()
let firstline = getline(1)
if firstline =~ '^%&\s*\a\+'
let format = tolower(matchstr(firstline, '\a\+'))
@@ -681,7 +681,7 @@
return
endfunc
-func filetype#FTxml()
+func dist#ft#FTxml()
let n = 1
while n < 100 && n < line("$")
let line = getline(n)
@@ -707,7 +707,7 @@
setf xml
endfunc
-func filetype#FTy()
+func dist#ft#FTy()
let n = 1
while n < 100 && n < line("$")
let line = getline(n)
@@ -724,7 +724,7 @@
setf yacc
endfunc
-func filetype#Redif()
+func dist#ft#Redif()
let lnum = 1
while lnum <= 5 && lnum < line('$')
if getline(lnum) =~ "^\ctemplate-type:"