2
0
mirror of https://github.com/Laupetin/OpenAssetTools.git synced 2026-07-03 14:28:07 +00:00

refactor: fix additional zcg x64 warnings

This commit is contained in:
Jan
2025-04-28 11:54:51 +01:00
parent d938f91541
commit 3adbe5a275
12 changed files with 124 additions and 130 deletions
+19 -12
View File
@@ -13,12 +13,22 @@
namespace
{
bool IsStringizeParameterForwardLookup(const std::string& value, size_t pos)
constexpr auto DEFINE_DIRECTIVE = "define";
constexpr auto UNDEF_DIRECTIVE = "undef";
constexpr auto IF_DIRECTIVE = "if";
constexpr auto ELIF_DIRECTIVE = "elif";
constexpr auto IFDEF_DIRECTIVE = "ifdef";
constexpr auto IFNDEF_DIRECTIVE = "ifndef";
constexpr auto ELSE_DIRECTIVE = "else";
constexpr auto ENDIF_DIRECTIVE = "endif";
constexpr auto DEFINED_KEYWORD = "defined";
bool IsStringizeParameterForwardLookup(const std::string& value, const size_t pos)
{
return pos + 1 && (isalpha(value[pos + 1]) || value[pos + 1] == '_');
}
bool IsTokenPastingOperatorForwardLookup(const std::string& value, size_t pos)
bool IsTokenPastingOperatorForwardLookup(const std::string& value, const size_t pos)
{
return pos + 1 < value.size() && value[pos + 1] == '#';
}
@@ -31,7 +41,7 @@ DefinesStreamProxy::DefineParameterPosition::DefineParameterPosition()
{
}
DefinesStreamProxy::DefineParameterPosition::DefineParameterPosition(const unsigned index, const size_t position, const bool stringize)
DefinesStreamProxy::DefineParameterPosition::DefineParameterPosition(const unsigned index, const unsigned position, const bool stringize)
: m_parameter_index(index),
m_parameter_position(position),
m_stringize(stringize)
@@ -591,7 +601,6 @@ bool DefinesStreamProxy::FindNextMacro(const std::string& input, unsigned& input
{
const auto inputSize = input.size();
auto wordStart = 0u;
auto lastWordEnd = 0u;
auto inWord = false;
auto inString = false;
auto stringEscape = false;
@@ -763,8 +772,7 @@ namespace
}
} // namespace
void DefinesStreamProxy::ProcessTokenPastingOperators(
const ParserLine& line, const unsigned& linePos, std::vector<const Define*>& callstack, std::string& input, unsigned& inputPos)
void DefinesStreamProxy::ProcessTokenPastingOperators(const ParserLine& line, const unsigned& linePos, std::string& input)
{
std::ostringstream ss;
@@ -853,18 +861,17 @@ void DefinesStreamProxy::ExpandMacro(ParserLine& line,
unsigned& linePos,
std::ostringstream& out,
std::vector<const Define*>& callstack,
const DefinesStreamProxy::Define* macro,
const Define* macro,
const std::vector<std::string>& parameterValues)
{
std::ostringstream rawOutput;
InsertMacroParameters(rawOutput, macro, parameterValues);
std::string str = rawOutput.str();
unsigned nestedPos = 0;
ProcessNestedMacros(line, linePos, callstack, str, nestedPos);
ProcessNestedMacros(line, linePos, callstack, str);
if (macro->m_contains_token_pasting_operators)
ProcessTokenPastingOperators(line, linePos, callstack, str, nestedPos);
ProcessTokenPastingOperators(line, linePos, str);
out << str;
}
@@ -966,7 +973,7 @@ void DefinesStreamProxy::ContinueMultiLineMacro(ParserLine& line)
}
}
void DefinesStreamProxy::ProcessNestedMacros(ParserLine& line, unsigned& linePos, std::vector<const Define*>& callstack, std::string& input, unsigned& inputPos)
void DefinesStreamProxy::ProcessNestedMacros(ParserLine& line, unsigned& linePos, std::vector<const Define*>& callstack, std::string& input)
{
bool usesDefines = false;
@@ -1021,7 +1028,7 @@ void DefinesStreamProxy::ProcessMacrosSingleLine(ParserLine& line)
{
unsigned pos = 0;
std::vector<const Define*> callstack;
ProcessNestedMacros(line, pos, callstack, line.m_line, pos);
ProcessNestedMacros(line, pos, callstack, line.m_line);
}
void DefinesStreamProxy::ProcessMacrosMultiLine(ParserLine& line)
+63 -77
View File
@@ -13,42 +13,30 @@
class DefinesStreamProxy final : public AbstractDirectiveStreamProxy
{
static constexpr const char* DEFINE_DIRECTIVE = "define";
static constexpr const char* UNDEF_DIRECTIVE = "undef";
static constexpr const char* IF_DIRECTIVE = "if";
static constexpr const char* ELIF_DIRECTIVE = "elif";
static constexpr const char* IFDEF_DIRECTIVE = "ifdef";
static constexpr const char* IFNDEF_DIRECTIVE = "ifndef";
static constexpr const char* ELSE_DIRECTIVE = "else";
static constexpr const char* ENDIF_DIRECTIVE = "endif";
static constexpr const char* DEFINED_KEYWORD = "defined";
static constexpr auto MAX_DEFINE_ITERATIONS = 128u;
public:
class DefineParameterPosition
{
public:
unsigned m_parameter_index;
size_t m_parameter_position;
bool m_stringize;
DefineParameterPosition();
DefineParameterPosition(unsigned index, size_t position, bool stringize);
DefineParameterPosition(unsigned index, unsigned position, bool stringize);
unsigned m_parameter_index;
unsigned m_parameter_position;
bool m_stringize;
};
class Define
{
public:
Define();
Define(std::string name, std::string value);
void IdentifyParameters(const std::vector<std::string>& parameterNames);
std::string m_name;
std::string m_value;
std::vector<DefineParameterPosition> m_parameter_positions;
bool m_contains_token_pasting_operators;
Define();
Define(std::string name, std::string value);
void IdentifyParameters(const std::vector<std::string>& parameterNames);
private:
void IdentifyTokenPasteOperatorOnly();
};
@@ -64,14 +52,27 @@ public:
class MacroParameterState
{
public:
MacroParameterState();
ParameterState m_parameter_state;
std::ostringstream m_current_parameter;
std::vector<std::string> m_parameters;
std::stack<char> m_bracket_depth;
MacroParameterState();
};
explicit DefinesStreamProxy(IParserLineStream* stream, bool skipDirectiveLines = false);
void AddDefine(Define define);
void Undefine(const std::string& name);
[[nodiscard]] std::unique_ptr<ISimpleExpression> ParseExpression(std::shared_ptr<std::string> fileName, int lineNumber, std::string expressionString);
ParserLine NextLine() override;
bool IncludeFile(const std::string& filename) override;
void PopCurrentFile() override;
[[nodiscard]] bool IsOpen() const override;
[[nodiscard]] bool Eof() const override;
private:
enum class BlockMode : uint8_t
@@ -81,6 +82,45 @@ private:
BLOCK_BLOCKED
};
static int GetLineEndEscapePos(const ParserLine& line);
void MatchDefineParameters(const ParserLine& line, size_t& currentPos);
void ContinueDefine(const ParserLine& line, size_t currentPos);
void ContinueParameters(const ParserLine& line, size_t& currentPos);
[[nodiscard]] bool MatchDefineDirective(const ParserLine& line, size_t directiveStartPosition, size_t directiveEndPosition);
[[nodiscard]] bool MatchUndefDirective(const ParserLine& line, size_t directiveStartPosition, size_t directiveEndPosition);
[[nodiscard]] bool MatchIfDirective(const ParserLine& line, size_t directiveStartPosition, size_t directiveEndPosition);
[[nodiscard]] bool MatchElIfDirective(const ParserLine& line, size_t directiveStartPosition, size_t directiveEndPosition);
[[nodiscard]] bool MatchIfdefDirective(const ParserLine& line, size_t directiveStartPosition, size_t directiveEndPosition);
[[nodiscard]] bool MatchElseDirective(const ParserLine& line, size_t directiveStartPosition, size_t directiveEndPosition);
[[nodiscard]] bool MatchEndifDirective(const ParserLine& line, size_t directiveStartPosition, size_t directiveEndPosition);
[[nodiscard]] bool MatchDirectives(const ParserLine& line);
static void ExtractParametersFromMacroUsage(
const ParserLine& line, const unsigned& linePos, MacroParameterState& state, const std::string& input, unsigned& inputPos);
bool FindMacroForIdentifier(const std::string& input, unsigned identifierStart, unsigned identifierEnd, const Define*& value) const;
static bool MatchDefinedExpression(const ParserLine& line, size_t& pos, std::string& definitionName);
void ExpandDefinedExpressions(ParserLine& line) const;
bool FindNextMacro(const std::string& input, unsigned& inputPos, unsigned& defineStart, const DefinesStreamProxy::Define*& define) const;
static void ProcessTokenPastingOperators(const ParserLine& line, const unsigned& linePos, std::string& input);
static void InsertMacroParameters(std::ostringstream& out, const DefinesStreamProxy::Define* macro, const std::vector<std::string>& parameterValues);
void ExpandMacro(ParserLine& line,
unsigned& linePos,
std::ostringstream& out,
std::vector<const Define*>& callstack,
const DefinesStreamProxy::Define* macro,
const std::vector<std::string>& parameterValues);
static void
ContinueMacroParameters(const ParserLine& line, const unsigned& linePos, MacroParameterState& state, const std::string& input, unsigned& inputPos);
void ContinueMultiLineMacro(ParserLine& line);
void ProcessNestedMacros(ParserLine& line, unsigned& linePos, std::vector<const Define*>& callstack, std::string& input);
void ProcessMacrosSingleLine(ParserLine& line);
void ProcessMacrosMultiLine(ParserLine& line);
IParserLineStream* const m_stream;
const bool m_skip_directive_lines;
std::map<std::string, Define> m_defines;
@@ -95,58 +135,4 @@ private:
const Define* m_current_macro;
MacroParameterState m_multi_line_macro_parameters;
static int GetLineEndEscapePos(const ParserLine& line);
void MatchDefineParameters(const ParserLine& line, size_t& currentPos);
void ContinueDefine(const ParserLine& line, size_t currentPos);
void ContinueParameters(const ParserLine& line, size_t& currentPos);
_NODISCARD bool MatchDefineDirective(const ParserLine& line, size_t directiveStartPosition, size_t directiveEndPosition);
_NODISCARD bool MatchUndefDirective(const ParserLine& line, size_t directiveStartPosition, size_t directiveEndPosition);
_NODISCARD bool MatchIfDirective(const ParserLine& line, size_t directiveStartPosition, size_t directiveEndPosition);
_NODISCARD bool MatchElIfDirective(const ParserLine& line, size_t directiveStartPosition, size_t directiveEndPosition);
_NODISCARD bool MatchIfdefDirective(const ParserLine& line, size_t directiveStartPosition, size_t directiveEndPosition);
_NODISCARD bool MatchElseDirective(const ParserLine& line, size_t directiveStartPosition, size_t directiveEndPosition);
_NODISCARD bool MatchEndifDirective(const ParserLine& line, size_t directiveStartPosition, size_t directiveEndPosition);
_NODISCARD bool MatchDirectives(const ParserLine& line);
static void ExtractParametersFromMacroUsage(
const ParserLine& line, const unsigned& linePos, MacroParameterState& state, const std::string& input, unsigned& inputPos);
bool FindMacroForIdentifier(const std::string& input, unsigned identifierStart, unsigned identifierEnd, const Define*& value) const;
static bool MatchDefinedExpression(const ParserLine& line, size_t& pos, std::string& definitionName);
void ExpandDefinedExpressions(ParserLine& line) const;
bool FindNextMacro(const std::string& input, unsigned& inputPos, unsigned& defineStart, const DefinesStreamProxy::Define*& define) const;
static void ProcessTokenPastingOperators(
const ParserLine& line, const unsigned& linePos, std::vector<const Define*>& callstack, std::string& input, unsigned& inputPos);
static void InsertMacroParameters(std::ostringstream& out, const DefinesStreamProxy::Define* macro, const std::vector<std::string>& parameterValues);
void ExpandMacro(ParserLine& line,
unsigned& linePos,
std::ostringstream& out,
std::vector<const Define*>& callstack,
const DefinesStreamProxy::Define* macro,
const std::vector<std::string>& parameterValues);
static void
ContinueMacroParameters(const ParserLine& line, const unsigned& linePos, MacroParameterState& state, const std::string& input, unsigned& inputPos);
void ContinueMultiLineMacro(ParserLine& line);
void ProcessNestedMacros(ParserLine& line, unsigned& linePos, std::vector<const Define*>& callstack, std::string& input, unsigned& inputPos);
void ProcessMacrosSingleLine(ParserLine& line);
void ProcessMacrosMultiLine(ParserLine& line);
public:
explicit DefinesStreamProxy(IParserLineStream* stream, bool skipDirectiveLines = false);
void AddDefine(Define define);
void Undefine(const std::string& name);
_NODISCARD std::unique_ptr<ISimpleExpression> ParseExpression(std::shared_ptr<std::string> fileName, int lineNumber, std::string expressionString);
ParserLine NextLine() override;
bool IncludeFile(const std::string& filename) override;
void PopCurrentFile() override;
_NODISCARD bool IsOpen() const override;
_NODISCARD bool Eof() const override;
};