Lines Matching refs:Token
24 static int parse_modifier_token(Token::Kind token) {
26 case Token::Kind::TK_UNIFORM: return Modifiers::kUniform_Flag;
27 case Token::Kind::TK_CONST: return Modifiers::kConst_Flag;
28 case Token::Kind::TK_IN: return Modifiers::kIn_Flag;
29 case Token::Kind::TK_OUT: return Modifiers::kOut_Flag;
30 case Token::Kind::TK_INOUT: return Modifiers::kIn_Flag | Modifiers::kOut_Flag;
31 case Token::Kind::TK_FLAT: return Modifiers::kFlat_Flag;
32 case Token::Kind::TK_NOPERSPECTIVE: return Modifiers::kNoPerspective_Flag;
33 case Token::Kind::TK_HASSIDEEFFECTS: return Modifiers::kHasSideEffects_Flag;
34 case Token::Kind::TK_INLINE: return Modifiers::kInline_Flag;
35 case Token::Kind::TK_NOINLINE: return Modifiers::kNoInline_Flag;
36 case Token::Kind::TK_HIGHP: return Modifiers::kHighp_Flag;
37 case Token::Kind::TK_MEDIUMP: return Modifiers::kMediump_Flag;
38 case Token::Kind::TK_LOWP: return Modifiers::kLowp_Flag;
39 case Token::Kind::TK_ES3: return Modifiers::kES3_Flag;
105 , fPushback(Token::Kind::TK_NONE, /*offset=*/-1, /*length=*/-1, /*line=*/-1) {
116 Token DSLParser::nextRawToken() {
117 if (fPushback.fKind != Token::Kind::TK_NONE) {
118 Token result = fPushback;
119 fPushback.fKind = Token::Kind::TK_NONE;
125 Token DSLParser::nextToken() {
127 Token token = this->nextRawToken();
129 case Token::Kind::TK_WHITESPACE:
130 case Token::Kind::TK_LINE_COMMENT:
131 case Token::Kind::TK_BLOCK_COMMENT:
134 case Token::Kind::TK_RESERVED:
136 token.fKind = Token::Kind::TK_IDENTIFIER;
145 void DSLParser::pushback(Token t) {
146 SkASSERT(fPushback.fKind == Token::Kind::TK_NONE);
150 Token DSLParser::peek() {
151 if (fPushback.fKind == Token::Kind::TK_NONE) {
157 bool DSLParser::checkNext(Token::Kind kind, Token* result) {
158 if (fPushback.fKind != Token::Kind::TK_NONE && fPushback.fKind != kind) {
161 Token next = this->nextToken();
172 bool DSLParser::expect(Token::Kind kind, const char* expected, Token* result) {
173 Token next = this->nextToken();
187 bool DSLParser::expectIdentifier(Token* result) {
188 if (!this->expect(Token::Kind::TK_IDENTIFIER, "an identifier", result)) {
200 skstd::string_view DSLParser::text(Token token) {
204 PositionInfo DSLParser::position(Token t) {
212 void DSLParser::error(Token token, String msg) {
255 case Token::Kind::TK_END_OF_FILE:
258 case Token::Kind::TK_DIRECTIVE:
261 case Token::Kind::TK_INVALID: {
277 Token start;
278 if (!this->expect(Token::Kind::TK_DIRECTIVE, "a directive", &start)) {
283 Token name;
287 if (!this->expect(Token::Kind::TK_COLON, "':'")) {
290 Token behavior;
291 if (!this->expect(Token::Kind::TK_IDENTIFIER, "an identifier", &behavior)) {
311 Token lookahead = this->peek();
313 case Token::Kind::TK_SEMICOLON:
322 if (lookahead.fKind == Token::Kind::TK_IDENTIFIER && !IsType(this->text(lookahead))) {
326 if (lookahead.fKind == Token::Kind::TK_SEMICOLON) {
331 if (lookahead.fKind == Token::Kind::TK_STRUCT) {
339 Token name;
343 if (this->checkNext(Token::Kind::TK_LPAREN)) {
354 const Token& name) {
356 Token lookahead = this->peek();
357 if (lookahead.fKind == Token::Kind::TK_RPAREN) {
359 } else if (lookahead.fKind == Token::Kind::TK_IDENTIFIER && this->text(lookahead) == "void") {
369 if (!this->checkNext(Token::Kind::TK_COMMA)) {
374 if (!this->expect(Token::Kind::TK_RPAREN, "')'")) {
382 if (!this->checkNext(Token::Kind::TK_SEMICOLON)) {
419 while (this->checkNext(Token::Kind::TK_LBRACKET)) {
420 if (this->checkNext(Token::Kind::TK_RBRACKET)) {
424 if (!this->expect(Token::Kind::TK_RBRACKET, "']'")) {
433 if (this->checkNext(Token::Kind::TK_EQ)) {
461 while (this->checkNext(Token::Kind::TK_COMMA)) {
463 Token identifierName;
479 this->expect(Token::Kind::TK_SEMICOLON, "';'");
500 while (this->checkNext(Token::Kind::TK_COMMA)) {
502 Token identifierName;
518 this->expect(Token::Kind::TK_SEMICOLON, "';'");
524 Token nextToken = this->peek();
525 if (nextToken.fKind == Token::Kind::TK_CONST) {
531 if (nextToken.fKind == Token::Kind::TK_HIGHP ||
532 nextToken.fKind == Token::Kind::TK_MEDIUMP ||
533 nextToken.fKind == Token::Kind::TK_LOWP ||
582 if (!this->expect(Token::Kind::TK_STRUCT, "'struct'")) {
585 Token name;
589 if (!this->expect(Token::Kind::TK_LBRACE, "'{'")) {
593 while (!this->checkNext(Token::Kind::TK_RBRACE)) {
602 Token memberName;
607 while (this->checkNext(Token::Kind::TK_LBRACKET)) {
609 if (!this->expect(Token::Kind::TK_RBRACKET, "']'")) {
615 } while (this->checkNext(Token::Kind::TK_COMMA));
616 if (!this->expect(Token::Kind::TK_SEMICOLON, "';'")) {
632 Token name;
633 if (this->checkNext(Token::Kind::TK_IDENTIFIER, &name)) {
637 this->expect(Token::Kind::TK_SEMICOLON, "';'");
649 Token name;
661 if (!this->expect(Token::Kind::TK_EQ, "'='")) {
664 Token resultToken;
665 if (!this->expect(Token::Kind::TK_INT_LITERAL, "a non-negative integer", &resultToken)) {
679 if (!this->expect(Token::Kind::TK_EQ, "'='")) {
682 Token resultToken;
692 if (this->checkNext(Token::Kind::TK_LAYOUT)) {
693 if (!this->expect(Token::Kind::TK_LPAREN, "'('")) {
697 Token t = this->nextToken();
742 if (this->checkNext(Token::Kind::TK_RPAREN)) {
745 if (!this->expect(Token::Kind::TK_COMMA, "','")) {
772 Token start = this->nextToken();
779 case Token::Kind::TK_IF: // fall through
780 case Token::Kind::TK_STATIC_IF:
782 case Token::Kind::TK_FOR:
784 case Token::Kind::TK_DO:
786 case Token::Kind::TK_WHILE:
788 case Token::Kind::TK_SWITCH: // fall through
789 case Token::Kind::TK_STATIC_SWITCH:
791 case Token::Kind::TK_RETURN:
793 case Token::Kind::TK_BREAK:
795 case Token::Kind::TK_CONTINUE:
797 case Token::Kind::TK_DISCARD:
799 case Token::Kind::TK_LBRACE: {
803 case Token::Kind::TK_SEMICOLON:
806 case Token::Kind::TK_HIGHP:
807 case Token::Kind::TK_MEDIUMP:
808 case Token::Kind::TK_LOWP:
809 case Token::Kind::TK_CONST:
810 case Token::Kind::TK_IDENTIFIER:
819 Token type;
820 if (!this->expect(Token::Kind::TK_IDENTIFIER, "a type", &type)) {
828 while (this->checkNext(Token::Kind::TK_LBRACKET)) {
829 if (this->peek().fKind != Token::Kind::TK_RBRACKET) {
834 this->expect(Token::Kind::TK_RBRACKET, "']'");
843 Token typeName;
847 if (peek().fKind != Token::Kind::TK_LBRACE) {
856 while (!this->checkNext(Token::Kind::TK_RBRACE)) {
863 Token fieldName;
864 if (!this->expect(Token::Kind::TK_IDENTIFIER, "an identifier", &fieldName)) {
868 if (this->checkNext(Token::Kind::TK_LBRACKET)) {
869 Token sizeToken = this->peek();
870 if (sizeToken.fKind != Token::Kind::TK_RBRACKET) {
876 this->expect(Token::Kind::TK_RBRACKET, "']'");
878 if (!this->expect(Token::Kind::TK_SEMICOLON, "';'")) {
884 while (this->checkNext(Token::Kind::TK_COMMA));
887 Token instanceNameToken;
889 if (this->checkNext(Token::Kind::TK_IDENTIFIER, &instanceNameToken)) {
891 if (this->checkNext(Token::Kind::TK_LBRACKET)) {
893 this->expect(Token::Kind::TK_RBRACKET, "']'");
896 this->expect(Token::Kind::TK_SEMICOLON, "';'");
909 Token start;
910 bool isStatic = this->checkNext(Token::Kind::TK_STATIC_IF, &start);
911 if (!isStatic && !this->expect(Token::Kind::TK_IF, "'if'", &start)) {
914 if (!this->expect(Token::Kind::TK_LPAREN, "'('")) {
921 if (!this->expect(Token::Kind::TK_RPAREN, "')'")) {
929 if (this->checkNext(Token::Kind::TK_ELSE)) {
946 Token start;
947 if (!this->expect(Token::Kind::TK_DO, "'do'", &start)) {
954 if (!this->expect(Token::Kind::TK_WHILE, "'while'")) {
957 if (!this->expect(Token::Kind::TK_LPAREN, "'('")) {
964 if (!this->expect(Token::Kind::TK_RPAREN, "')'")) {
967 if (!this->expect(Token::Kind::TK_SEMICOLON, "';'")) {
975 Token start;
976 if (!this->expect(Token::Kind::TK_WHILE, "'while'", &start)) {
979 if (!this->expect(Token::Kind::TK_LPAREN, "'('")) {
986 if (!this->expect(Token::Kind::TK_RPAREN, "')'")) {
998 Token start;
999 if (!this->expect(Token::Kind::TK_CASE, "'case'", &start)) {
1006 if (!this->expect(Token::Kind::TK_COLON, "':'")) {
1010 while (this->peek().fKind != Token::Kind::TK_RBRACE &&
1011 this->peek().fKind != Token::Kind::TK_CASE &&
1012 this->peek().fKind != Token::Kind::TK_DEFAULT) {
1024 Token start;
1025 bool isStatic = this->checkNext(Token::Kind::TK_STATIC_SWITCH, &start);
1026 if (!isStatic && !this->expect(Token::Kind::TK_SWITCH, "'switch'", &start)) {
1029 if (!this->expect(Token::Kind::TK_LPAREN, "'('")) {
1036 if (!this->expect(Token::Kind::TK_RPAREN, "')'")) {
1039 if (!this->expect(Token::Kind::TK_LBRACE, "'{'")) {
1043 while (this->peek().fKind == Token::Kind::TK_CASE) {
1052 if (this->peek().fKind == Token::Kind::TK_DEFAULT) {
1054 Token defaultStart;
1055 SkAssertResult(this->expect(Token::Kind::TK_DEFAULT, "'default'", &defaultStart));
1056 if (!this->expect(Token::Kind::TK_COLON, "':'")) {
1059 while (this->peek().fKind != Token::Kind::TK_RBRACE) {
1068 if (!this->expect(Token::Kind::TK_RBRACE, "'}'")) {
1081 Token start;
1082 if (!this->expect(Token::Kind::TK_FOR, "'for'", &start)) {
1085 if (!this->expect(Token::Kind::TK_LPAREN, "'('")) {
1090 Token nextToken = this->peek();
1091 if (nextToken.fKind == Token::Kind::TK_SEMICOLON) {
1102 if (this->peek().fKind != Token::Kind::TK_SEMICOLON) {
1109 if (!this->expect(Token::Kind::TK_SEMICOLON, "';'")) {
1113 if (this->peek().fKind != Token::Kind::TK_RPAREN) {
1120 if (!this->expect(Token::Kind::TK_RPAREN, "')'")) {
1136 Token start;
1137 if (!this->expect(Token::Kind::TK_RETURN, "'return'", &start)) {
1141 if (this->peek().fKind != Token::Kind::TK_SEMICOLON) {
1148 if (!this->expect(Token::Kind::TK_SEMICOLON, "';'")) {
1157 Token start;
1158 if (!this->expect(Token::Kind::TK_BREAK, "'break'", &start)) {
1161 if (!this->expect(Token::Kind::TK_SEMICOLON, "';'")) {
1169 Token start;
1170 if (!this->expect(Token::Kind::TK_CONTINUE, "'continue'", &start)) {
1173 if (!this->expect(Token::Kind::TK_SEMICOLON, "';'")) {
1181 Token start;
1182 if (!this->expect(Token::Kind::TK_DISCARD, "'continue'", &start)) {
1185 if (!this->expect(Token::Kind::TK_SEMICOLON, "';'")) {
1193 Token start;
1194 if (!this->expect(Token::Kind::TK_LBRACE, "'{'", &start)) {
1205 case Token::Kind::TK_RBRACE:
1208 case Token::Kind::TK_END_OF_FILE:
1227 if (!this->expect(Token::Kind::TK_SEMICOLON, "';'")) {
1241 Token t;
1243 while (this->checkNext(Token::Kind::TK_COMMA, &t)) {
1283 case Token::Kind::TK_EQ: OPERATOR_RIGHT(=, assignmentExpression); break;
1284 case Token::Kind::TK_STAREQ: OPERATOR_RIGHT(*=, assignmentExpression); break;
1285 case Token::Kind::TK_SLASHEQ: OPERATOR_RIGHT(/=, assignmentExpression); break;
1286 case Token::Kind::TK_PERCENTEQ: OPERATOR_RIGHT(%=, assignmentExpression); break;
1287 case Token::Kind::TK_PLUSEQ: OPERATOR_RIGHT(+=, assignmentExpression); break;
1288 case Token::Kind::TK_MINUSEQ: OPERATOR_RIGHT(-=, assignmentExpression); break;
1289 case Token::Kind::TK_SHLEQ: OPERATOR_RIGHT(<<=, assignmentExpression); break;
1290 case Token::Kind::TK_SHREQ: OPERATOR_RIGHT(>>=, assignmentExpression); break;
1291 case Token::Kind::TK_BITWISEANDEQ: OPERATOR_RIGHT(&=, assignmentExpression); break;
1292 case Token::Kind::TK_BITWISEXOREQ: OPERATOR_RIGHT(^=, assignmentExpression); break;
1293 case Token::Kind::TK_BITWISEOREQ: OPERATOR_RIGHT(|=, assignmentExpression); break;
1307 if (this->checkNext(Token::Kind::TK_QUESTION)) {
1315 if (this->expect(Token::Kind::TK_COLON, "':'")) {
1334 while (this->peek().fKind == Token::Kind::TK_LOGICALOR) {
1347 while (this->checkNext(Token::Kind::TK_LOGICALXOR)) {
1368 while (this->peek().fKind == Token::Kind::TK_LOGICALAND) {
1381 while (this->peek().fKind == Token::Kind::TK_BITWISEOR) {
1394 while (this->peek().fKind == Token::Kind::TK_BITWISEXOR) {
1407 while (this->peek().fKind == Token::Kind::TK_BITWISEAND) {
1422 case Token::Kind::TK_EQEQ: OPERATOR_RIGHT(==, relationalExpression); break;
1423 case Token::Kind::TK_NEQ: OPERATOR_RIGHT(!=, relationalExpression); break;
1438 case Token::Kind::TK_LT: OPERATOR_RIGHT(<, shiftExpression); break;
1439 case Token::Kind::TK_GT: OPERATOR_RIGHT(>, shiftExpression); break;
1440 case Token::Kind::TK_LTEQ: OPERATOR_RIGHT(<=, shiftExpression); break;
1441 case Token::Kind::TK_GTEQ: OPERATOR_RIGHT(>=, shiftExpression); break;
1456 case Token::Kind::TK_SHL: OPERATOR_RIGHT(<<, additiveExpression); break;
1457 case Token::Kind::TK_SHR: OPERATOR_RIGHT(>>, additiveExpression); break;
1472 case Token::Kind::TK_PLUS: OPERATOR_RIGHT(+, multiplicativeExpression); break;
1473 case Token::Kind::TK_MINUS: OPERATOR_RIGHT(-, multiplicativeExpression); break;
1488 case Token::Kind::TK_STAR: OPERATOR_RIGHT(*, unaryExpression); break;
1489 case Token::Kind::TK_SLASH: OPERATOR_RIGHT(/, unaryExpression); break;
1490 case Token::Kind::TK_PERCENT: OPERATOR_RIGHT(%, unaryExpression); break;
1499 Token next = this->peek();
1501 case Token::Kind::TK_PLUS:
1502 case Token::Kind::TK_MINUS:
1503 case Token::Kind::TK_LOGICALNOT:
1504 case Token::Kind::TK_BITWISENOT:
1505 case Token::Kind::TK_PLUSPLUS:
1506 case Token::Kind::TK_MINUSMINUS: {
1516 case Token::Kind::TK_PLUS: return {{ +std::move(expr)}};
1517 case Token::Kind::TK_MINUS: return {{ -std::move(expr)}};
1518 case Token::Kind::TK_LOGICALNOT: return {{ !std::move(expr)}};
1519 case Token::Kind::TK_BITWISENOT: return {{ ~std::move(expr)}};
1520 case Token::Kind::TK_PLUSPLUS: return {{++std::move(expr)}};
1521 case Token::Kind::TK_MINUSMINUS: return {{--std::move(expr)}};
1538 Token t = this->peek();
1540 case Token::Kind::TK_FLOAT_LITERAL:
1545 case Token::Kind::TK_LBRACKET:
1546 case Token::Kind::TK_DOT:
1547 case Token::Kind::TK_LPAREN:
1548 case Token::Kind::TK_PLUSPLUS:
1549 case Token::Kind::TK_MINUSMINUS: {
1621 Token next = this->nextToken();
1627 case Token::Kind::TK_LBRACKET: {
1628 if (this->checkNext(Token::Kind::TK_RBRACKET)) {
1636 this->expect(Token::Kind::TK_RBRACKET, "']' to complete array access expression");
1643 case Token::Kind::TK_DOT: {
1651 case Token::Kind::TK_FLOAT_LITERAL: {
1659 Token id = this->nextRawToken();
1660 if (id.fKind == Token::Kind::TK_IDENTIFIER) {
1669 case Token::Kind::TK_LPAREN: {
1671 if (this->peek().fKind != Token::Kind::TK_RPAREN) {
1678 if (!this->checkNext(Token::Kind::TK_COMMA)) {
1683 this->expect(Token::Kind::TK_RPAREN, "')' to complete function arguments");
1686 case Token::Kind::TK_PLUSPLUS:
1688 case Token::Kind::TK_MINUSMINUS:
1699 Token t = this->peek();
1701 case Token::Kind::TK_IDENTIFIER: {
1708 case Token::Kind::TK_INT_LITERAL: {
1715 case Token::Kind::TK_FLOAT_LITERAL: {
1722 case Token::Kind::TK_TRUE_LITERAL: // fall through
1723 case Token::Kind::TK_FALSE_LITERAL: {
1728 case Token::Kind::TK_LPAREN: {
1736 this->expect(Token::Kind::TK_RPAREN, "')' to complete expression");
1752 Token t;
1753 if (!this->expect(Token::Kind::TK_INT_LITERAL, "integer literal", &t)) {
1766 Token t;
1767 if (!this->expect(Token::Kind::TK_FLOAT_LITERAL, "float literal", &t)) {
1780 Token t = this->nextToken();
1782 case Token::Kind::TK_TRUE_LITERAL:
1785 case Token::Kind::TK_FALSE_LITERAL:
1796 Token t;
1797 if (this->expect(Token::Kind::TK_IDENTIFIER, "identifier", &t)) {