/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file LICENSE.rst or https://cmake.org/licensing for details. */ #pragma once #include "cmConfigure.h" // IWYU pragma: keep #include #include #include class cmExprParserHelper { public: struct ParserType { std::int64_t Number; }; cmExprParserHelper(); ~cmExprParserHelper(); int ParseString(char const* str, int verb); int LexInput(char* buf, int maxlen); void Error(char const* str); void Warning(std::string str); void SetResult(std::int64_t value); std::int64_t GetResult() const { return this->Result; } char const* GetError() { return this->ErrorString.c_str(); } void UnexpectedChar(char c); std::string const& GetWarning() const { return this->WarningString; } std::int64_t ShL(std::int64_t l, std::int64_t r); std::int64_t ShR(std::int64_t l, std::int64_t r); std::int64_t Add(std::int64_t l, std::int64_t r); std::int64_t Sub(std::int64_t l, std::int64_t r); std::int64_t Mul(std::int64_t l, std::int64_t r); std::int64_t Div(std::int64_t l, std::int64_t r); std::int64_t Mod(std::int64_t l, std::int64_t r); std::int64_t Neg(std::int64_t x); static bool AddOverflow(long l, long r, long* p); static bool AddOverflow(long long l, long long r, long long* p); static bool SubOverflow(long l, long r, long* p); static bool SubOverflow(long long l, long long r, long long* p); static bool MulOverflow(long l, long r, long* p); static bool MulOverflow(long long l, long long r, long long* p); private: std::string::size_type InputBufferPos; std::string InputBuffer; std::vector OutputBuffer; int CurrentLine; int Verbose; void Print(char const* place, char const* str); void SetError(std::string errorString); std::int64_t Result; char const* FileName; long FileLine; std::string ErrorString; std::string WarningString; }; #define YYSTYPE cmExprParserHelper::ParserType #define YYSTYPE_IS_DECLARED #define YY_EXTRA_TYPE cmExprParserHelper* #define YY_DECL int cmExpr_yylex(YYSTYPE* yylvalp, yyscan_t yyscanner)