version 1.1, 2000/09/09 14:12:15 |
version 1.1.1.2, 2003/08/25 16:06:00 |
|
|
/* gmp_errno -- The largest and most complex file in GMP. |
/* gmp_errno, __gmp_exception -- exception handling and reporting. |
|
|
Copyright (C) 2000 Free Software Foundation, Inc. |
Copyright 2000, 2001 Free Software Foundation, Inc. |
|
|
This file is part of the GNU MP Library. |
This file is part of the GNU MP Library. |
|
|
Line 19 along with the GNU MP Library; see the file COPYING.LI |
|
Line 19 along with the GNU MP Library; see the file COPYING.LI |
|
the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, |
the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, |
MA 02111-1307, USA. */ |
MA 02111-1307, USA. */ |
|
|
|
#include <stdlib.h> |
#include "gmp.h" |
#include "gmp.h" |
#include "gmp-impl.h" |
#include "gmp-impl.h" |
|
|
int gmp_errno = 0; |
int gmp_errno = 0; |
|
|
|
|
|
/* The deliberate divide by zero triggers an exception on most systems. On |
|
those where it doesn't, for example power and powerpc, use abort instead. |
|
|
|
Enhancement: Perhaps raise(SIGFPE) (or the same with kill()) would be |
|
better than abort. Perhaps it'd be possible to get the BSD style |
|
FPE_INTDIV_TRAP parameter in there too. */ |
|
|
|
void |
|
__gmp_exception (int error_bit) |
|
{ |
|
gmp_errno |= error_bit; |
|
__gmp_junk = 10 / __gmp_0; |
|
abort (); |
|
} |
|
|
|
|
|
/* These functions minimize the amount of code required in functions raising |
|
exceptions. Since they're "noreturn" and don't take any parameters, a |
|
test and call might even come out as a simple conditional jump. */ |
|
void |
|
__gmp_sqrt_of_negative (void) |
|
{ |
|
__gmp_exception (GMP_ERROR_SQRT_OF_NEGATIVE); |
|
} |
|
void |
|
__gmp_divide_by_zero (void) |
|
{ |
|
__gmp_exception (GMP_ERROR_DIVISION_BY_ZERO); |
|
} |