You could add the two lines marked with <<<<< below, in tags.e.
Then make your own push_tag function that does an automatic retry as a workaround.
If you see the spurious error dialog again, look for the slick debug window and grab the dump data.
int tag_failed_no_filename;
_command debug_push_tag(...)
{
tag_failed_no_filename = false;
push_tag(...);
if (tag_failed_no_filename)
{
push_tag(...); // try again
}
}
int tag_select_symbol_match(VS_TAG_BROWSE_INFO &cm,
bool addMatches=false,
VSCodeHelpFlags codehelpFlags=VSCODEHELPFLAG_NULL)
{
// display dialog to select the appropriate tag match
match_id := tag_select_match(codehelpFlags);
if (match_id == COMMAND_CANCELLED_RC) {
return COMMAND_CANCELLED_RC;
}
if (match_id == BT_RECORD_NOT_FOUND_RC) {
return BT_RECORD_NOT_FOUND_RC;
}
// check for other error
if (match_id < 0) {
_message_box(get_message(match_id,""));
return match_id;
}
// populate a tag info struct with the selected match
tag_get_match_info(match_id, cm);
if (cm.file_name == null || cm.file_name == "") {
// error
tag_browse_info_dump(cm, "no filename " :+ match_id :+ ' ' :+ codehelpFlags ); // <<<<<<<<<<<<<<<<<<<<<
tag_failed_no_filename := true; // <<<<<<<<<<<<<<<<<<<<<<<<<<
_message_box(nls("Can not jump to symbol '%s': No file name!",cm.member_name));
return BT_RECORD_NOT_FOUND_RC;
}
// record the matches the user chose from
int i,n = tag_get_num_of_matches();
if (addMatches) {
push_tag_add_match(cm);
for (i=1; i<=n; ++i) {
if (i==match_id) continue;
tag_get_match_info(i, auto im);
push_tag_add_match(im);
}
}
// that's all folks
return 0;
}