1 1.1 christos /* Copyright (C) 2023 Free Software Foundation, Inc. 2 1.1 christos 3 1.1 christos This file is part of GDB. 4 1.1 christos 5 1.1 christos This program is free software; you can redistribute it and/or modify 6 1.1 christos it under the terms of the GNU General Public License as published by 7 1.1 christos the Free Software Foundation; either version 3 of the License, or 8 1.1 christos (at your option) any later version. 9 1.1 christos 10 1.1 christos This program is distributed in the hope that it will be useful, 11 1.1 christos but WITHOUT ANY WARRANTY; without even the implied warranty of 12 1.1 christos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 1.1 christos GNU General Public License for more details. 14 1.1 christos 15 1.1 christos You should have received a copy of the GNU General Public License 16 1.1 christos along with this program. If not, see <http://www.gnu.org/licenses/>. */ 17 1.1 christos 18 1.1 christos #ifndef GDB_BREAK_COND_PARSE_H 19 1.1 christos #define GDB_BREAK_COND_PARSE_H 20 1.1 christos 21 1.1 christos /* Given TOK, a string possibly containing a condition, thread, inferior, 22 1.1 christos task and force-condition flag, as accepted by the 'break' command, 23 1.1 christos extract the condition string, thread, inferior, task number, and the 24 1.1 christos force_condition flag, then set *COND_STRING, *THREAD, *INFERIOR, *TASK, 25 1.1 christos and *FORCE. 26 1.1 christos 27 1.1 christos As TOK is parsed, if an unknown keyword is encountered before the 'if' 28 1.1 christos keyword then everything starting from the unknown keyword is placed into 29 1.1 christos *REST. 30 1.1 christos 31 1.1 christos Both *COND and *REST are initialized to nullptr. If no 'if' keyword is 32 1.1 christos found then *COND will be returned as nullptr. If no unknown content is 33 1.1 christos found then *REST is returned as nullptr. 34 1.1 christos 35 1.1 christos If no thread is found, *THREAD is set to -1. If no inferior is found, 36 1.1 christos *INFERIOR is set to -1. If no task is found, *TASK is set to -1. If 37 1.1 christos the -force-condition flag is not found then *FORCE is set to false. 38 1.1 christos 39 1.1 christos Due to the free-form nature that the string TOK might take (a 'thread' 40 1.1 christos keyword can appear before or after an 'if' condition) then we end up 41 1.1 christos having to check for keywords from both the start of TOK and the end of 42 1.1 christos TOK. 43 1.1 christos 44 1.1 christos If TOK is nullptr, or TOK is the empty string, then the output variables 45 1.1 christos are all given their default values. */ 46 1.1 christos 47 1.1 christos extern void create_breakpoint_parse_arg_string 48 1.1 christos (const char *tok, gdb::unique_xmalloc_ptr<char> *cond_string, 49 1.1 christos int *thread, int *inferior, int *task, 50 1.1 christos gdb::unique_xmalloc_ptr<char> *rest, bool *force); 51 1.1 christos 52 1.1 christos #endif /* GDB_BREAK_COND_PARSE_H */ 53