1  /* m2assert.h header file for m2assert.cc and assertion macros.
       2  
       3  Copyright (C) 2012-2023 Free Software Foundation, Inc.
       4  Contributed by Gaius Mulley <gaius@glam.ac.uk>.
       5  
       6  This file is part of GNU Modula-2.
       7  
       8  GNU Modula-2 is free software; you can redistribute it and/or modify
       9  it under the terms of the GNU General Public License as published by
      10  the Free Software Foundation; either version 3, or (at your option)
      11  any later version.
      12  
      13  GNU Modula-2 is distributed in the hope that it will be useful, but
      14  WITHOUT ANY WARRANTY; without even the implied warranty of
      15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      16  General Public License for more details.
      17  
      18  You should have received a copy of the GNU General Public License
      19  along with GNU Modula-2; see the file COPYING3.  If not see
      20  <http://www.gnu.org/licenses/>.  */
      21  
      22  #if !defined(m2assert_h)
      23  #define m2assert_h
      24  #if defined(m2assert_c)
      25  #define EXTERN
      26  #else /* !m2assert_c.  */
      27  #define EXTERN extern
      28  #endif /* !m2assert_c.  */
      29  
      30  #if !defined(ASSERT)
      31  #define ASSERT(X, Y)                                                          \
      32    {                                                                           \
      33      if (!(X))                                                                 \
      34        {                                                                       \
      35          debug_tree (Y);                                                       \
      36          internal_error ("%s:%d:condition %s failed", __FILE__, __LINE__,      \
      37                          #X);                                                  \
      38        }                                                                       \
      39    }
      40  #endif
      41  
      42  #if !defined(ASSERT_BOOL)
      43  #define ASSERT_BOOL(X)                                                        \
      44    {                                                                           \
      45      if ((X != 0) && (X != 1))                                                 \
      46        {                                                                       \
      47          internal_error (                                                      \
      48              "%s:%d:the value %s is not a BOOLEAN as the value is %d",         \
      49              __FILE__, __LINE__, #X, X);                                       \
      50        }                                                                       \
      51    }
      52  #endif
      53  
      54  #if !defined(ASSERT_CONDITION)
      55  #define ASSERT_CONDITION(X)                                                   \
      56    {                                                                           \
      57      if (!(X))                                                                 \
      58        {                                                                       \
      59          internal_error ("%s:%d:condition %s failed", __FILE__, __LINE__,      \
      60                          #X);                                                  \
      61        }                                                                       \
      62    }
      63  #endif
      64  
      65  EXTERN void m2assert_AssertLocation (location_t location);
      66  
      67  #undef EXTERN
      68  #endif  /* m2assert_h.  */