struct event_location * string_to_event_location (char **stringp, const struct language_defn *language) { struct event_location *location; const char *arg, *orig; /* Try an explicit location. */ orig = arg = *stringp; location = string_to_explicit_location (&arg, language, 0); if (location != NULL) { /* It was a valid explicit location. Advance STRINGP to the end of input. */ *stringp += arg - orig; } else { /* Everything else is a "basic" linespec, address, or probe location. */ location = string_to_event_location_basic (stringp, language); } return location; }
event_location_up string_to_event_location (const char **stringp, const struct language_defn *language, symbol_name_match_type match_type) { const char *arg, *orig; /* Try an explicit location. */ orig = arg = *stringp; event_location_up location = string_to_explicit_location (&arg, language, NULL); if (location != NULL) { /* It was a valid explicit location. Advance STRINGP to the end of input. */ *stringp += arg - orig; /* If the user really specified a location, then we're done. */ if (!event_location_empty_p (location.get ())) return location; /* Otherwise, the user _only_ specified optional flags like "-qualified", otherwise string_to_explicit_location would have thrown an error. Save the flags for "basic" linespec parsing below and discard the explicit location. */ match_type = EL_EXPLICIT (location)->func_name_match_type; } /* Everything else is a "basic" linespec, address, or probe location. */ return string_to_event_location_basic (stringp, language, match_type); }