// This may look like C code, but it is really -*- C++ -*-
/* 
Copyright (C) 1988 Free Software Foundation

This file is part of the GNU C++ Library.  This library is free
software; you can redistribute it and/or modify it under the terms of
the GNU Library General Public License as published by the Free
Software Foundation; either version 2 of the License, or (at your
option) any later version.  This library 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 Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free Software
Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
*/

/* Allow this file to be included multiple times
   with different settings of NDEBUG.  */
#undef assert
#undef assertval

#ifdef NDEBUG
#define assert(ignore) ((void)0)
#define assertval(ex)  (ex)
#else

#ifdef __GNUG__
#include <std.h>
#else
#include <stdio.h>
#ifndef __eprintf
#define __eprintf(s, e, l, f) (fprintf(stderr, s, e, l, f))
#endif
#endif

extern "C" volatile void   abort();

#define assert(expression)  \
  ((void) ((expression) ? 0 : __assert (#expression, __FILE__, __LINE__)))

#define assertval(expression) \
  ((int) ((expression) ? 1 : __assert (#expression, __FILE__, __LINE__)))

#define __assert(expression, file, lineno)  \
  (__eprintf ("Failed assertion `%s' at line %d of `%s'.\n",	\
	      expression, lineno, file), 0)

#endif NDEBUG
