Merge pull request #11541 from Pokechu22/dsptool-no-redefine-label
DSPTool: Fix missing error when redefining labels
This commit is contained in:
commit
9b5c52ad8d
|
@ -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 @@ public:
|
|||
~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();
|
||||
|
|
Loading…
Reference in New Issue