From 6e015596484a3e6bfedca6e04233bf1916d010e4 Mon Sep 17 00:00:00 2001 From: Kevin <6500490+Zeturic@users.noreply.github.com> Date: Fri, 1 May 2020 12:04:13 -0400 Subject: [PATCH] preserve case of labels provided through -definelabel --- Core/Assembler.cpp | 2 +- Core/Assembler.h | 1 + Core/SymbolTable.cpp | 2 ++ Main/CommandLineInterface.cpp | 4 ++-- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Core/Assembler.cpp b/Core/Assembler.cpp index 06d94db4..783d65f0 100644 --- a/Core/Assembler.cpp +++ b/Core/Assembler.cpp @@ -160,7 +160,7 @@ bool runArmips(ArmipsArguments& settings) Global.symbolTable.addLabels(settings.labels); for (const LabelDefinition& label : settings.labels) { - symData.addLabel(label.value, label.name); + symData.addLabel(label.value, label.originalName); } if (Logger::hasError()) diff --git a/Core/Assembler.h b/Core/Assembler.h index 064f8264..9baa7c84 100644 --- a/Core/Assembler.h +++ b/Core/Assembler.h @@ -11,6 +11,7 @@ enum class ArmipsMode { FILE, MEMORY }; struct LabelDefinition { + std::wstring originalName; std::wstring name; int64_t value; }; diff --git a/Core/SymbolTable.cpp b/Core/SymbolTable.cpp index 9ea5073c..cfab5491 100644 --- a/Core/SymbolTable.cpp +++ b/Core/SymbolTable.cpp @@ -185,6 +185,8 @@ void SymbolTable::addLabels(const std::vector& labels) if (label == nullptr) continue; + label->setOriginalName(def.originalName); + if (isLocalSymbol(def.name) == false) Global.Section++; diff --git a/Main/CommandLineInterface.cpp b/Main/CommandLineInterface.cpp index c889203a..277be94c 100644 --- a/Main/CommandLineInterface.cpp +++ b/Main/CommandLineInterface.cpp @@ -94,14 +94,14 @@ static bool parseArguments(const StringList& arguments, ArmipsArguments& setting { LabelDefinition def; - def.name = arguments[argpos + 1]; + def.originalName = arguments[argpos + 1]; + def.name = def.originalName; std::transform(def.name.begin(), def.name.end(), def.name.begin(), ::towlower); int64_t value; if (!stringToInt(arguments[argpos + 2], 0, arguments[argpos + 2].size(), value)) { Logger::printError(Logger::Error, L"Invalid definelabel value '%s'\n", arguments[argpos + 2]); - printUsage(arguments[0]); return false; } def.value = value;