Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(236)

Side by Side Diff: src/token.h

Issue 160073006: Implement handling of arrow functions in the parser (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: What "git cl format" produces Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/scanner.cc ('k') | test/cctest/test-parsing.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_TOKEN_H_ 5 #ifndef V8_TOKEN_H_
6 #define V8_TOKEN_H_ 6 #define V8_TOKEN_H_
7 7
8 #include "src/base/logging.h" 8 #include "src/base/logging.h"
9 9
10 namespace v8 { 10 namespace v8 {
11 namespace internal { 11 namespace internal {
12 12
13 // TOKEN_LIST takes a list of 3 macros M, all of which satisfy the 13 // TOKEN_LIST takes a list of 3 macros M, all of which satisfy the
14 // same signature M(name, string, precedence), where name is the 14 // same signature M(name, string, precedence), where name is the
15 // symbolic token name, string is the corresponding syntactic symbol 15 // symbolic token name, string is the corresponding syntactic symbol
16 // (or NULL, for literals), and precedence is the precedence (or 0). 16 // (or NULL, for literals), and precedence is the precedence (or 0).
17 // The parameters are invoked for token categories as follows: 17 // The parameters are invoked for token categories as follows:
18 // 18 //
19 // T: Non-keyword tokens 19 // T: Non-keyword tokens
20 // K: Keyword tokens 20 // K: Keyword tokens
21 21
22 // IGNORE_TOKEN is a convenience macro that can be supplied as 22 // IGNORE_TOKEN is a convenience macro that can be supplied as
23 // an argument (at any position) for a TOKEN_LIST call. It does 23 // an argument (at any position) for a TOKEN_LIST call. It does
24 // nothing with tokens belonging to the respective category. 24 // nothing with tokens belonging to the respective category.
25 25
26 #define IGNORE_TOKEN(name, string, precedence) 26 #define IGNORE_TOKEN(name, string, precedence)
27 27
28 #define TOKEN_LIST(T, K) \ 28 #define TOKEN_LIST(T, K) \
29 /* End of source indicator. */ \ 29 /* End of source indicator. */ \
30 T(EOS, "EOS", 0) \ 30 T(EOS, "EOS", 0) \
31 \ 31 \
32 /* Punctuators (ECMA-262, section 7.7, page 15). */ \ 32 /* Punctuators (ECMA-262, section 7.7, page 15). */ \
33 T(LPAREN, "(", 0) \ 33 T(LPAREN, "(", 0) \
34 T(RPAREN, ")", 0) \ 34 T(RPAREN, ")", 0) \
35 T(LBRACK, "[", 0) \ 35 T(LBRACK, "[", 0) \
36 T(RBRACK, "]", 0) \ 36 T(RBRACK, "]", 0) \
37 T(LBRACE, "{", 0) \ 37 T(LBRACE, "{", 0) \
38 T(RBRACE, "}", 0) \ 38 T(RBRACE, "}", 0) \
39 T(COLON, ":", 0) \ 39 T(COLON, ":", 0) \
40 T(SEMICOLON, ";", 0) \ 40 T(SEMICOLON, ";", 0) \
41 T(PERIOD, ".", 0) \ 41 T(PERIOD, ".", 0) \
42 T(CONDITIONAL, "?", 3) \ 42 T(CONDITIONAL, "?", 3) \
43 T(INC, "++", 0) \ 43 T(INC, "++", 0) \
44 T(DEC, "--", 0) \ 44 T(DEC, "--", 0) \
45 \ 45 T(ARROW, "=>", 0) \
46 /* Assignment operators. */ \ 46 \
47 /* IsAssignmentOp() and Assignment::is_compound() relies on */ \ 47 /* Assignment operators. */ \
48 /* this block of enum values being contiguous and sorted in the */ \ 48 /* IsAssignmentOp() and Assignment::is_compound() relies on */ \
49 /* same order! */ \ 49 /* this block of enum values being contiguous and sorted in the */ \
50 T(INIT_VAR, "=init_var", 2) /* AST-use only. */ \ 50 /* same order! */ \
51 T(INIT_LET, "=init_let", 2) /* AST-use only. */ \ 51 T(INIT_VAR, "=init_var", 2) /* AST-use only. */ \
52 T(INIT_CONST, "=init_const", 2) /* AST-use only. */ \ 52 T(INIT_LET, "=init_let", 2) /* AST-use only. */ \
53 T(INIT_CONST_LEGACY, "=init_const_legacy", 2) /* AST-use only. */ \ 53 T(INIT_CONST, "=init_const", 2) /* AST-use only. */ \
54 T(ASSIGN, "=", 2) \ 54 T(INIT_CONST_LEGACY, "=init_const_legacy", 2) /* AST-use only. */ \
55 T(ASSIGN_BIT_OR, "|=", 2) \ 55 T(ASSIGN, "=", 2) \
56 T(ASSIGN_BIT_XOR, "^=", 2) \ 56 T(ASSIGN_BIT_OR, "|=", 2) \
57 T(ASSIGN_BIT_AND, "&=", 2) \ 57 T(ASSIGN_BIT_XOR, "^=", 2) \
58 T(ASSIGN_SHL, "<<=", 2) \ 58 T(ASSIGN_BIT_AND, "&=", 2) \
59 T(ASSIGN_SAR, ">>=", 2) \ 59 T(ASSIGN_SHL, "<<=", 2) \
60 T(ASSIGN_SHR, ">>>=", 2) \ 60 T(ASSIGN_SAR, ">>=", 2) \
61 T(ASSIGN_ADD, "+=", 2) \ 61 T(ASSIGN_SHR, ">>>=", 2) \
62 T(ASSIGN_SUB, "-=", 2) \ 62 T(ASSIGN_ADD, "+=", 2) \
63 T(ASSIGN_MUL, "*=", 2) \ 63 T(ASSIGN_SUB, "-=", 2) \
64 T(ASSIGN_DIV, "/=", 2) \ 64 T(ASSIGN_MUL, "*=", 2) \
65 T(ASSIGN_MOD, "%=", 2) \ 65 T(ASSIGN_DIV, "/=", 2) \
66 \ 66 T(ASSIGN_MOD, "%=", 2) \
67 /* Binary operators sorted by precedence. */ \ 67 \
68 /* IsBinaryOp() relies on this block of enum values */ \ 68 /* Binary operators sorted by precedence. */ \
69 /* being contiguous and sorted in the same order! */ \ 69 /* IsBinaryOp() relies on this block of enum values */ \
70 T(COMMA, ",", 1) \ 70 /* being contiguous and sorted in the same order! */ \
71 T(OR, "||", 4) \ 71 T(COMMA, ",", 1) \
72 T(AND, "&&", 5) \ 72 T(OR, "||", 4) \
73 T(BIT_OR, "|", 6) \ 73 T(AND, "&&", 5) \
74 T(BIT_XOR, "^", 7) \ 74 T(BIT_OR, "|", 6) \
75 T(BIT_AND, "&", 8) \ 75 T(BIT_XOR, "^", 7) \
76 T(SHL, "<<", 11) \ 76 T(BIT_AND, "&", 8) \
77 T(SAR, ">>", 11) \ 77 T(SHL, "<<", 11) \
78 T(SHR, ">>>", 11) \ 78 T(SAR, ">>", 11) \
79 T(ROR, "rotate right", 11) /* only used by Crankshaft */ \ 79 T(SHR, ">>>", 11) \
80 T(ADD, "+", 12) \ 80 T(ROR, "rotate right", 11) /* only used by Crankshaft */ \
81 T(SUB, "-", 12) \ 81 T(ADD, "+", 12) \
82 T(MUL, "*", 13) \ 82 T(SUB, "-", 12) \
83 T(DIV, "/", 13) \ 83 T(MUL, "*", 13) \
84 T(MOD, "%", 13) \ 84 T(DIV, "/", 13) \
85 \ 85 T(MOD, "%", 13) \
86 /* Compare operators sorted by precedence. */ \ 86 \
87 /* IsCompareOp() relies on this block of enum values */ \ 87 /* Compare operators sorted by precedence. */ \
88 /* being contiguous and sorted in the same order! */ \ 88 /* IsCompareOp() relies on this block of enum values */ \
89 T(EQ, "==", 9) \ 89 /* being contiguous and sorted in the same order! */ \
90 T(NE, "!=", 9) \ 90 T(EQ, "==", 9) \
91 T(EQ_STRICT, "===", 9) \ 91 T(NE, "!=", 9) \
92 T(NE_STRICT, "!==", 9) \ 92 T(EQ_STRICT, "===", 9) \
93 T(LT, "<", 10) \ 93 T(NE_STRICT, "!==", 9) \
94 T(GT, ">", 10) \ 94 T(LT, "<", 10) \
95 T(LTE, "<=", 10) \ 95 T(GT, ">", 10) \
96 T(GTE, ">=", 10) \ 96 T(LTE, "<=", 10) \
97 K(INSTANCEOF, "instanceof", 10) \ 97 T(GTE, ">=", 10) \
98 K(IN, "in", 10) \ 98 K(INSTANCEOF, "instanceof", 10) \
99 \ 99 K(IN, "in", 10) \
100 /* Unary operators. */ \ 100 \
101 /* IsUnaryOp() relies on this block of enum values */ \ 101 /* Unary operators. */ \
102 /* being contiguous and sorted in the same order! */ \ 102 /* IsUnaryOp() relies on this block of enum values */ \
103 T(NOT, "!", 0) \ 103 /* being contiguous and sorted in the same order! */ \
104 T(BIT_NOT, "~", 0) \ 104 T(NOT, "!", 0) \
105 K(DELETE, "delete", 0) \ 105 T(BIT_NOT, "~", 0) \
106 K(TYPEOF, "typeof", 0) \ 106 K(DELETE, "delete", 0) \
107 K(VOID, "void", 0) \ 107 K(TYPEOF, "typeof", 0) \
108 \ 108 K(VOID, "void", 0) \
109 /* Keywords (ECMA-262, section 7.5.2, page 13). */ \ 109 \
110 K(BREAK, "break", 0) \ 110 /* Keywords (ECMA-262, section 7.5.2, page 13). */ \
111 K(CASE, "case", 0) \ 111 K(BREAK, "break", 0) \
112 K(CATCH, "catch", 0) \ 112 K(CASE, "case", 0) \
113 K(CONTINUE, "continue", 0) \ 113 K(CATCH, "catch", 0) \
114 K(DEBUGGER, "debugger", 0) \ 114 K(CONTINUE, "continue", 0) \
115 K(DEFAULT, "default", 0) \ 115 K(DEBUGGER, "debugger", 0) \
116 /* DELETE */ \ 116 K(DEFAULT, "default", 0) \
117 K(DO, "do", 0) \ 117 /* DELETE */ \
118 K(ELSE, "else", 0) \ 118 K(DO, "do", 0) \
119 K(FINALLY, "finally", 0) \ 119 K(ELSE, "else", 0) \
120 K(FOR, "for", 0) \ 120 K(FINALLY, "finally", 0) \
121 K(FUNCTION, "function", 0) \ 121 K(FOR, "for", 0) \
122 K(IF, "if", 0) \ 122 K(FUNCTION, "function", 0) \
123 /* IN */ \ 123 K(IF, "if", 0) \
124 /* INSTANCEOF */ \ 124 /* IN */ \
125 K(NEW, "new", 0) \ 125 /* INSTANCEOF */ \
126 K(RETURN, "return", 0) \ 126 K(NEW, "new", 0) \
127 K(SWITCH, "switch", 0) \ 127 K(RETURN, "return", 0) \
128 K(THIS, "this", 0) \ 128 K(SWITCH, "switch", 0) \
129 K(THROW, "throw", 0) \ 129 K(THIS, "this", 0) \
130 K(TRY, "try", 0) \ 130 K(THROW, "throw", 0) \
131 /* TYPEOF */ \ 131 K(TRY, "try", 0) \
132 K(VAR, "var", 0) \ 132 /* TYPEOF */ \
133 /* VOID */ \ 133 K(VAR, "var", 0) \
134 K(WHILE, "while", 0) \ 134 /* VOID */ \
135 K(WITH, "with", 0) \ 135 K(WHILE, "while", 0) \
136 \ 136 K(WITH, "with", 0) \
137 /* Literals (ECMA-262, section 7.8, page 16). */ \ 137 \
138 K(NULL_LITERAL, "null", 0) \ 138 /* Literals (ECMA-262, section 7.8, page 16). */ \
139 K(TRUE_LITERAL, "true", 0) \ 139 K(NULL_LITERAL, "null", 0) \
140 K(FALSE_LITERAL, "false", 0) \ 140 K(TRUE_LITERAL, "true", 0) \
141 T(NUMBER, NULL, 0) \ 141 K(FALSE_LITERAL, "false", 0) \
142 T(STRING, NULL, 0) \ 142 T(NUMBER, NULL, 0) \
143 \ 143 T(STRING, NULL, 0) \
144 /* Identifiers (not keywords or future reserved words). */ \ 144 \
145 T(IDENTIFIER, NULL, 0) \ 145 /* Identifiers (not keywords or future reserved words). */ \
146 \ 146 T(IDENTIFIER, NULL, 0) \
147 /* Future reserved words (ECMA-262, section 7.6.1.2). */ \ 147 \
148 T(FUTURE_RESERVED_WORD, NULL, 0) \ 148 /* Future reserved words (ECMA-262, section 7.6.1.2). */ \
149 T(FUTURE_STRICT_RESERVED_WORD, NULL, 0) \ 149 T(FUTURE_RESERVED_WORD, NULL, 0) \
150 K(CONST, "const", 0) \ 150 T(FUTURE_STRICT_RESERVED_WORD, NULL, 0) \
151 K(EXPORT, "export", 0) \ 151 K(CONST, "const", 0) \
152 K(IMPORT, "import", 0) \ 152 K(EXPORT, "export", 0) \
153 K(LET, "let", 0) \ 153 K(IMPORT, "import", 0) \
154 K(YIELD, "yield", 0) \ 154 K(LET, "let", 0) \
155 \ 155 K(YIELD, "yield", 0) \
156 /* Illegal token - not able to scan. */ \ 156 \
157 T(ILLEGAL, "ILLEGAL", 0) \ 157 /* Illegal token - not able to scan. */ \
158 \ 158 T(ILLEGAL, "ILLEGAL", 0) \
159 /* Scanner-internal use only. */ \ 159 \
160 /* Scanner-internal use only. */ \
160 T(WHITESPACE, NULL, 0) 161 T(WHITESPACE, NULL, 0)
161 162
162 163
163 class Token { 164 class Token {
164 public: 165 public:
165 // All token values. 166 // All token values.
166 #define T(name, string, precedence) name, 167 #define T(name, string, precedence) name,
167 enum Value { 168 enum Value {
168 TOKEN_LIST(T, T) 169 TOKEN_LIST(T, T)
169 NUM_TOKENS 170 NUM_TOKENS
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 private: 284 private:
284 static const char* const name_[NUM_TOKENS]; 285 static const char* const name_[NUM_TOKENS];
285 static const char* const string_[NUM_TOKENS]; 286 static const char* const string_[NUM_TOKENS];
286 static const int8_t precedence_[NUM_TOKENS]; 287 static const int8_t precedence_[NUM_TOKENS];
287 static const char token_type[NUM_TOKENS]; 288 static const char token_type[NUM_TOKENS];
288 }; 289 };
289 290
290 } } // namespace v8::internal 291 } } // namespace v8::internal
291 292
292 #endif // V8_TOKEN_H_ 293 #endif // V8_TOKEN_H_
OLDNEW
« no previous file with comments | « src/scanner.cc ('k') | test/cctest/test-parsing.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698