summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/parser/ParserTokens.h
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/JavaScriptCore/parser/ParserTokens.h
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/JavaScriptCore/parser/ParserTokens.h')
-rw-r--r--Source/JavaScriptCore/parser/ParserTokens.h84
1 files changed, 70 insertions, 14 deletions
diff --git a/Source/JavaScriptCore/parser/ParserTokens.h b/Source/JavaScriptCore/parser/ParserTokens.h
index 82a26639a..a0554ff36 100644
--- a/Source/JavaScriptCore/parser/ParserTokens.h
+++ b/Source/JavaScriptCore/parser/ParserTokens.h
@@ -23,8 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef ParserTokens_h
-#define ParserTokens_h
+#pragma once
#include "ParserModes.h"
#include <limits.h>
@@ -35,13 +34,22 @@ namespace JSC {
class Identifier;
enum {
- UnaryOpTokenFlag = 64,
- KeywordTokenFlag = 128,
- BinaryOpTokenPrecedenceShift = 8,
+ // Token Bitfield: 0b000000000RTE000IIIIPPPPKUXXXXXXX
+ // R = right-associative bit
+ // T = unterminated error flag
+ // E = error flag
+ // I = binary operator allows 'in'
+ // P = binary operator precedence
+ // K = keyword flag
+ // U = unary operator flag
+ UnaryOpTokenFlag = 128,
+ KeywordTokenFlag = 256,
+ BinaryOpTokenPrecedenceShift = 9,
BinaryOpTokenAllowsInPrecedenceAdditionalShift = 4,
BinaryOpTokenPrecedenceMask = 15 << BinaryOpTokenPrecedenceShift,
ErrorTokenFlag = 1 << (BinaryOpTokenAllowsInPrecedenceAdditionalShift + BinaryOpTokenPrecedenceShift + 7),
- UnterminatedErrorTokenFlag = ErrorTokenFlag << 1
+ UnterminatedErrorTokenFlag = ErrorTokenFlag << 1,
+ RightAssociativeBinaryOpTokenFlag = UnterminatedErrorTokenFlag << 1
};
#define BINARY_OP_PRECEDENCE(prec) (((prec) << BinaryOpTokenPrecedenceShift) | ((prec) << (BinaryOpTokenPrecedenceShift + BinaryOpTokenAllowsInPrecedenceAdditionalShift)))
@@ -75,6 +83,24 @@ enum JSTokenType {
FINALLY,
DEBUGGER,
ELSE,
+ IMPORT,
+ EXPORT,
+ CLASSTOKEN,
+ EXTENDS,
+ SUPER,
+
+ // Contextual keywords
+
+ LET,
+ YIELD,
+ AWAIT,
+ ASYNC,
+
+ FirstContextualKeywordToken = LET,
+ LastContextualKeywordToken = ASYNC,
+ FirstSafeContextualKeywordToken = AWAIT,
+ LastSafeContextualKeywordToken = LastContextualKeywordToken,
+
OPENBRACE = 0,
CLOSEBRACE,
OPENPAREN,
@@ -83,9 +109,13 @@ enum JSTokenType {
CLOSEBRACKET,
COMMA,
QUESTION,
- NUMBER,
+ BACKQUOTE,
+ INTEGER,
+ DOUBLE,
IDENT,
STRING,
+ TEMPLATE,
+ REGEXP,
SEMICOLON,
COLON,
DOT,
@@ -100,18 +130,20 @@ enum JSTokenType {
URSHIFTEQUAL,
ANDEQUAL,
MODEQUAL,
+ POWEQUAL,
XOREQUAL,
OREQUAL,
DOTDOTDOT,
+ ARROWFUNCTION,
LastUntaggedToken,
// Begin tagged tokens
PLUSPLUS = 0 | UnaryOpTokenFlag,
MINUSMINUS = 1 | UnaryOpTokenFlag,
- EXCLAMATION = 2 | UnaryOpTokenFlag,
- TILDE = 3 | UnaryOpTokenFlag,
- AUTOPLUSPLUS = 4 | UnaryOpTokenFlag,
- AUTOMINUSMINUS = 5 | UnaryOpTokenFlag,
+ AUTOPLUSPLUS = 2 | UnaryOpTokenFlag,
+ AUTOMINUSMINUS = 3 | UnaryOpTokenFlag,
+ EXCLAMATION = 4 | UnaryOpTokenFlag,
+ TILDE = 5 | UnaryOpTokenFlag,
TYPEOF = 6 | UnaryOpTokenFlag | KeywordTokenFlag,
VOIDTOKEN = 7 | UnaryOpTokenFlag | KeywordTokenFlag,
DELETETOKEN = 8 | UnaryOpTokenFlag | KeywordTokenFlag,
@@ -138,6 +170,7 @@ enum JSTokenType {
TIMES = 20 | BINARY_OP_PRECEDENCE(10),
DIVIDE = 21 | BINARY_OP_PRECEDENCE(10),
MOD = 22 | BINARY_OP_PRECEDENCE(10),
+ POW = 23 | BINARY_OP_PRECEDENCE(11) | RightAssociativeBinaryOpTokenFlag, // Make sure that POW has the highest operator precedence.
ERRORTOK = 0 | ErrorTokenFlag,
UNTERMINATED_IDENTIFIER_ESCAPE_ERRORTOK = 0 | ErrorTokenFlag | UnterminatedErrorTokenFlag,
INVALID_IDENTIFIER_ESCAPE_ERRORTOK = 1 | ErrorTokenFlag,
@@ -145,10 +178,16 @@ enum JSTokenType {
INVALID_IDENTIFIER_UNICODE_ESCAPE_ERRORTOK = 3 | ErrorTokenFlag,
UNTERMINATED_MULTILINE_COMMENT_ERRORTOK = 4 | ErrorTokenFlag | UnterminatedErrorTokenFlag,
UNTERMINATED_NUMERIC_LITERAL_ERRORTOK = 5 | ErrorTokenFlag | UnterminatedErrorTokenFlag,
- INVALID_OCTAL_NUMBER_ERRORTOK = 6 | ErrorTokenFlag | UnterminatedErrorTokenFlag,
+ UNTERMINATED_OCTAL_NUMBER_ERRORTOK = 6 | ErrorTokenFlag | UnterminatedErrorTokenFlag,
INVALID_NUMERIC_LITERAL_ERRORTOK = 7 | ErrorTokenFlag,
UNTERMINATED_STRING_LITERAL_ERRORTOK = 8 | ErrorTokenFlag | UnterminatedErrorTokenFlag,
INVALID_STRING_LITERAL_ERRORTOK = 9 | ErrorTokenFlag,
+ INVALID_PRIVATE_NAME_ERRORTOK = 10 | ErrorTokenFlag,
+ UNTERMINATED_HEX_NUMBER_ERRORTOK = 11 | ErrorTokenFlag | UnterminatedErrorTokenFlag,
+ UNTERMINATED_BINARY_NUMBER_ERRORTOK = 12 | ErrorTokenFlag | UnterminatedErrorTokenFlag,
+ UNTERMINATED_TEMPLATE_LITERAL_ERRORTOK = 13 | ErrorTokenFlag | UnterminatedErrorTokenFlag,
+ UNTERMINATED_REGEXP_LITERAL_ERRORTOK = 14 | ErrorTokenFlag | UnterminatedErrorTokenFlag,
+ INVALID_TEMPLATE_LITERAL_ERRORTOK = 15 | ErrorTokenFlag,
};
struct JSTextPosition {
@@ -176,6 +215,15 @@ union JSTokenData {
};
double doubleValue;
const Identifier* ident;
+ struct {
+ const Identifier* cooked;
+ const Identifier* raw;
+ bool isTail;
+ };
+ struct {
+ const Identifier* pattern;
+ const Identifier* flags;
+ };
};
struct JSTokenLocation {
@@ -202,6 +250,14 @@ struct JSToken {
JSTextPosition m_endPosition;
};
-} // namespace JSC
+ALWAYS_INLINE bool isUpdateOp(JSTokenType token)
+{
+ return token >= PLUSPLUS && token <= AUTOMINUSMINUS;
+}
-#endif // ParserTokens_h
+ALWAYS_INLINE bool isUnaryOp(JSTokenType token)
+{
+ return token & UnaryOpTokenFlag;
+}
+
+} // namespace JSC