DSPTool: Fix missing error when redefining labels

The logging was broken in 958cbf38a44d4092934e51266b5aa88d224df6e6 (DSPTool doesn't use dolphin's logging system, so it just produced nothing; the same thing affected comparing before 693a29f8ceeb1166658d9c0752b6e84660077374).

AssemblerError::LabelAlreadyExists (previously ERR_LABEL_EXISTS) simply was never used.
This commit is contained in:
Pokechu22 2023-02-04 17:31:06 -08:00
parent aece99fe41
commit a244cb868b
3 changed files with 18 additions and 8 deletions

View File

@ -912,7 +912,10 @@ bool DSPAssembler::AssemblePass(const std::string& text, int pass)
} }
} }
if (pass == 1) if (pass == 1)
m_labels.RegisterLabel(label, lval); {
if (!m_labels.RegisterLabel(label, lval))
ShowError(AssemblerError::LabelAlreadyExists);
}
} }
if (opcode == nullptr) if (opcode == nullptr)

View File

@ -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); 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, if (old_value != lval)
*old_value); {
DeleteLabel(label); 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); labels.emplace_back(std::move(label), lval, type);
return true;
} }
void LabelMap::DeleteLabel(std::string_view label) void LabelMap::DeleteLabel(std::string_view label)
@ -77,7 +84,7 @@ std::optional<u16> LabelMap::GetLabelValue(std::string_view name, LabelType type
} }
else else
{ {
WARN_LOG_FMT(AUDIO, "Wrong label type requested. {}\n", name); fmt::print("Wrong label type requested. {}\n", name);
} }
} }
} }

View File

@ -27,7 +27,7 @@ public:
~LabelMap(); ~LabelMap();
void RegisterDefaults(); 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); void DeleteLabel(std::string_view label);
std::optional<u16> GetLabelValue(std::string_view name, LabelType type = LABEL_ANY) const; std::optional<u16> GetLabelValue(std::string_view name, LabelType type = LABEL_ANY) const;
void Clear(); void Clear();