// token.h #ifndef SLANG_TOKEN_H_INCLUDED #define SLANG_TOKEN_H_INCLUDED #include "../core/basic.h" #include "source-loc.h" namespace Slang { enum class TokenType { #define TOKEN(NAME, DESC) NAME, #include "token-defs.h" }; char const* TokenTypeToString(TokenType type); enum TokenFlag : unsigned int { AtStartOfLine = 1 << 0, AfterWhitespace = 1 << 1, SuppressMacroExpansion = 1 << 2, }; typedef unsigned int TokenFlags; class Token { public: TokenType type = TokenType::Unknown; String Content; SourceLoc Position; TokenFlags flags = 0; Token() = default; Token( TokenType type, const String & content, SourceLoc loc, TokenFlags flags = 0) : flags(flags) { type = type; Content = content; Position = loc; } }; } // namespace Slang #endif