cmCommandArgumentParserHelper.h 2.81 KB
Newer Older
1 2
/* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
   file Copyright.txt or https://cmake.org/licensing for details.  */
3
#ifndef cmCommandArgumentParserHelper_h
4 5
#define cmCommandArgumentParserHelper_h

6
#include <cmConfigure.h> // IWYU pragma: keep
7

8 9
#include <string>
#include <vector>
10 11 12 13

#define YYSTYPE cmCommandArgumentParserHelper::ParserType
#define YYSTYPE_IS_DECLARED
#define YY_EXTRA_TYPE cmCommandArgumentParserHelper*
14 15
#define YY_DECL                                                               \
  int cmCommandArgument_yylex(YYSTYPE* yylvalp, yyscan_t yyscanner)
16 17 18 19 20 21 22 23 24 25 26 27

/** \class cmCommandArgumentParserHelper
 * \brief Helper class for parsing java source files
 *
 * Finds dependencies for java file and list of outputs
 */

class cmMakefile;

class cmCommandArgumentParserHelper
{
public:
28 29
  typedef struct
  {
30 31 32 33 34 35 36 37 38
    char* str;
  } ParserType;

  cmCommandArgumentParserHelper();
  ~cmCommandArgumentParserHelper();

  int ParseString(const char* str, int verb);

  // For the lexer:
39
  void AllocateParserType(cmCommandArgumentParserHelper::ParserType* pt,
40
                          const char* str, int len = 0);
41
  bool HandleEscapeSymbol(cmCommandArgumentParserHelper::ParserType* pt,
42
                          char symbol);
43 44 45 46 47

  int LexInput(char* buf, int maxlen);
  void Error(const char* str);

  // For yacc
Andy Cedilnik's avatar
Andy Cedilnik committed
48
  char* CombineUnions(char* in1, char* in2);
49 50

  char* ExpandSpecialVariable(const char* key, const char* var);
51
  char* ExpandVariable(const char* var);
52
  char* ExpandVariableForAt(const char* var);
53 54 55 56
  void SetResult(const char* value);

  void SetMakefile(const cmMakefile* mf);

57
  std::string& GetResult() { return this->Result; }
58 59

  void SetLineFile(long line, const char* file);
60 61
  void SetEscapeQuotes(bool b) { this->EscapeQuotes = b; }
  void SetNoEscapeMode(bool b) { this->NoEscapeMode = b; }
62
  void SetReplaceAtSyntax(bool b) { this->ReplaceAtSyntax = b; }
63
  void SetRemoveEmpty(bool b) { this->RemoveEmpty = b; }
64 65

  const char* GetError() { return this->ErrorString.c_str(); }
66 67 68 69 70 71 72
  char EmptyVariable[1];
  char DCURLYVariable[3];
  char RCURLYVariable[3];
  char ATVariable[3];
  char DOLLARVariable[3];
  char LCURLYVariable[3];
  char BSLASHVariable[3];
73

74
private:
75 76
  std::string::size_type InputBufferPos;
  std::string InputBuffer;
77 78 79 80 81
  std::vector<char> OutputBuffer;

  void Print(const char* place, const char* str);
  void SafePrintMissing(const char* str, int line, int cnt);

82
  char* AddString(const std::string& str);
83 84

  void CleanupParser();
85
  void SetError(std::string const& msg);
86

87 88 89
  std::vector<char*> Variables;
  const cmMakefile* Makefile;
  std::string Result;
90
  std::string ErrorString;
91
  const char* FileName;
92 93 94
  long FileLine;
  int CurrentLine;
  int Verbose;
95
  bool WarnUninitialized;
96
  bool CheckSystemVars;
97 98
  bool EscapeQuotes;
  bool NoEscapeMode;
99
  bool ReplaceAtSyntax;
100
  bool RemoveEmpty;
101 102 103
};

#endif