/*
* NAME: tokens.h
* DESCRIPTION: compiler tokens
*/
/* The 0x80 bit is reserved for the unparser/detokenizer */
# define TOK_EOF 0x00
# define TOK_NOP 0x00 /* used to preserve line numbers */
# define TOK_COMMENT 0x41 /* 'A' */
# define TOK_LIT_NUM 0x42 /* 'B' */
# define TOK_LIT_STR 0x43
# define TOK_LIT_OBJ 0x44
# define TOK_LIT_ERR 0x45
# define TOK_LIT_FLT 0x46 /* 'F' */
# define TOK_IDENTIFIER 0x47 /* 'G' */
# define TOK_U_MINUS 0x48 /* 'H' */
# define TOK_LPAREN '('
# define TOK_RPAREN ')'
# define TOK_LBRACKET '['
# define TOK_RBRACKET ']'
# define TOK_DOLLAR '$'
# define TOK_PERCENT '%'
# define TOK_QUESTION '?'
# define TOK_PIPE '|'
# define TOK_BANG '!'
# define TOK_MINUS '-'
# define TOK_PLUS '+'
# define TOK_LBRACE '{'
# define TOK_RBRACE '}'
# define TOK_SPLICE '@'
# define TOK_ASSOC '~'
# define TOK_COMMA ','
# define TOK_SEMICOLON ';'
# define TOK_COLON ':'
# define TOK_DOT '.' /* larger token: ".." */
# define TOK_ASSIGN '=' /* larger token: "==" */
# define TOK_TIMES '*' /* also comment delimeter */
# define TOK_DIVIDE '/' /* also comment delimeter */
# define TOK_LESS '<'
# define TOK_GREATER '>'
# define TOK_IF 0x49 /* 'I' */
# define TOK_ELSEIF 0x4a
# define TOK_ELSE 0x4b
# define TOK_ENDIF 0x4c
# define TOK_FOR 0x4d
# define TOK_IN 0x4e
# define TOK_ENDFOR 0x4f
# define TOK_WHILE 0x50
# define TOK_ENDWHILE 0x51
# define TOK_FORK 0x52
# define TOK_ENDFORK 0x53
# define TOK_RETURN 0x54 /* 'T' */
# define TOK_RANGE 0x55 /* .. */ /* 'U' */
# define TOK_EQUAL 0x56 /* == */
# define TOK_NEQUAL 0x57 /* != */
# define TOK_LSEQUAL 0x58 /* <= */
# define TOK_GREQUAL 0x59 /* >= */
# define TOK_AND 0x5a /* && */ /* 'Z' */
# define TOK_OR 0x61 /* || */ /* 'a' */
# define TOK_LIST 0x62 /* 'b' */
# define TOK_TABLE 0x63
# define TOK_AMBAGGR 0x64
# define TOK_BUFFER 0x65 /* 'e' */
# define VTOK_BUF 0x66 /* 'f' */
# define VTOK_ERR 0x67
# define VTOK_FLOAT 0x68
# define VTOK_LIST 0x69
# define VTOK_NUM 0x6a
# define VTOK_OBJ 0x6b
# define VTOK_STR 0x6c
# define VTOK_TABLE 0x6d
# define VTOK_PLAYER 0x6e
# define VTOK_THIS 0x6f
# define VTOK_CALLER 0x70
# define VTOK_ARGS 0x71
# define VTOK_ARGSTR 0x72
# define VTOK_VERB 0x73
# define VTOK_DOBJ 0x74
# define VTOK_DOBJSTR 0x75
# define VTOK_PREPSTR 0x76
# define VTOK_IOBJ 0x77
# define VTOK_IOBJSTR 0x78 /* 'x' */
# define MOO_KEYWORDS \
([ "if" : TOK_IF, \
"elseif" : TOK_ELSEIF, \
"else" : TOK_ELSE, \
"endif" : TOK_ENDIF, \
"for" : TOK_FOR, \
"in" : TOK_IN, \
"endfor" : TOK_ENDFOR, \
"while" : TOK_WHILE, \
"endwhile" : TOK_ENDWHILE, \
"fork" : TOK_FORK, \
"endfork" : TOK_ENDFORK, \
"return" : TOK_RETURN, \
])
# define TOK_MASK 0x7f
# define TAG(ast) ((ast)[0] & TOK_MASK)
# define TF_SIMPLE 0x0100
# define SIMPLE(ast) ((ast)[0] & TF_SIMPLE)