Skip to content
Permalink
Browse files
Merge pull request #11541 from Pokechu22/dsptool-no-redefine-label
DSPTool: Fix missing error when redefining labels
  • Loading branch information
AdmiralCurtiss committed Feb 10, 2023
2 parents 3c2933c + a244cb8 commit 9b5c52a
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 8 deletions.
@@ -912,7 +912,10 @@ bool DSPAssembler::AssemblePass(const std::string& text, int pass)
}
}
if (pass == 1)
m_labels.RegisterLabel(label, lval);
{
if (!m_labels.RegisterLabel(label, lval))
ShowError(AssemblerError::LabelAlreadyExists);
}
}

if (opcode == nullptr)
@@ -42,16 +42,23 @@ void LabelMap::RegisterDefaults()
}
}

void LabelMap::RegisterLabel(std::string label, u16 lval, LabelType type)
bool LabelMap::RegisterLabel(std::string label, u16 lval, LabelType type)
{
const std::optional<u16> old_value = GetLabelValue(label);
if (old_value && old_value != lval)
if (old_value)
{
WARN_LOG_FMT(AUDIO, "Redefined label {} to {:04x} - old value {:04x}\n", label, lval,
*old_value);
DeleteLabel(label);
if (old_value != lval)
{
fmt::print("Attempted to redefine label {} from {:04x} to {:04x}\n", label, lval, *old_value);
return false;
}
else
{
return true;
}
}
labels.emplace_back(std::move(label), lval, type);
return true;
}

void LabelMap::DeleteLabel(std::string_view label)
@@ -77,7 +84,7 @@ std::optional<u16> LabelMap::GetLabelValue(std::string_view name, LabelType type
}
else
{
WARN_LOG_FMT(AUDIO, "Wrong label type requested. {}\n", name);
fmt::print("Wrong label type requested. {}\n", name);
}
}
}
@@ -27,7 +27,7 @@ class LabelMap
~LabelMap();

void RegisterDefaults();
void RegisterLabel(std::string label, u16 lval, LabelType type = LABEL_VALUE);
bool RegisterLabel(std::string label, u16 lval, LabelType type = LABEL_VALUE);
void DeleteLabel(std::string_view label);
std::optional<u16> GetLabelValue(std::string_view name, LabelType type = LABEL_ANY) const;
void Clear();

0 comments on commit 9b5c52a

Please sign in to comment.