blob: 5c966215fe3559f7c94aa99f573272e9242716ed [file] [log] [blame]
/**
* @file token_enum.h
* List of the different tokens used in the program.
*
* @author Ben Gardner
* @license GPL v2+
*/
#ifndef TOKEN_ENUM_H_INCLUDED
#define TOKEN_ENUM_H_INCLUDED
/**
* This is an enum of all the different chunks/tokens/elements that the
* program can work with. The parser and scanner assigns one of these to
* each chunk/token.
*
* The script 'make_token_names.sh' creates token_names.h, so be sure to run
* that after adding or removing an entry.
*/
typedef enum
{
CT_NONE,
CT_EOF,
CT_UNKNOWN,
CT_JUNK, /* junk collected when parsing is disabled */
CT_WHITESPACE, /* whitespace without any newlines */
CT_SPACE, /* a fixed number of spaces to support weird spacing rules */
CT_NEWLINE, /* CRA, one or more newlines */
CT_NL_CONT, /* CRA, backslash-newline */
CT_COMMENT_CPP, /* C++ comment (always followed by CT_NEWLINE) */
CT_COMMENT, /* C-comment, single line */
CT_COMMENT_MULTI, /* Multi-lined comment */
CT_COMMENT_EMBED, /* comment parent_type: non-newline before and after */
CT_COMMENT_START, /* comment parent_type: newline before */
CT_COMMENT_END, /* comment parent_type: newline after */
CT_COMMENT_WHOLE, /* comment parent_type: newline before and after */
CT_COMMENT_ENDIF, /* C-comment, single line, after ENDIF */
CT_IGNORED, /* a chunk of ignored text */
CT_WORD, /* variable, type, function name, etc */
CT_NUMBER,
CT_NUMBER_FP,
CT_STRING, /* quoted string "hi" or 'a' or <in> for include */
CT_STRING_MULTI, /* quoted string with embedded newline */
CT_IF, /* built-in keywords */
CT_ELSE,
CT_ELSEIF,
CT_FOR,
CT_WHILE,
CT_WHILE_OF_DO,
CT_SWITCH,
CT_CASE,
CT_DO,
CT_VOLATILE,
CT_TYPEDEF,
CT_STRUCT,
CT_ENUM,
CT_ENUM_CLASS,
CT_SIZEOF,
CT_RETURN,
CT_BREAK,
CT_UNION,
CT_GOTO,
CT_CONTINUE,
CT_C_CAST, /* C-style cast: "(int)5.6" */
CT_CPP_CAST, /* C++-style cast: "int(5.6)" */
CT_D_CAST, /* D-style cast: "cast(type)" and "const(type)" */
CT_TYPE_CAST, /* static_cast<type>(exp) */
CT_TYPENAME, /* typename type */
CT_TEMPLATE, /* template<...> */
CT_ASSIGN, /* =, +=, /=, etc */
CT_ASSIGN_NL, /* Assign followed by a newline - fake item for indenting */
CT_SASSIGN, /* 'and_eq' */
CT_COMPARE, /* ==, !=, <=, >= */
CT_SCOMPARE, /* compare op that is a string 'is', 'neq' */
CT_BOOL, /* || or && */
CT_SBOOL, /* or, and */
CT_ARITH, /* +, -, /, <<, etc */
CT_SARITH, /* 'not', 'xor' */
CT_CARET, /* ^ */
CT_DEREF, /* * dereference */
CT_INCDEC_BEFORE, /* ++a or --a */
CT_INCDEC_AFTER, /* a++ or a-- */
CT_MEMBER, /* . or -> */
CT_DC_MEMBER, /* :: */
CT_C99_MEMBER, /* . in structure stuff */
CT_INV, /* ~ */
CT_DESTRUCTOR, /* ~ */
CT_NOT, /* ! */
CT_D_TEMPLATE, /* ! as in Foo!(A) */
CT_ADDR, /* & */
CT_NEG, /* - as in -1 */
CT_POS, /* + as in +1 */
CT_STAR, /* * : raw char to be changed */
CT_PLUS, /* + : raw char to be changed */
CT_MINUS, /* - : raw char to be changed */
CT_AMP, /* & : raw char to be changed */
CT_BYREF, /* & in function def/proto params */
CT_POUND, /* # */
CT_PREPROC, /* # at the start of a line */
CT_PREPROC_INDENT, /* # at the start of a line that gets indented: #region */
CT_PREPROC_BODY, /* body of every preproc EXCEPT #define */
CT_PP, /* ## */
CT_ELLIPSIS, /* ... */
CT_RANGE, /* .. */
CT_SEMICOLON,
CT_VSEMICOLON, /* virtual semicolon for PAWN */
CT_COLON,
CT_CASE_COLON,
CT_CLASS_COLON, /* colon after a class def */
CT_CONSTR_COLON, /* colon after a constructor */
CT_D_ARRAY_COLON, /* D named array initializer colon */
CT_COND_COLON, /* conditional colon in 'b ? t : f' */
CT_QUESTION,
CT_COMMA,
CT_ASM,
CT_ATTRIBUTE,
CT_CATCH,
CT_CLASS,
CT_DELETE,
CT_EXPORT,
CT_FRIEND,
CT_NAMESPACE,
CT_PACKAGE,
CT_NEW, /* may turn into CT_PBRACED if followed by a '(' */
CT_OPERATOR,
CT_OPERATOR_VAL,
CT_PRIVATE,
CT_PRIVATE_COLON,
CT_THROW,
CT_TRY,
CT_USING,
CT_USING_STMT, /* using (xxx) ... */
CT_D_WITH, /* D: paren+braced */
CT_D_MODULE,
CT_SUPER,
CT_DELEGATE,
CT_BODY,
CT_DEBUG,
CT_DEBUGGER,
CT_INVARIANT,
CT_UNITTEST,
CT_UNSAFE,
CT_FINALLY,
CT_IMPORT,
CT_D_SCOPE,
CT_D_SCOPE_IF,
CT_LAZY,
CT_D_MACRO,
CT_D_VERSION, /* turns into CT_D_VERSION_IF if not followed by '=' */
CT_D_VERSION_IF, /* version(x) { } */
/* note for paren/brace/square pairs: close MUST be open + 1 */
CT_PAREN_OPEN,
CT_PAREN_CLOSE,
CT_ANGLE_OPEN, /* template<T*> */
CT_ANGLE_CLOSE,
CT_SPAREN_OPEN, /* 'special' paren after if/for/switch/while */
CT_SPAREN_CLOSE,
CT_FPAREN_OPEN, /* 'function' paren after fcn/macro fcn */
CT_FPAREN_CLOSE,
CT_TPAREN_OPEN, /* 'type' paren used in function types */
CT_TPAREN_CLOSE,
CT_BRACE_OPEN, /* {...} */
CT_BRACE_CLOSE,
CT_VBRACE_OPEN, /* virtual brace, i.e. brace inserted by uncrustify */
CT_VBRACE_CLOSE,
CT_SQUARE_OPEN, /* [...] */
CT_SQUARE_CLOSE,
CT_TSQUARE, /* special case of [] */
CT_MACRO_OPEN, /* stuff specified via custom-pair */
CT_MACRO_CLOSE,
CT_MACRO_ELSE,
/* aggregate types */
CT_LABEL, /* a non-case label */
CT_LABEL_COLON, /* the colon for a label */
CT_FUNCTION, /* function - unspecified, call mark_function() */
CT_FUNC_CALL, /* function call */
CT_FUNC_CALL_USER, /* function call (special user) */
CT_FUNC_DEF, /* function definition/implementation */
CT_FUNC_TYPE, /* function type - foo in "typedef void (*foo)(void)" */
CT_FUNC_VAR, /* foo and parent type of first parens in "void (*foo)(void)" */
CT_FUNC_PROTO, /* function prototype */
CT_FUNC_CLASS_DEF, /* ctor or dtor for a class */
CT_FUNC_CLASS_PROTO, /* ctor or dtor for a class */
CT_FUNC_CTOR_VAR, /* variable or class initialization */
CT_FUNC_WRAP, /* macro that wraps the function name */
CT_PROTO_WRAP, /* macro: "RETVAL PROTO_WRAP( fcn_name, (PARAMS))" */
CT_MACRO_FUNC, /* function-like macro */
CT_MACRO, /* a macro def */
CT_QUALIFIER, /* static, const, etc */
CT_EXTERN, /* extern */
CT_ALIGN, /* paren'd qualifier: align(4) struct a { } */
CT_TYPE,
CT_PTR_TYPE, /* a '*' as part of a type */
CT_TYPE_WRAP, /* macro that wraps a type name */
CT_CPP_LAMBDA, /* parent for '[=](...){...}' */
CT_CPP_LAMBDA_RET, /* '->' in '[=](...) -> type {...}' */
CT_BIT_COLON, /* a ':' in a variable declaration */
CT_OC_DYNAMIC,
CT_OC_END, /* ObjC: @end */
CT_OC_IMPL, /* ObjC: @implementation */
CT_OC_INTF, /* ObjC: @interface */
CT_OC_PROTOCOL, /* ObjC: @protocol or @protocol() */
CT_OC_PROTO_LIST, /* ObjC: protocol list < > (parent token only) */
CT_OC_PROPERTY, /* ObjC: @property */
CT_OC_CLASS, /* ObjC: the name after @interface or @implementation */
CT_OC_CLASS_EXT, /* ObjC: a pair of empty parens after the class name in a @interface or @implementation */
CT_OC_CATEGORY, /* ObjC: the category name in parens after the class name in a @interface or @implementation */
CT_OC_SCOPE, /* ObjC: the '-' or '+' in '-(void) func: (int) i;' */
CT_OC_MSG, /* ObjC: parent type to '[', ']' and ';' in '[class func : param name: param];' */
CT_OC_MSG_CLASS, /* ObjC: 'class' in '[class func : param name: param];' (see also PCF_IN_OC_MSG) */
CT_OC_MSG_FUNC, /* ObjC: 'func' in '[class func : param name: param];' (see also PCF_IN_OC_MSG) */
CT_OC_MSG_NAME, /* ObjC: 'name' in '[class func : param name: param];' (see also PCF_IN_OC_MSG) */
CT_OC_MSG_SPEC, /* ObjC: msg spec '-(void) func: (int) i;' */
CT_OC_MSG_DECL, /* ObjC: msg decl '-(void) func: (int) i { }' */
CT_OC_RTYPE, /* ObjC: marks parens of the return type after scope */
CT_OC_ATYPE, /* ObjC: marks parens of the arg type after scope */
CT_OC_COLON, /* ObjC: the colon in a msg spec */
CT_OC_DICT_COLON, /* ObjC: colon in dictionary constant: "KEY: VALUE" */
CT_OC_SEL, /* ObjC: @selector */
CT_OC_SEL_NAME, /* ObjC: selector name */
CT_OC_BLOCK, /* ObjC: block parent type. */
CT_OC_BLOCK_ARG, /* ObjC: block arguments parent type. */
CT_OC_BLOCK_TYPE, /* ObjC: block declaration parent type, e.g. mainly the '(^block_t)' in 'void (^block_t)(int arg);' */
CT_OC_BLOCK_EXPR, /* ObjC: block expression with arg: '^(int arg) { arg++; };' and without (called a block literal): '^{ ... };' */
CT_OC_BLOCK_CARET, /* ObjC: block pointer caret: '^' */
CT_OC_AT, /* ObjC: boxed constants using '@' */
/* start PP types */
CT_PP_DEFINE, /* #define */
CT_PP_DEFINED, /* #if defined */
CT_PP_INCLUDE, /* #include */
CT_PP_IF, /* #if, #ifdef, or #ifndef */
CT_PP_ELSE, /* #else or #elif */
CT_PP_ENDIF, /* #endif */
CT_PP_ASSERT,
CT_PP_EMIT,
CT_PP_ENDINPUT,
CT_PP_ERROR,
CT_PP_FILE,
CT_PP_LINE,
CT_PP_SECTION,
CT_PP_UNDEF,
CT_PP_PROPERTY,
CT_PP_BODYCHUNK, /* everything after this gets put in CT_PREPROC_BODY */
CT_PP_PRAGMA, /* pragma's should not be altered */
CT_PP_REGION, /* C# #region */
CT_PP_ENDREGION, /* C# #endregion */
CT_PP_REGION_INDENT, /* Dummy token for indenting a C# #region */
CT_PP_IF_INDENT, /* Dummy token for indenting a #if stuff */
CT_PP_OTHER, /* #line, #error, #pragma, etc */
/* end PP types */
/* PAWN stuff */
CT_CHAR,
CT_DEFINED,
CT_FORWARD,
CT_NATIVE,
CT_STATE,
CT_STOCK,
CT_TAGOF,
CT_DOT,
CT_TAG,
CT_TAG_COLON,
/* C-sharp crap */
CT_LOCK, /* lock/unlock */
CT_AS,
CT_IN, /* "foreach (T c in x)" or "foo(in char c)" or "in { ..." */
CT_BRACED, /* simple braced items: try {} */
CT_THIS, /* may turn into CT_PBRACED if followed by a '(' */
CT_BASE, /* C# thingy */
CT_DEFAULT, /* may be changed into CT_CASE */
CT_GETSET, /* must be followed by CT_BRACE_OPEN or reverts to CT_WORD */
CT_GETSET_EMPTY, /* get/set/add/remove followed by a semicolon */
CT_CONCAT, /* The '~' between strings */
CT_CS_SQ_STMT, /* '[assembly: xxx]' or '[Attribute()]' or '[Help()]', etc */
CT_CS_SQ_COLON, /* the colon in one of those [] thingys */
CT_CS_PROPERTY, /* word or ']' followed by '{' */
/* Embedded SQL - always terminated with a semicolon */
CT_SQL_EXEC, /* the 'EXEC' in 'EXEC SQL ...' */
CT_SQL_BEGIN, /* the 'EXEC' in 'EXEC SQL BEGIN ...' */
CT_SQL_END, /* the 'EXEC' in 'EXEC SQL END ...' */
CT_SQL_WORD, /* CT_WORDs in the 'EXEC SQL' statement */
/* Vala stuff */
CT_CONSTRUCT, /* braced "construct { }" or qualifier "(construct int x)" */
CT_LAMBDA,
/* Java */
CT_ASSERT, /* assert EXP1 [ : EXP2 ] ; */
CT_ANNOTATION, /* @interface or @something(...) */
CT_FOR_COLON, /* colon in "for ( TYPE var: EXPR ) { ... }" */
CT_DOUBLE_BRACE, /* parent for double brace */
} c_token_t;
#endif /* TOKEN_ENUM_H_INCLUDED */