Home | History | Annotate | Line # | Download | only in gdb
      1 /* Copyright (C) 2023 Free Software Foundation, Inc.
      2 
      3    This file is part of GDB.
      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 3 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, see <http://www.gnu.org/licenses/>.  */
     17 
     18 #ifndef GDB_BREAK_COND_PARSE_H
     19 #define GDB_BREAK_COND_PARSE_H
     20 
     21 /* Given TOK, a string possibly containing a condition, thread, inferior,
     22    task and force-condition flag, as accepted by the 'break' command,
     23    extract the condition string, thread, inferior, task number, and the
     24    force_condition flag, then set *COND_STRING, *THREAD, *INFERIOR, *TASK,
     25    and *FORCE.
     26 
     27    As TOK is parsed, if an unknown keyword is encountered before the 'if'
     28    keyword then everything starting from the unknown keyword is placed into
     29    *REST.
     30 
     31    Both *COND and *REST are initialized to nullptr.  If no 'if' keyword is
     32    found then *COND will be returned as nullptr.  If no unknown content is
     33    found then *REST is returned as nullptr.
     34 
     35    If no thread is found, *THREAD is set to -1.  If no inferior is found,
     36    *INFERIOR is set to -1.  If no task is found, *TASK is set to -1.  If
     37    the -force-condition flag is not found then *FORCE is set to false.
     38 
     39    Due to the free-form nature that the string TOK might take (a 'thread'
     40    keyword can appear before or after an 'if' condition) then we end up
     41    having to check for keywords from both the start of TOK and the end of
     42    TOK.
     43 
     44    If TOK is nullptr, or TOK is the empty string, then the output variables
     45    are all given their default values.  */
     46 
     47 extern void create_breakpoint_parse_arg_string
     48   (const char *tok, gdb::unique_xmalloc_ptr<char> *cond_string,
     49    int *thread, int *inferior, int *task,
     50    gdb::unique_xmalloc_ptr<char> *rest, bool *force);
     51 
     52 #endif /* GDB_BREAK_COND_PARSE_H */
     53