76 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Modula-2
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Modula-2
		
	
	
	
	
	
This file is return.def, from which is created return.c.
 | 
						|
It implements the builtin "return" in Bash.
 | 
						|
 | 
						|
Copyright (C) 1987-2009 Free Software Foundation, Inc.
 | 
						|
 | 
						|
This file is part of GNU Bash, the Bourne Again SHell.
 | 
						|
 | 
						|
Bash 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 3 of the License, or
 | 
						|
(at your option) any later version.
 | 
						|
 | 
						|
Bash 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 Bash.  If not, see <http://www.gnu.org/licenses/>.
 | 
						|
 | 
						|
$PRODUCES return.c
 | 
						|
 | 
						|
$BUILTIN return
 | 
						|
 | 
						|
$FUNCTION return_builtin
 | 
						|
$SHORT_DOC return [n]
 | 
						|
Return from a shell function.
 | 
						|
 | 
						|
Causes a function or sourced script to exit with the return value
 | 
						|
specified by N.  If N is omitted, the return status is that of the
 | 
						|
last command executed within the function or script.
 | 
						|
 | 
						|
Exit Status:
 | 
						|
Returns N, or failure if the shell is not executing a function or script.
 | 
						|
$END
 | 
						|
 | 
						|
#include <config.h>
 | 
						|
 | 
						|
#if defined (HAVE_UNISTD_H)
 | 
						|
#  ifdef _MINIX
 | 
						|
#    include <sys/types.h>
 | 
						|
#  endif
 | 
						|
#  include <unistd.h>
 | 
						|
#endif
 | 
						|
 | 
						|
#include "../bashintl.h"
 | 
						|
 | 
						|
#include "../shell.h"
 | 
						|
#include "common.h"
 | 
						|
#include "bashgetopt.h"
 | 
						|
 | 
						|
extern int last_command_exit_value;
 | 
						|
extern int subshell_environment;
 | 
						|
extern int return_catch_flag, return_catch_value;
 | 
						|
 | 
						|
/* If we are executing a user-defined function then exit with the value
 | 
						|
   specified as an argument.  if no argument is given, then the last
 | 
						|
   exit status is used. */
 | 
						|
int
 | 
						|
return_builtin (list)
 | 
						|
     WORD_LIST *list;
 | 
						|
{
 | 
						|
  if (no_options (list))
 | 
						|
    return (EX_USAGE);
 | 
						|
  list = loptend;	/* skip over possible `--' */
 | 
						|
 | 
						|
  return_catch_value = get_exitstat (list);
 | 
						|
 | 
						|
  if (return_catch_flag)
 | 
						|
    longjmp (return_catch, 1);
 | 
						|
  else
 | 
						|
    {
 | 
						|
      builtin_error (_("can only `return' from a function or sourced script"));
 | 
						|
      return (EXECUTION_FAILURE);
 | 
						|
    }
 | 
						|
}
 |