/src/skia/src/sksl/SkSLLexer.h
Line | Count | Source |
1 | | /* |
2 | | * Copyright 2017 Google Inc. |
3 | | * |
4 | | * Use of this source code is governed by a BSD-style license that can be |
5 | | * found in the LICENSE file. |
6 | | */ |
7 | | /***************************************************************************************** |
8 | | ******************** This file was generated by sksllex. Do not edit. ******************* |
9 | | *****************************************************************************************/ |
10 | | #ifndef SKSL_Lexer |
11 | | #define SKSL_Lexer |
12 | | #include <cstdint> |
13 | | #include <string_view> |
14 | | namespace SkSL { |
15 | | |
16 | | struct Token { |
17 | | enum class Kind { |
18 | | TK_END_OF_FILE, |
19 | | TK_FLOAT_LITERAL, |
20 | | TK_INT_LITERAL, |
21 | | TK_BAD_OCTAL, |
22 | | TK_TRUE_LITERAL, |
23 | | TK_FALSE_LITERAL, |
24 | | TK_IF, |
25 | | TK_ELSE, |
26 | | TK_FOR, |
27 | | TK_WHILE, |
28 | | TK_DO, |
29 | | TK_SWITCH, |
30 | | TK_CASE, |
31 | | TK_DEFAULT, |
32 | | TK_BREAK, |
33 | | TK_CONTINUE, |
34 | | TK_DISCARD, |
35 | | TK_RETURN, |
36 | | TK_IN, |
37 | | TK_OUT, |
38 | | TK_INOUT, |
39 | | TK_UNIFORM, |
40 | | TK_CONST, |
41 | | TK_FLAT, |
42 | | TK_NOPERSPECTIVE, |
43 | | TK_INLINE, |
44 | | TK_NOINLINE, |
45 | | TK_PURE, |
46 | | TK_READONLY, |
47 | | TK_WRITEONLY, |
48 | | TK_BUFFER, |
49 | | TK_STRUCT, |
50 | | TK_LAYOUT, |
51 | | TK_HIGHP, |
52 | | TK_MEDIUMP, |
53 | | TK_LOWP, |
54 | | TK_ES3, |
55 | | TK_EXPORT, |
56 | | TK_WORKGROUP, |
57 | | TK_PIXELLOCAL, |
58 | | TK_RESERVED, |
59 | | TK_PRIVATE_IDENTIFIER, |
60 | | TK_IDENTIFIER, |
61 | | TK_DIRECTIVE, |
62 | | TK_LPAREN, |
63 | | TK_RPAREN, |
64 | | TK_LBRACE, |
65 | | TK_RBRACE, |
66 | | TK_LBRACKET, |
67 | | TK_RBRACKET, |
68 | | TK_DOT, |
69 | | TK_COMMA, |
70 | | TK_PLUSPLUS, |
71 | | TK_MINUSMINUS, |
72 | | TK_PLUS, |
73 | | TK_MINUS, |
74 | | TK_STAR, |
75 | | TK_SLASH, |
76 | | TK_PERCENT, |
77 | | TK_SHL, |
78 | | TK_SHR, |
79 | | TK_BITWISEOR, |
80 | | TK_BITWISEXOR, |
81 | | TK_BITWISEAND, |
82 | | TK_BITWISENOT, |
83 | | TK_LOGICALOR, |
84 | | TK_LOGICALXOR, |
85 | | TK_LOGICALAND, |
86 | | TK_LOGICALNOT, |
87 | | TK_QUESTION, |
88 | | TK_COLON, |
89 | | TK_EQ, |
90 | | TK_EQEQ, |
91 | | TK_NEQ, |
92 | | TK_GT, |
93 | | TK_LT, |
94 | | TK_GTEQ, |
95 | | TK_LTEQ, |
96 | | TK_PLUSEQ, |
97 | | TK_MINUSEQ, |
98 | | TK_STAREQ, |
99 | | TK_SLASHEQ, |
100 | | TK_PERCENTEQ, |
101 | | TK_SHLEQ, |
102 | | TK_SHREQ, |
103 | | TK_BITWISEOREQ, |
104 | | TK_BITWISEXOREQ, |
105 | | TK_BITWISEANDEQ, |
106 | | TK_SEMICOLON, |
107 | | TK_WHITESPACE, |
108 | | TK_LINE_COMMENT, |
109 | | TK_BLOCK_COMMENT, |
110 | | TK_INVALID, |
111 | | TK_NONE, |
112 | | }; |
113 | | |
114 | 3.30M | Token() {} |
115 | | Token(Kind kind, int32_t offset, int32_t length) |
116 | 1.43M | : fKind(kind), fOffset(offset), fLength(length) {} |
117 | | |
118 | | Kind fKind = Kind::TK_NONE; |
119 | | int32_t fOffset = -1; |
120 | | int32_t fLength = -1; |
121 | | }; |
122 | | |
123 | | class Lexer { |
124 | | public: |
125 | 8.48k | void start(std::string_view text) { |
126 | 8.48k | fText = text; |
127 | 8.48k | fOffset = 0; |
128 | 8.48k | } |
129 | | |
130 | | Token next(); |
131 | | |
132 | | struct Checkpoint { |
133 | | int32_t fOffset; |
134 | | }; |
135 | | |
136 | 344k | Checkpoint getCheckpoint() const { return {fOffset}; } |
137 | | |
138 | 2.78k | void rewindToCheckpoint(Checkpoint checkpoint) { fOffset = checkpoint.fOffset; } |
139 | | |
140 | | private: |
141 | | std::string_view fText; |
142 | | int32_t fOffset; |
143 | | }; |
144 | | |
145 | | } // namespace SkSL |
146 | | #endif |