File: quit.sh

package info (click to toggle)
zshdb 0.05%2Bgit20101031-2
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 2,104 kB
  • sloc: sh: 5,563; makefile: 337
file content (73 lines) | stat: -rw-r--r-- 2,450 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# -*- shell-script -*-
# quit.sh - gdb-like "quit" debugger command
#
#   Copyright (C) 2008 Rocky Bernstein rocky@gnu.org
#
#   zshdb is free software; you can redistribute it and/or modify it under
#   the terms of the GNU General Public License as published by the Free
#   Software Foundation; either version 2, or (at your option) any later
#   version.
#
#   zshdb is distributed in the hope that it will be useful, but WITHOUT ANY
#   WARRANTY; without even the implied warranty of MERCHANTABILITY or
#   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
#   for more details.
#   
#   You should have received a copy of the GNU General Public License along
#   with zshdb; see the file COPYING.  If not, write to the Free Software
#   Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA.

_Dbg_help_add quit \
'quit [EXIT-CODE [SHELL-LEVELS]] -- Quit the debugger.

The program being debugged is aborted.  If EXIT-CODE is given that
will be the exit return code. If SHELL-LEVELS then up to that many
nested shells are quit. However to be effective, the last of those
shells should have been run under the debugger.

See also "finish", "return" and "restart".'

function _Dbg_do_quit {
    typeset -i return_code=${1:-$_Dbg_program_exit_code}

    typeset -i desired_quit_levels=${2:-0}

    if [[ $desired_quit_levels != [0-9]* ]] ; then
	_Dbg_errmsg "Argument ($desired_quit_levels) should be a number or nothing."
	return 0
    fi

    if (( desired_quit_levels == 0 \
	|| desired_quit_levels > ZSH_SUBSHELL+1)) ; then
	((desired_quit_levels=ZSH_SUBSHELL+1))
    fi

    ((_Dbg_QUIT_LEVELS+=desired_quit_levels))

    # Reduce the number of recorded levels that we need to leave by
    # if _Dbg_QUIT_LEVELS is greater than 0.
    ((_Dbg_QUIT_LEVELS--))

    ## write this to the next level up can read it.
    _Dbg_write_journal "_Dbg_QUIT_LEVELS=$_Dbg_QUIT_LEVELS"
    _Dbg_write_journal "_Dbg_step_ignore=$_Dbg_step_ignore"

    # Reset signal handlers to their default but only if 
    # we are not in a subshell.
    if (( ZSH_SUBSHELL == 0 )) ; then
	
	# If we were told to restart from deep down, restart instead of quit.
	if [ -n "$_Dbg_RESTART_COMMAND" ] ; then 
	    _Dbg_erase_journals
	    _Dbg_save_state
	    exec $_Dbg_RESTART_COMMAND
	fi
	_Dbg_cleanup

    fi

    # And just when you thought we'd never get around to it...
    exit $return_code
}
_Dbg_alias_add q quit
_Dbg_alias_add exit quit