/* TID parsing for GDB, the GNU debugger.
- Copyright (C) 2015-2016 Free Software Foundation, Inc.
+ Copyright (C) 2015-2022 Free Software Foundation, Inc.
This file is part of GDB.
{
const char *number = tidstr;
const char *dot, *p1;
- struct thread_info *tp;
struct inferior *inf;
int thr_num;
int explicit_inf_id = 0;
if (thr_num == 0)
invalid_thread_id_error (number);
- ALL_THREADS (tp)
- {
- if (ptid_get_pid (tp->ptid) == inf->pid
- && tp->per_inf_num == thr_num)
+ thread_info *tp = nullptr;
+ for (thread_info *it : inf->threads ())
+ if (it->per_inf_num == thr_num)
+ {
+ tp = it;
break;
- }
+ }
if (tp == NULL)
{
switch (m_state)
{
case STATE_INFERIOR:
- return *m_cur_tok == '\0';
+ /* Parsing is finished when at end of string or null string,
+ or we are not in a range and not in front of an integer, negative
+ integer, convenience var or negative convenience var. */
+ return (*m_cur_tok == '\0'
+ || !(isdigit (*m_cur_tok)
+ || *m_cur_tok == '$'
+ || *m_cur_tok == '*'));
case STATE_THREAD_RANGE:
case STATE_STAR_RANGE:
return m_range_parser.finished ();
}
- gdb_assert_not_reached (_("unhandled state"));
+ gdb_assert_not_reached ("unhandled state");
}
/* See tid-parse.h. */
return m_range_parser.cur_tok ();
}
- gdb_assert_not_reached (_("unhandled state"));
+ gdb_assert_not_reached ("unhandled state");
}
void
{
/* Setup the number range parser to return numbers in the
whole [1,INT_MAX] range. */
- m_range_parser.setup_range (1, INT_MAX, skip_spaces_const (p + 1));
+ m_range_parser.setup_range (1, INT_MAX, skip_spaces (p + 1));
m_state = STATE_STAR_RANGE;
}
else
return m_state == STATE_STAR_RANGE;
}
-/* See gdbthread.h. */
+bool
+tid_range_parser::in_thread_range () const
+{
+ return m_state == STATE_THREAD_RANGE;
+}
+
+/* See tid-parse.h. */
int
tid_is_in_list (const char *list, int default_inferior,
return 1;
tid_range_parser parser (list, default_inferior);
+ if (parser.finished ())
+ invalid_thread_id_error (parser.cur_tok ());
while (!parser.finished ())
{
int tmp_inf, tmp_thr_start, tmp_thr_end;