// java-assert.h - Header file holding assertion definitions.  -*- c++ -*-

/* Copyright (C) 1998, 1999  Free Software Foundation

   This file is part of libgcj.

This software is copyrighted work licensed under the terms of the
Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
details.  */

#ifndef __JAVA_ASSERT_H__
#define __JAVA_ASSERT_H__

// This is a libgcj implementation header.

void _Jv_Abort (const char *, const char *, int, const char *)
  __attribute__ ((__noreturn__));

#ifdef DEBUG
#define _Jv_AssertDoCall(Message) _Jv_Abort (__FUNCTION__, __FILE__, __LINE__, Message)

#define JvAssertMessage(Expr, Message) \
   do { if (! (Expr)) _Jv_AssertDoCall (Message); } while (0)
#define JvAssert(Expr) \
   do { if (! (Expr)) _Jv_AssertDoCall (# Expr); } while (0)

#define JvFail(Message) _Jv_AssertDoCall (Message)

#else /* DEBUG */

#define _Jv_AssertDoCall(Message)
#define JvAssertMessage(Expr, Message)
#define JvAssert(Expr)
#define JvFail(Message) _Jv_Abort (0, 0, 0, Message)

#endif /* not DEBUG */

#endif /* __JAVA_ASSERT_H__ */
