summaryrefslogtreecommitdiff
path: root/data/vim/patches/8.1.0557
diff options
context:
space:
mode:
Diffstat (limited to 'data/vim/patches/8.1.0557')
-rw-r--r--data/vim/patches/8.1.0557528
1 files changed, 528 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0557 b/data/vim/patches/8.1.0557
new file mode 100644
index 000000000..8f181c470
--- /dev/null
+++ b/data/vim/patches/8.1.0557
@@ -0,0 +1,528 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0557
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0557
+Problem: Termdebug: gdb may use X.Y for breakpoint number.
+Solution: Handle X.Y breakpoint numbers. (Yasuhiro Matsumoto, close #3641)
+Files: runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
+
+
+*** ../vim-8.1.0556/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-07-19 04:13:30.332453051 +0200
+--- runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-12-02 13:31:34.977457347 +0100
+***************
+*** 73,78 ****
+--- 73,85 ----
+ let s:break_id = 13 " breakpoint number is added to this
+ let s:stopped = 1
+
++ " Take a breakpoint number as used by GDB and turn it into an integer.
++ " The breakpoint may contain a dot: 123.4
++ func s:Breakpoint2SignNumber(nr)
++ let t = split(a:nr, '\.')
++ return t[0] * 1000 + (len(t) == 2 ? t[1] : 0)
++ endfunction
++
+ func s:Highlight(init, old, new)
+ let default = a:init ? 'default ' : ''
+ if a:new ==# 'light' && a:old !=# 'light'
+***************
+*** 138,146 ****
+ func s:StartDebug_term(dict)
+ " Open a terminal window without a job, to run the debugged program in.
+ let s:ptybuf = term_start('NONE', {
+! \ 'term_name': 'debugged program',
+! \ 'vertical': s:vertical,
+! \ })
+ if s:ptybuf == 0
+ echoerr 'Failed to open the program terminal window'
+ return
+--- 145,153 ----
+ func s:StartDebug_term(dict)
+ " Open a terminal window without a job, to run the debugged program in.
+ let s:ptybuf = term_start('NONE', {
+! \ 'term_name': 'debugged program',
+! \ 'vertical': s:vertical,
+! \ })
+ if s:ptybuf == 0
+ echoerr 'Failed to open the program terminal window'
+ return
+***************
+*** 155,164 ****
+
+ " Create a hidden terminal window to communicate with gdb
+ let s:commbuf = term_start('NONE', {
+! \ 'term_name': 'gdb communication',
+! \ 'out_cb': function('s:CommOutput'),
+! \ 'hidden': 1,
+! \ })
+ if s:commbuf == 0
+ echoerr 'Failed to open the communication terminal window'
+ exe 'bwipe! ' . s:ptybuf
+--- 162,171 ----
+
+ " Create a hidden terminal window to communicate with gdb
+ let s:commbuf = term_start('NONE', {
+! \ 'term_name': 'gdb communication',
+! \ 'out_cb': function('s:CommOutput'),
+! \ 'hidden': 1,
+! \ })
+ if s:commbuf == 0
+ echoerr 'Failed to open the communication terminal window'
+ exe 'bwipe! ' . s:ptybuf
+***************
+*** 174,182 ****
+ let cmd = [g:termdebugger, '-quiet', '-tty', pty] + gdb_args
+ call ch_log('executing "' . join(cmd) . '"')
+ let s:gdbbuf = term_start(cmd, {
+! \ 'exit_cb': function('s:EndTermDebug'),
+! \ 'term_finish': 'close',
+! \ })
+ if s:gdbbuf == 0
+ echoerr 'Failed to open the gdb terminal window'
+ exe 'bwipe! ' . s:ptybuf
+--- 181,189 ----
+ let cmd = [g:termdebugger, '-quiet', '-tty', pty] + gdb_args
+ call ch_log('executing "' . join(cmd) . '"')
+ let s:gdbbuf = term_start(cmd, {
+! \ 'exit_cb': function('s:EndTermDebug'),
+! \ 'term_finish': 'close',
+! \ })
+ if s:gdbbuf == 0
+ echoerr 'Failed to open the gdb terminal window'
+ exe 'bwipe! ' . s:ptybuf
+***************
+*** 200,217 ****
+ let response = ''
+ for lnum in range(1,200)
+ if term_getline(s:gdbbuf, lnum) =~ 'new-ui mi '
+! " response can be in the same line or the next line
+! let response = term_getline(s:gdbbuf, lnum) . term_getline(s:gdbbuf, lnum + 1)
+! if response =~ 'Undefined command'
+! echoerr 'Sorry, your gdb is too old, gdb 7.12 is required'
+! exe 'bwipe! ' . s:ptybuf
+! exe 'bwipe! ' . s:commbuf
+! return
+! endif
+! if response =~ 'New UI allocated'
+! " Success!
+! break
+! endif
+ endif
+ endfor
+ if response =~ 'New UI allocated'
+--- 207,224 ----
+ let response = ''
+ for lnum in range(1,200)
+ if term_getline(s:gdbbuf, lnum) =~ 'new-ui mi '
+! " response can be in the same line or the next line
+! let response = term_getline(s:gdbbuf, lnum) . term_getline(s:gdbbuf, lnum + 1)
+! if response =~ 'Undefined command'
+! echoerr 'Sorry, your gdb is too old, gdb 7.12 is required'
+! exe 'bwipe! ' . s:ptybuf
+! exe 'bwipe! ' . s:commbuf
+! return
+! endif
+! if response =~ 'New UI allocated'
+! " Success!
+! break
+! endif
+ endif
+ endfor
+ if response =~ 'New UI allocated'
+***************
+*** 268,276 ****
+ call ch_log('executing "' . join(cmd) . '"')
+
+ let s:gdbjob = job_start(cmd, {
+! \ 'exit_cb': function('s:EndPromptDebug'),
+! \ 'out_cb': function('s:GdbOutCallback'),
+! \ })
+ if job_status(s:gdbjob) != "run"
+ echoerr 'Failed to start gdb'
+ exe 'bwipe! ' . s:promptbuf
+--- 275,283 ----
+ call ch_log('executing "' . join(cmd) . '"')
+
+ let s:gdbjob = job_start(cmd, {
+! \ 'exit_cb': function('s:EndPromptDebug'),
+! \ 'out_cb': function('s:GdbOutCallback'),
+! \ })
+ if job_status(s:gdbjob) != "run"
+ echoerr 'Failed to start gdb'
+ exe 'bwipe! ' . s:promptbuf
+***************
+*** 295,302 ****
+ " Unix: Run the debugged program in a terminal window. Open it below the
+ " gdb window.
+ belowright let s:ptybuf = term_start('NONE', {
+! \ 'term_name': 'debugged program',
+! \ })
+ if s:ptybuf == 0
+ echoerr 'Failed to open the program terminal window'
+ call job_stop(s:gdbjob)
+--- 302,309 ----
+ " Unix: Run the debugged program in a terminal window. Open it below the
+ " gdb window.
+ belowright let s:ptybuf = term_start('NONE', {
+! \ 'term_name': 'debugged program',
+! \ })
+ if s:ptybuf == 0
+ echoerr 'Failed to open the program terminal window'
+ call job_stop(s:gdbjob)
+***************
+*** 353,359 ****
+ endif
+ endif
+
+! " Contains breakpoints that have been placed, key is the number.
+ let s:breakpoints = {}
+
+ augroup TermDebug
+--- 360,367 ----
+ endif
+ endif
+
+! " Contains breakpoints that have been placed, key is a string with the GDB
+! " breakpoint number.
+ let s:breakpoints = {}
+
+ augroup TermDebug
+***************
+*** 466,474 ****
+ if a:quotedText[i] == '\'
+ let i += 1
+ if a:quotedText[i] == 'n'
+! " drop \n
+! let i += 1
+! continue
+ endif
+ endif
+ let result .= a:quotedText[i]
+--- 474,482 ----
+ if a:quotedText[i] == '\'
+ let i += 1
+ if a:quotedText[i] == 'n'
+! " drop \n
+! let i += 1
+! continue
+ endif
+ endif
+ let result .= a:quotedText[i]
+***************
+*** 479,484 ****
+--- 487,495 ----
+
+ " Extract the "name" value from a gdb message with fullname="name".
+ func s:GetFullname(msg)
++ if a:msg !~ 'fullname'
++ return ''
++ endif
+ let name = s:DecodeMessage(substitute(a:msg, '.*fullname=', '', ''))
+ if has('win32') && name =~ ':\\\\'
+ " sometimes the name arrives double-escaped
+***************
+*** 549,565 ****
+ endif
+ if msg != ''
+ if msg =~ '^\(\*stopped\|\*running\|=thread-selected\)'
+! call s:HandleCursor(msg)
+ elseif msg =~ '^\^done,bkpt=' || msg =~ '^=breakpoint-created,'
+! call s:HandleNewBreakpoint(msg)
+ elseif msg =~ '^=breakpoint-deleted,'
+! call s:HandleBreakpointDelete(msg)
+ elseif msg =~ '^=thread-group-started'
+! call s:HandleProgramRun(msg)
+ elseif msg =~ '^\^done,value='
+! call s:HandleEvaluate(msg)
+ elseif msg =~ '^\^error,msg='
+! call s:HandleError(msg)
+ endif
+ endif
+ endfor
+--- 560,576 ----
+ endif
+ if msg != ''
+ if msg =~ '^\(\*stopped\|\*running\|=thread-selected\)'
+! call s:HandleCursor(msg)
+ elseif msg =~ '^\^done,bkpt=' || msg =~ '^=breakpoint-created,'
+! call s:HandleNewBreakpoint(msg)
+ elseif msg =~ '^=breakpoint-deleted,'
+! call s:HandleBreakpointDelete(msg)
+ elseif msg =~ '^=thread-group-started'
+! call s:HandleProgramRun(msg)
+ elseif msg =~ '^\^done,value='
+! call s:HandleEvaluate(msg)
+ elseif msg =~ '^\^error,msg='
+! call s:HandleError(msg)
+ endif
+ endif
+ endfor
+***************
+*** 650,661 ****
+ let curwinid = win_getid(winnr())
+ for winid in s:winbar_winids
+ if win_gotoid(winid)
+! aunmenu WinBar.Step
+! aunmenu WinBar.Next
+! aunmenu WinBar.Finish
+! aunmenu WinBar.Cont
+! aunmenu WinBar.Stop
+! aunmenu WinBar.Eval
+ endif
+ endfor
+ call win_gotoid(curwinid)
+--- 661,672 ----
+ let curwinid = win_getid(winnr())
+ for winid in s:winbar_winids
+ if win_gotoid(winid)
+! aunmenu WinBar.Step
+! aunmenu WinBar.Next
+! aunmenu WinBar.Finish
+! aunmenu WinBar.Cont
+! aunmenu WinBar.Stop
+! aunmenu WinBar.Eval
+ endif
+ endfor
+ call win_gotoid(curwinid)
+***************
+*** 673,679 ****
+
+ exe 'sign unplace ' . s:pc_id
+ for key in keys(s:breakpoints)
+! exe 'sign unplace ' . (s:break_id + key)
+ endfor
+ unlet s:breakpoints
+
+--- 684,690 ----
+
+ exe 'sign unplace ' . s:pc_id
+ for key in keys(s:breakpoints)
+! exe 'sign unplace ' . (s:break_id + s:Breakpoint2SignNumber(key))
+ endfor
+ unlet s:breakpoints
+
+***************
+*** 700,706 ****
+ endif
+ " Use the fname:lnum format, older gdb can't handle --source.
+ call s:SendCommand('-break-insert '
+! \ . fnameescape(expand('%:p')) . ':' . line('.'))
+ if do_continue
+ call s:SendCommand('-exec-continue')
+ endif
+--- 711,717 ----
+ endif
+ " Use the fname:lnum format, older gdb can't handle --source.
+ call s:SendCommand('-break-insert '
+! \ . fnameescape(expand('%:p')) . ':' . line('.'))
+ if do_continue
+ call s:SendCommand('-exec-continue')
+ endif
+***************
+*** 714,720 ****
+ if val['fname'] == fname && val['lnum'] == lnum
+ call s:SendCommand('-break-delete ' . key)
+ " Assume this always wors, the reply is simply "^done".
+! exe 'sign unplace ' . (s:break_id + key)
+ unlet s:breakpoints[key]
+ break
+ endif
+--- 725,731 ----
+ if val['fname'] == fname && val['lnum'] == lnum
+ call s:SendCommand('-break-delete ' . key)
+ " Assume this always wors, the reply is simply "^done".
+! exe 'sign unplace ' . (s:break_id + s:Breakpoint2SignNumber(key))
+ unlet s:breakpoints[key]
+ break
+ endif
+***************
+*** 839,852 ****
+ if lnum =~ '^[0-9]*$'
+ call s:GotoSourcewinOrCreateIt()
+ if expand('%:p') != fnamemodify(fname, ':p')
+! if &modified
+! " TODO: find existing window
+! exe 'split ' . fnameescape(fname)
+! let s:sourcewin = win_getid(winnr())
+! call s:InstallWinbar()
+! else
+! exe 'edit ' . fnameescape(fname)
+! endif
+ endif
+ exe lnum
+ exe 'sign unplace ' . s:pc_id
+--- 850,863 ----
+ if lnum =~ '^[0-9]*$'
+ call s:GotoSourcewinOrCreateIt()
+ if expand('%:p') != fnamemodify(fname, ':p')
+! if &modified
+! " TODO: find existing window
+! exe 'split ' . fnameescape(fname)
+! let s:sourcewin = win_getid(winnr())
+! call s:InstallWinbar()
+! else
+! exe 'edit ' . fnameescape(fname)
+! endif
+ endif
+ exe lnum
+ exe 'sign unplace ' . s:pc_id
+***************
+*** 865,874 ****
+ func s:CreateBreakpoint(nr)
+ if index(s:BreakpointSigns, a:nr) == -1
+ call add(s:BreakpointSigns, a:nr)
+! exe "sign define debugBreakpoint" . a:nr . " text=" . a:nr . " texthl=debugBreakpoint"
+ endif
+ endfunc
+
+ " Handle setting a breakpoint
+ " Will update the sign that shows the breakpoint
+ func s:HandleNewBreakpoint(msg)
+--- 876,889 ----
+ func s:CreateBreakpoint(nr)
+ if index(s:BreakpointSigns, a:nr) == -1
+ call add(s:BreakpointSigns, a:nr)
+! exe "sign define debugBreakpoint" . a:nr . " text=" . substitute(a:nr, '\..*', '', '') . " texthl=debugBreakpoint"
+ endif
+ endfunc
+
++ func s:SplitMsg(s)
++ return split(a:s, '{\%([a-z-]\+=[^,]\+,*\)\+}\zs')
++ endfunction
++
+ " Handle setting a breakpoint
+ " Will update the sign that shows the breakpoint
+ func s:HandleNewBreakpoint(msg)
+***************
+*** 876,925 ****
+ " a watch does not have a file name
+ return
+ endif
+
+! let nr = substitute(a:msg, '.*number="\([0-9]\)*\".*', '\1', '') + 0
+! if nr == 0
+! return
+! endif
+! call s:CreateBreakpoint(nr)
+!
+! if has_key(s:breakpoints, nr)
+! let entry = s:breakpoints[nr]
+! else
+! let entry = {}
+! let s:breakpoints[nr] = entry
+! endif
+
+! let fname = s:GetFullname(a:msg)
+! let lnum = substitute(a:msg, '.*line="\([^"]*\)".*', '\1', '')
+! let entry['fname'] = fname
+! let entry['lnum'] = lnum
+
+! if bufloaded(fname)
+! call s:PlaceSign(nr, entry)
+! endif
+ endfunc
+
+ func s:PlaceSign(nr, entry)
+! exe 'sign place ' . (s:break_id + a:nr) . ' line=' . a:entry['lnum'] . ' name=debugBreakpoint' . a:nr . ' file=' . a:entry['fname']
+ let a:entry['placed'] = 1
+ endfunc
+
+ " Handle deleting a breakpoint
+ " Will remove the sign that shows the breakpoint
+ func s:HandleBreakpointDelete(msg)
+! let nr = substitute(a:msg, '.*id="\([0-9]*\)\".*', '\1', '') + 0
+! if nr == 0
+ return
+ endif
+! if has_key(s:breakpoints, nr)
+ let entry = s:breakpoints[nr]
+ if has_key(entry, 'placed')
+! exe 'sign unplace ' . (s:break_id + nr)
+ unlet entry['placed']
+ endif
+ unlet s:breakpoints[nr]
+! endif
+ endfunc
+
+ " Handle the debugged program starting to run.
+--- 891,947 ----
+ " a watch does not have a file name
+ return
+ endif
++ for msg in s:SplitMsg(a:msg)
++ let fname = s:GetFullname(msg)
++ if empty(fname)
++ continue
++ endif
++ let nr = substitute(msg, '.*number="\([0-9.]*\)\".*', '\1', '')
++ if empty(nr)
++ return
++ endif
++ call s:CreateBreakpoint(nr)
+
+! if has_key(s:breakpoints, nr)
+! let entry = s:breakpoints[nr]
+! else
+! let entry = {}
+! let s:breakpoints[nr] = entry
+! endif
+
+! let lnum = substitute(msg, '.*line="\([^"]*\)".*', '\1', '')
+! let entry['fname'] = fname
+! let entry['lnum'] = lnum
+
+! if bufloaded(fname)
+! call s:PlaceSign(nr, entry)
+! endif
+! endfor
+ endfunc
+
+ func s:PlaceSign(nr, entry)
+! exe 'sign place ' . (s:break_id + s:Breakpoint2SignNumber(a:nr)) . ' line=' . a:entry['lnum'] . ' name=debugBreakpoint' . a:nr . ' file=' . a:entry['fname']
+ let a:entry['placed'] = 1
+ endfunc
+
+ " Handle deleting a breakpoint
+ " Will remove the sign that shows the breakpoint
+ func s:HandleBreakpointDelete(msg)
+! let key = substitute(a:msg, '.*id="\([0-9.]*\)\".*', '\1', '')
+! if empty(key)
+ return
+ endif
+! for [nr, entry] in items(s:breakpoints)
+! if stridx(nr, key) != 0
+! continue
+! endif
+ let entry = s:breakpoints[nr]
+ if has_key(entry, 'placed')
+! exe 'sign unplace ' . (s:break_id + s:Breakpoint2SignNumber(nr))
+ unlet entry['placed']
+ endif
+ unlet s:breakpoints[nr]
+! endfor
+ endfunc
+
+ " Handle the debugged program starting to run.
+*** ../vim-8.1.0556/src/version.c 2018-12-01 21:08:18.019648483 +0100
+--- src/version.c 2018-12-02 13:43:56.101322941 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 557,
+ /**/
+
+--
+FATAL ERROR! SYSTEM HALTED! - Press any key to continue doing nothing.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///