blob: 12aa63c803951258252f85608b781fd4c6f54778 [file] [log] [blame]
Ethan Nicholas5b5f0962017-09-11 13:50:14 -07001/*
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 <cstddef>
13#include <cstdint>
Ethan Nicholas6823b502021-06-15 11:42:07 -040014#include "include/core/SkStringView.h"
Ethan Nicholas5b5f0962017-09-11 13:50:14 -070015namespace SkSL {
16
17struct Token {
Ethan Nicholas5a9e7fb2020-04-17 12:45:51 -040018 enum class Kind {
19 TK_END_OF_FILE,
20 TK_FLOAT_LITERAL,
21 TK_INT_LITERAL,
22 TK_TRUE_LITERAL,
23 TK_FALSE_LITERAL,
24 TK_IF,
25 TK_STATIC_IF,
26 TK_ELSE,
27 TK_FOR,
28 TK_WHILE,
29 TK_DO,
30 TK_SWITCH,
31 TK_STATIC_SWITCH,
32 TK_CASE,
33 TK_DEFAULT,
34 TK_BREAK,
35 TK_CONTINUE,
36 TK_DISCARD,
37 TK_RETURN,
Ethan Nicholas5a9e7fb2020-04-17 12:45:51 -040038 TK_IN,
39 TK_OUT,
40 TK_INOUT,
41 TK_UNIFORM,
42 TK_CONST,
43 TK_FLAT,
44 TK_NOPERSPECTIVE,
Ethan Nicholasf3c8f5d2020-08-20 13:09:14 +000045 TK_INLINE,
John Stiles0dd1a772021-03-09 22:14:27 -050046 TK_NOINLINE,
Ethan Nicholas5a9e7fb2020-04-17 12:45:51 -040047 TK_HASSIDEEFFECTS,
Ethan Nicholas5a9e7fb2020-04-17 12:45:51 -040048 TK_STRUCT,
49 TK_LAYOUT,
John Stilesb6a73192021-07-20 15:32:21 -040050 TK_HIGHP,
51 TK_MEDIUMP,
52 TK_LOWP,
John Stiles44899a22021-08-12 23:05:50 -040053 TK_ES3,
John Stiles7e947ab2021-10-01 17:49:09 +000054 TK_RESERVED,
Ethan Nicholas5a9e7fb2020-04-17 12:45:51 -040055 TK_IDENTIFIER,
56 TK_DIRECTIVE,
Ethan Nicholas5a9e7fb2020-04-17 12:45:51 -040057 TK_LPAREN,
58 TK_RPAREN,
59 TK_LBRACE,
60 TK_RBRACE,
61 TK_LBRACKET,
62 TK_RBRACKET,
63 TK_DOT,
64 TK_COMMA,
65 TK_PLUSPLUS,
66 TK_MINUSMINUS,
67 TK_PLUS,
68 TK_MINUS,
69 TK_STAR,
70 TK_SLASH,
71 TK_PERCENT,
72 TK_SHL,
73 TK_SHR,
74 TK_BITWISEOR,
75 TK_BITWISEXOR,
76 TK_BITWISEAND,
77 TK_BITWISENOT,
78 TK_LOGICALOR,
79 TK_LOGICALXOR,
80 TK_LOGICALAND,
81 TK_LOGICALNOT,
82 TK_QUESTION,
Ethan Nicholas5a9e7fb2020-04-17 12:45:51 -040083 TK_COLON,
84 TK_EQ,
85 TK_EQEQ,
86 TK_NEQ,
87 TK_GT,
88 TK_LT,
89 TK_GTEQ,
90 TK_LTEQ,
91 TK_PLUSEQ,
92 TK_MINUSEQ,
93 TK_STAREQ,
94 TK_SLASHEQ,
95 TK_PERCENTEQ,
96 TK_SHLEQ,
97 TK_SHREQ,
98 TK_BITWISEOREQ,
99 TK_BITWISEXOREQ,
100 TK_BITWISEANDEQ,
Ethan Nicholas5a9e7fb2020-04-17 12:45:51 -0400101 TK_SEMICOLON,
102 TK_ARROW,
103 TK_WHITESPACE,
104 TK_LINE_COMMENT,
105 TK_BLOCK_COMMENT,
106 TK_INVALID,
John Stiles7cbb09c22021-01-07 16:07:00 -0500107 TK_NONE,
Ethan Nicholas5b5f0962017-09-11 13:50:14 -0700108 };
109
Ethan Nicholas5fad2b882021-09-27 10:39:18 -0400110 Token() {}
111 Token(Kind kind, int32_t offset, int32_t length, int32_t line)
112 : fKind(kind), fOffset(offset), fLength(length), fLine(line) {}
Ethan Nicholas5b5f0962017-09-11 13:50:14 -0700113
Ethan Nicholas5fad2b882021-09-27 10:39:18 -0400114 Kind fKind = Kind::TK_NONE;
115 int32_t fOffset = -1;
116 int32_t fLength = -1;
117 int32_t fLine = -1;
Ethan Nicholas5b5f0962017-09-11 13:50:14 -0700118};
119
120class Lexer {
121public:
Ethan Nicholas6823b502021-06-15 11:42:07 -0400122 void start(skstd::string_view text) {
Ethan Nicholas5b5f0962017-09-11 13:50:14 -0700123 fText = text;
Ethan Nicholas5b5f0962017-09-11 13:50:14 -0700124 fOffset = 0;
Ethan Nicholas5fad2b882021-09-27 10:39:18 -0400125 fLine = 1;
Ethan Nicholas5b5f0962017-09-11 13:50:14 -0700126 }
127
128 Token next();
129
Ethan Nicholas5fad2b882021-09-27 10:39:18 -0400130 struct Checkpoint {
131 int32_t fOffset;
132 int32_t fLine;
133 };
John Stilescc6961b2021-01-22 09:49:45 -0500134
Ethan Nicholas5fad2b882021-09-27 10:39:18 -0400135 Checkpoint getCheckpoint() const { return {fOffset, fLine}; }
136
137 void rewindToCheckpoint(Checkpoint checkpoint) {
138 fOffset = checkpoint.fOffset;
139 fLine = checkpoint.fLine;
140 }
John Stilescc6961b2021-01-22 09:49:45 -0500141
Ethan Nicholas5b5f0962017-09-11 13:50:14 -0700142private:
Ethan Nicholas6823b502021-06-15 11:42:07 -0400143 skstd::string_view fText;
Ethan Nicholasc7735f12018-08-03 11:48:20 -0400144 int32_t fOffset;
Ethan Nicholas5fad2b882021-09-27 10:39:18 -0400145 int32_t fLine;
Ethan Nicholas5b5f0962017-09-11 13:50:14 -0700146};
147
Brian Osman3c358422020-03-23 10:44:12 -0400148} // namespace SkSL
Ethan Nicholas5b5f0962017-09-11 13:50:14 -0700149#endif