lexer/token.spice
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | // Copyright (c) 2021-2026 ChilliBits. All rights reserved. | ||
| 2 | |||
| 3 | // Imports | ||
| 4 | import "@/reader/code-loc"; | ||
| 5 | |||
| 6 | // Enums | ||
| 7 | public type TokenType enum { | ||
| 8 | INVALID = 0, | ||
| 9 | // Keyword tokens | ||
| 10 | TYPE_DOUBLE = 1, | ||
| 11 | TYPE_INT = 2, | ||
| 12 | TYPE_SHORT = 3, | ||
| 13 | TYPE_LONG = 4, | ||
| 14 | TYPE_BYTE = 5, | ||
| 15 | TYPE_CHAR = 6, | ||
| 16 | TYPE_STRING = 7, | ||
| 17 | TYPE_BOOL = 8, | ||
| 18 | TYPE_DYN = 9, | ||
| 19 | CONST = 10, | ||
| 20 | SIGNED = 11, | ||
| 21 | UNSIGNED = 12, | ||
| 22 | INLINE = 13, | ||
| 23 | PUBLIC = 14, | ||
| 24 | HEAP = 15, | ||
| 25 | COMPOSE = 16, | ||
| 26 | F = 17, | ||
| 27 | P = 18, | ||
| 28 | IF = 19, | ||
| 29 | ELSE = 20, | ||
| 30 | SWITCH = 21, | ||
| 31 | CASE = 22, | ||
| 32 | DEFAULT = 23, | ||
| 33 | ASSERT = 24, | ||
| 34 | FOR = 25, | ||
| 35 | FOREACH = 26, | ||
| 36 | DO = 27, | ||
| 37 | WHILE = 28, | ||
| 38 | IMPORT = 29, | ||
| 39 | BREAK = 30, | ||
| 40 | CONTINUE = 31, | ||
| 41 | FALLTHROUGH = 32, | ||
| 42 | RETURN = 33, | ||
| 43 | AS = 34, | ||
| 44 | STRUCT = 35, | ||
| 45 | INTERFACE = 36, | ||
| 46 | UNION = 37, | ||
| 47 | TYPE = 38, | ||
| 48 | ENUM = 39, | ||
| 49 | OPERATOR = 40, | ||
| 50 | ALIAS = 41, | ||
| 51 | UNSAFE = 42, | ||
| 52 | NIL = 43, | ||
| 53 | MAIN = 44, | ||
| 54 | EXT = 45, | ||
| 55 | CAST = 46, | ||
| 56 | TRUE = 47, | ||
| 57 | FALSE = 48, | ||
| 58 | // Operator tokens | ||
| 59 | LBRACE = 49, | ||
| 60 | RBRACE = 50, | ||
| 61 | LPAREN = 51, | ||
| 62 | RPAREN = 52, | ||
| 63 | LBRACKET = 53, | ||
| 64 | RBRACKET = 54, | ||
| 65 | LOGICAL_OR = 55, | ||
| 66 | LOGICAL_AND = 56, | ||
| 67 | BITWISE_OR = 57, | ||
| 68 | BITWISE_XOR = 58, | ||
| 69 | BITWISE_AND = 59, | ||
| 70 | PLUS_PLUS = 60, | ||
| 71 | MINUS_MINUS = 61, | ||
| 72 | PLUS_EQUAL = 62, | ||
| 73 | MINUS_EQUAL = 63, | ||
| 74 | MUL_EQUAL = 64, | ||
| 75 | DIV_EQUAL = 65, | ||
| 76 | REM_EQUAL = 66, | ||
| 77 | SHL_EQUAL = 67, | ||
| 78 | SHR_EQUAL = 68, | ||
| 79 | AND_EQUAL = 69, | ||
| 80 | OR_EQUAL = 70, | ||
| 81 | XOR_EQUAL = 71, | ||
| 82 | PLUS = 72, | ||
| 83 | MINUS = 73, | ||
| 84 | MUL = 74, | ||
| 85 | DIV = 75, | ||
| 86 | REM = 76, | ||
| 87 | NOT = 77, | ||
| 88 | BITWISE_NOT = 78, | ||
| 89 | GREATER = 79, | ||
| 90 | LESS = 80, | ||
| 91 | GREATER_EQUAL = 81, | ||
| 92 | LESS_EQUAL = 82, | ||
| 93 | SHL = 83, | ||
| 94 | SHR = 84, | ||
| 95 | EQUAL = 85, | ||
| 96 | NOT_EQUAL = 86, | ||
| 97 | ASSIGN = 87, | ||
| 98 | QUESTION_MARK = 88, | ||
| 99 | SEMICOLON = 89, | ||
| 100 | COLON = 90, | ||
| 101 | COMMA = 91, | ||
| 102 | DOT = 92, | ||
| 103 | ARROW = 93, | ||
| 104 | SCOPE_ACCESS = 94, | ||
| 105 | ELLIPSIS = 95, | ||
| 106 | FCT_ATTR_PREAMBLE = 96, | ||
| 107 | MOD_ATTR_PREAMBLE = 97, | ||
| 108 | // Regex tokens | ||
| 109 | DOUBLE_LIT = 98, | ||
| 110 | INT_LIT = 99, | ||
| 111 | SHORT_LIT = 100, | ||
| 112 | LONG_LIT = 101, | ||
| 113 | CHAR_LIT = 102, | ||
| 114 | STRING_LIT = 103, | ||
| 115 | IDENTIFIER = 104, | ||
| 116 | TYPE_IDENTIFIER = 105, | ||
| 117 | // Skipped tokens | ||
| 118 | DOC_COMMENT = 106, | ||
| 119 | BLOCK_COMMENT = 107, | ||
| 120 | LINE_COMMENT = 108, | ||
| 121 | EOF = 109 | ||
| 122 | } | ||
| 123 | |||
| 124 | 7991461 | public type Token struct { | |
| 125 | public TokenType tokenType | ||
| 126 | public String text | ||
| 127 | public CodeLoc codeLoc | ||
| 128 | 3981853 | public unsigned long startOffset = 0l // Offset of the first char of the token within the source code | |
| 129 | 3981853 | public unsigned long endOffset = 0l // Offset after the last char of the token within the source code | |
| 130 | } | ||
| 131 | |||
| 132 | − | public p Token.ctor(TokenType tokenType) { // LCOV_EXCL_LINE - only used in error case | |
| 133 | − | this.tokenType = tokenType; // LCOV_EXCL_LINE - only used in error case | |
| 134 | − | } // LCOV_EXCL_LINE - only used in error case | |
| 135 | |||
| 136 | 2663887 | public p Token.ctor(TokenType tokenType, const String& text, const CodeLoc& codeLoc) { | |
| 137 | 2663887 | this.tokenType = tokenType; | |
| 138 | 2663887 | this.text = text; | |
| 139 | 2663887 | this.codeLoc = codeLoc; | |
| 140 | 2663887 | } | |
| 141 | |||
| 142 | 1317966 | public p Token.ctor(TokenType tokenType, string text, const CodeLoc& codeLoc) { | |
| 143 | 1317966 | this.ctor(tokenType, String(text), codeLoc); | |
| 144 | 1317966 | } | |
| 145 |