/* Compiler implementation of the D programming language * Copyright (C) 1999-2023 by The D Language Foundation, All Rights Reserved * written by Walter Bright * https://www.digitalmars.com * Distributed under the Boost Software License, Version 1.0. * https://www.boost.org/LICENSE_1_0.txt * https://github.com/dlang/dmd/blob/master/src/dmd/tokens.h */ #pragma once #include "root/dcompat.h" #include "root/port.h" #include "globals.h" class Identifier; /* Tokens: ( ) [ ] { } < > <= >= == != === !== << >> <<= >>= >>> >>>= + - += -= * / % *= /= %= & | ^ &= |= ^= = ! ~ @ ^^ ^^= ++ -- . -> : , => ? && || */ enum class TOK : unsigned char { reserved, // Other leftParenthesis, rightParenthesis, leftBracket, rightBracket, leftCurly, rightCurly, colon, semicolon, dotDotDot, endOfFile, cast_, null_, assert_, true_, false_, throw_, new_, delete_, variable, slice, version_, module_, dollar, template_, typeof_, pragma_, typeid_, comment, // Operators lessThan, greaterThan, lessOrEqual, greaterOrEqual, equal, notEqual, identity, notIdentity, is_, leftShift, rightShift, leftShiftAssign, rightShiftAssign, unsignedRightShift, unsignedRightShiftAssign, concatenateAssign, // ~= add, min, addAssign, minAssign, mul, div, mod, mulAssign, divAssign, modAssign, and_, or_, xor_, andAssign, orAssign, xorAssign, assign, not_, tilde, plusPlus, minusMinus, dot, comma, question, andAnd, orOr, // Numeric literals int32Literal, uns32Literal, int64Literal, uns64Literal, int128Literal, uns128Literal, float32Literal, float64Literal, float80Literal, imaginary32Literal, imaginary64Literal, imaginary80Literal, // Char constants charLiteral, wcharLiteral, dcharLiteral, // Leaf operators identifier, string_, this_, super_, error, // Basic types void_, int8, uns8, int16, uns16, int32, uns32, int64, uns64, int128, uns128, float32, float64, float80, imaginary32, imaginary64, imaginary80, complex32, complex64, complex80, char_, wchar_, dchar_, bool_, // Aggregates struct_, class_, interface_, union_, enum_, import_, alias_, override_, delegate_, function_, mixin_, align_, extern_, private_, protected_, public_, export_, static_, final_, const_, abstract_, debug_, deprecated_, in_, out_, inout_, lazy_, auto_, package_, immutable_, // Statements if_, else_, while_, for_, do_, switch_, case_, default_, break_, continue_, with_, synchronized_, return_, goto_, try_, catch_, finally_, asm_, foreach_, foreach_reverse_, scope_, onScopeExit, onScopeFailure, onScopeSuccess, // Contracts invariant_, // Testing unittest_, // Added after 1.0 argumentTypes, ref_, macro_, parameters, traits, pure_, nothrow_, gshared, line, file, fileFullPath, moduleString, // __MODULE__ functionString, // __FUNCTION__ prettyFunction, // __PRETTY_FUNCTION__ shared_, at, pow, powAssign, goesTo, vector, pound, arrow, // -> colonColon, // :: wchar_tLiteral, endOfLine, // \n, \r, \u2028, \u2029 whitespace, // C only keywords inline_, register_, restrict_, signed_, sizeof_, typedef_, unsigned_, volatile_, _Alignas_, _Alignof_, _Atomic_, _Bool_, _Complex_, _Generic_, _Imaginary_, _Noreturn_, _Static_assert_, _Thread_local_, // C only extended keywords _assert, _import, cdecl_, declspec, stdcall, pragma, int128_, attribute__, MAX, }; enum class EXP : unsigned char { reserved, // Other negate, cast_, null_, assert_, true_, false_, array, call, address, type, throw_, new_, delete_, star, symbolOffset, variable, dotVariable, dotIdentifier, dotTemplateInstance, dotType, slice, arrayLength, version_, dollar, template_, dotTemplateDeclaration, declaration, typeof_, pragma_, dSymbol, typeid_, uadd, remove, newAnonymousClass, arrayLiteral, assocArrayLiteral, structLiteral, classReference, thrownException, delegatePointer, delegateFunctionPointer, // Operators lessThan, greaterThan, lessOrEqual, greaterOrEqual, equal, notEqual, identity, notIdentity, index, is_, leftShift, rightShift, leftShiftAssign, rightShiftAssign, unsignedRightShift, unsignedRightShiftAssign, concatenate, concatenateAssign, // ~= concatenateElemAssign, concatenateDcharAssign, add, min, addAssign, minAssign, mul, div, mod, mulAssign, divAssign, modAssign, and_, or_, xor_, andAssign, orAssign, xorAssign, assign, not_, tilde, plusPlus, minusMinus, construct, blit, dot, comma, question, andAnd, orOr, prePlusPlus, preMinusMinus, // Leaf operators identifier, string_, this_, super_, halt, tuple, error, // Basic types void_, int64, float64, complex80, char_, import_, delegate_, function_, mixin_, in_, default_, break_, continue_, goto_, scope_, traits, overloadSet, line, file, fileFullPath, moduleString, // __MODULE__ functionString, // __FUNCTION__ prettyFunction, // __PRETTY_FUNCTION__ shared_, pow, powAssign, vector, voidExpression, cantExpression, showCtfeContext, objcClassReference, vectorArray, arrow, // -> compoundLiteral, // ( type-name ) { initializer-list } _Generic_, interval, MAX }; #define TOKwild TOKinout // Token has an anonymous struct, which is not strict ISO C++. #if defined(__GNUC__) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wpedantic" #endif struct Token { Token *next; Loc loc; const utf8_t *ptr; // pointer to first character of this token within buffer TOK value; DString blockComment; // doc comment string prior to this token DString lineComment; // doc comment for previous token union { // Integers sinteger_t intvalue; uinteger_t unsvalue; // Floats real_t floatvalue; struct { utf8_t *ustring; // UTF8 string unsigned len; unsigned char postfix; // 'c', 'w', 'd' }; Identifier *ident; }; void free(); Token() : next(NULL) {} int isKeyword(); const char *toChars() const; static const char *toChars(TOK value); }; #if defined(__GNUC__) #pragma GCC diagnostic pop #endif