1 /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
2 file Copyright.txt or https://cmake.org/licensing for details. */
5 #include "cmConfigure.h" // IWYU pragma: keep
13 class cmCommandArgumentParserHelper
21 cmCommandArgumentParserHelper();
22 ~cmCommandArgumentParserHelper();
24 cmCommandArgumentParserHelper(cmCommandArgumentParserHelper const&) = delete;
25 cmCommandArgumentParserHelper& operator=(
26 cmCommandArgumentParserHelper const&) = delete;
28 int ParseString(std::string const& str, int verb);
31 void AllocateParserType(cmCommandArgumentParserHelper::ParserType* pt,
32 const char* str, int len = 0);
33 bool HandleEscapeSymbol(cmCommandArgumentParserHelper::ParserType* pt,
36 void Error(const char* str);
39 const char* CombineUnions(const char* in1, const char* in2);
41 const char* ExpandSpecialVariable(const char* key, const char* var);
42 const char* ExpandVariable(const char* var);
43 const char* ExpandVariableForAt(const char* var);
44 void SetResult(const char* value);
46 void SetMakefile(const cmMakefile* mf);
48 void UpdateInputPosition(int tokenLength);
50 std::string& GetResult() { return this->Result; }
52 void SetLineFile(long line, const char* file);
53 void SetEscapeQuotes(bool b) { this->EscapeQuotes = b; }
54 void SetNoEscapeMode(bool b) { this->NoEscapeMode = b; }
55 void SetReplaceAtSyntax(bool b) { this->ReplaceAtSyntax = b; }
56 void SetRemoveEmpty(bool b) { this->RemoveEmpty = b; }
58 const char* GetError() { return this->ErrorString.c_str(); }
61 std::string::size_type InputBufferPos{ 1 };
62 std::string::size_type LastTokenLength{};
63 std::string::size_type InputSize{};
64 std::vector<char> OutputBuffer;
66 void Print(const char* place, const char* str);
67 void SafePrintMissing(const char* str, int line, int cnt);
69 const char* AddString(const std::string& str);
72 void SetError(std::string const& msg);
74 std::vector<std::unique_ptr<char[]>> Variables;
75 const cmMakefile* Makefile;
77 std::string ErrorString;
87 #define YYSTYPE cmCommandArgumentParserHelper::ParserType
88 #define YYSTYPE_IS_DECLARED
89 #define YY_EXTRA_TYPE cmCommandArgumentParserHelper*
91 int cmCommandArgument_yylex(YYSTYPE* yylvalp, yyscan_t yyscanner)