1 /* This file is part of the program GDB. 2 3 Copyright (C) 1997, Free Software Foundation, Inc. 4 5 This program is free software; you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published by 7 the Free Software Foundation; either version 2 of the License, or 8 (at your option) any later version. 9 10 This program is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program; if not, write to the Free Software 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 19 */ 20 21 22 #ifndef _SIM_ASSERT_H_ 23 #define _SIM_ASSERT_H_ 24 25 #define SIM_FILTER_PATH(FILE, PATH) \ 26 do \ 27 { \ 28 /* strip leading path */ \ 29 const char *p = (PATH); \ 30 (FILE) = p; \ 31 while (*p != '\0' && *p != ':') \ 32 { \ 33 if (*p == '/') \ 34 (FILE) = p + 1; \ 35 p++; \ 36 } \ 37 } \ 38 while (0) 39 40 /* The subtle difference between SIM_ASSERT and ASSERT is that 41 SIM_ASSERT passes `sd' to sim_io_error for the SIM_DESC, 42 ASSERT passes NULL. */ 43 44 #if !defined (SIM_ASSERT) 45 #if defined (WITH_ASSERT) 46 #define SIM_ASSERT(EXPRESSION) \ 47 do \ 48 { \ 49 if (WITH_ASSERT) \ 50 { \ 51 if (!(EXPRESSION)) \ 52 { \ 53 /* report the failure */ \ 54 const char *file; \ 55 SIM_FILTER_PATH(file, __FILE__); \ 56 sim_io_error (sd, "%s:%d: assertion failed - %s", \ 57 file, __LINE__, #EXPRESSION); \ 58 } \ 59 } \ 60 } \ 61 while (0) 62 #else 63 #define SIM_ASSERT(EXPRESSION) do { /*nothing*/; } while (0) 64 #endif 65 #endif 66 67 #if !defined (ASSERT) 68 #if defined (WITH_ASSERT) 69 #define ASSERT(EXPRESSION) \ 70 do \ 71 { \ 72 if (WITH_ASSERT) \ 73 { \ 74 if (!(EXPRESSION)) \ 75 { \ 76 /* report the failure */ \ 77 const char *file; \ 78 SIM_FILTER_PATH(file, __FILE__); \ 79 sim_io_error (NULL, "%s:%d: assertion failed - %s", \ 80 file, __LINE__, #EXPRESSION); \ 81 } \ 82 } \ 83 } \ 84 while (0) 85 #else 86 #define ASSERT(EXPRESSION) do { /*nothing*/; } while (0) 87 #endif 88 #endif 89 90 #endif 91