Chromium Code Reviews| Index: src/sksl/SkSLToken.h |
| diff --git a/src/sksl/SkSLToken.h b/src/sksl/SkSLToken.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..6105731bdbbc0e1ef2c3fd120f7212ed0ba8d5fd |
| --- /dev/null |
| +++ b/src/sksl/SkSLToken.h |
| @@ -0,0 +1,156 @@ |
| +/* |
| + * Copyright 2016 Google Inc. |
| + * |
| + * Use of this source code is governed by a BSD-style license that can be |
| + * found in the LICENSE file. |
| + */ |
| + |
| +#ifndef SKSL_TOKEN |
| +#define SKSL_TOKEN |
| + |
| +#include "ast/SkSLASTPositionNode.h" |
|
dogben
2016/06/20 18:26:25
should be SkSLPosition.h?
|
| +#include "SkSLUtil.h" |
| + |
| +namespace SkSL { |
| + |
| +/** |
| + * Represents a lexical analysis token. Token is generally only used during the parse process, but |
| + * Token::Kind is also used to represent operator kinds. |
| + */ |
| +struct Token { |
| + enum Kind { |
| + END_OF_FILE, |
| + IDENTIFIER, |
| + INT_LITERAL, |
| + FLOAT_LITERAL, |
| + TRUE_LITERAL, |
| + FALSE_LITERAL, |
| + LPAREN, |
| + RPAREN, |
| + LBRACE, |
| + RBRACE, |
| + LBRACKET, |
| + RBRACKET, |
| + DOT, |
| + COMMA, |
| + PLUSPLUS, |
| + MINUSMINUS, |
| + PLUS, |
| + MINUS, |
| + STAR, |
| + SLASH, |
| + PERCENT, |
| + SHL, |
| + SHR, |
| + BITWISEOR, |
| + BITWISEXOR, |
| + BITWISEAND, |
| + LOGICALOR, |
| + LOGICALXOR, |
| + LOGICALAND, |
| + NOT, |
| + QUESTION, |
| + COLON, |
| + EQ, |
| + EQEQ, |
| + NEQ, |
| + GT, |
| + LT, |
| + GTEQ, |
| + LTEQ, |
| + PLUSEQ, |
| + MINUSEQ, |
| + STAREQ, |
| + SLASHEQ, |
| + PERCENTEQ, |
| + SHLEQ, |
| + SHREQ, |
| + BITWISEOREQ, |
| + BITWISEXOREQ, |
| + BITWISEANDEQ, |
| + LOGICALOREQ, |
| + LOGICALXOREQ, |
| + LOGICALANDEQ, |
| + SEMICOLON, |
| + IF, |
| + ELSE, |
| + FOR, |
| + WHILE, |
| + DO, |
| + RETURN, |
| + BREAK, |
| + CONTINUE, |
| + DISCARD, |
| + IN, |
| + OUT, |
| + INOUT, |
| + CONST, |
| + LOWP, |
| + MEDIUMP, |
| + HIGHP, |
| + UNIFORM, |
| + STRUCT, |
| + LAYOUT, |
| + DIRECTIVE, |
| + PRECISION, |
| + INVALID_TOKEN |
| + }; |
| + |
| + static std::string OperatorName(Kind kind) { |
| + switch (kind) { |
| + case Token::PLUS: return "+"; |
| + case Token::MINUS: return "-"; |
| + case Token::STAR: return "*"; |
| + case Token::SLASH: return "/"; |
| + case Token::PERCENT: return "%"; |
| + case Token::SHL: return "<<"; |
| + case Token::SHR: return ">>"; |
| + case Token::LOGICALAND: return "&&"; |
| + case Token::LOGICALOR: return "||"; |
| + case Token::LOGICALXOR: return "^^"; |
| + case Token::BITWISEAND: return "&"; |
| + case Token::BITWISEOR: return "|"; |
| + case Token::BITWISEXOR: return "^"; |
| + case Token::EQ: return "="; |
| + case Token::EQEQ: return "=="; |
| + case Token::NEQ: return "!="; |
| + case Token::LT: return "<"; |
| + case Token::GT: return ">"; |
| + case Token::LTEQ: return "<="; |
| + case Token::GTEQ: return ">="; |
| + case Token::PLUSEQ: return "+="; |
| + case Token::MINUSEQ: return "-="; |
| + case Token::STAREQ: return "*="; |
| + case Token::SLASHEQ: return "/="; |
| + case Token::PERCENTEQ: return "%="; |
| + case Token::SHLEQ: return "<<"; |
|
dogben
2016/06/20 18:26:26
missing = for the next 5
|
| + case Token::SHREQ: return ">>"; |
| + case Token::LOGICALANDEQ: return "&&"; |
| + case Token::LOGICALOREQ: return "||"; |
| + case Token::LOGICALXOREQ: return "^^"; |
| + case Token::BITWISEANDEQ: return "&="; |
| + case Token::BITWISEOREQ: return "|="; |
| + case Token::BITWISEXOREQ: return "^="; |
| + case Token::PLUSPLUS: return "++"; |
| + case Token::MINUSMINUS: return "--"; |
| + case Token::NOT: return "!"; |
| + default: |
| + ABORT("unsupported operator: %d\n", kind); |
| + } |
| + } |
| + |
| + Token() { |
| + } |
| + |
| + Token(Position position, Kind kind, std::string text) |
| + : fPosition(position) |
| + , fKind(kind) |
| + , fText(text) {} |
|
dogben
2016/06/20 18:26:25
nit: std::move
|
| + |
| + Position fPosition; |
| + Kind fKind; |
| + std::string fText; |
| +}; |
| + |
| +} // namespace |
| +#endif |