OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 #include <cmath> | 5 #include <cmath> |
6 | 6 |
7 #include "src/allocation.h" | 7 #include "src/allocation.h" |
8 #include "src/base/logging.h" | 8 #include "src/base/logging.h" |
9 #include "src/conversions-inl.h" | 9 #include "src/conversions-inl.h" |
10 #include "src/conversions.h" | 10 #include "src/conversions.h" |
(...skipping 17 matching lines...) Expand all Loading... |
28 // CAUTION: This macro appends extra statements after a call, | 28 // CAUTION: This macro appends extra statements after a call, |
29 // thus it must never be used where only a single statement | 29 // thus it must never be used where only a single statement |
30 // is correct (e.g. an if statement branch w/o braces)! | 30 // is correct (e.g. an if statement branch w/o braces)! |
31 | 31 |
32 #define CHECK_OK_VALUE(x) ok); \ | 32 #define CHECK_OK_VALUE(x) ok); \ |
33 if (!*ok) return x; \ | 33 if (!*ok) return x; \ |
34 ((void)0 | 34 ((void)0 |
35 #define DUMMY ) // to make indentation work | 35 #define DUMMY ) // to make indentation work |
36 #undef DUMMY | 36 #undef DUMMY |
37 | 37 |
38 #define CHECK_OK CHECK_OK_VALUE(Statement::Default()) | 38 #define CHECK_OK CHECK_OK_VALUE(Expression::Default()) |
39 #define CHECK_OK_VOID CHECK_OK_VALUE(this->Void()) | 39 #define CHECK_OK_VOID CHECK_OK_VALUE(this->Void()) |
40 | 40 |
41 namespace { | 41 namespace { |
42 | 42 |
43 PreParserIdentifier GetSymbolHelper(Scanner* scanner) { | 43 PreParserIdentifier GetSymbolHelper(Scanner* scanner) { |
44 switch (scanner->current_token()) { | 44 switch (scanner->current_token()) { |
45 case Token::ENUM: | 45 case Token::ENUM: |
46 return PreParserIdentifier::Enum(); | 46 return PreParserIdentifier::Enum(); |
47 case Token::AWAIT: | 47 case Token::AWAIT: |
48 return PreParserIdentifier::Await(); | 48 return PreParserIdentifier::Await(); |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
128 | 128 |
129 // The PreParser checks that the syntax follows the grammar for JavaScript, | 129 // The PreParser checks that the syntax follows the grammar for JavaScript, |
130 // and collects some information about the program along the way. | 130 // and collects some information about the program along the way. |
131 // The grammar check is only performed in order to understand the program | 131 // The grammar check is only performed in order to understand the program |
132 // sufficiently to deduce some information about it, that can be used | 132 // sufficiently to deduce some information about it, that can be used |
133 // to speed up later parsing. Finding errors is not the goal of pre-parsing, | 133 // to speed up later parsing. Finding errors is not the goal of pre-parsing, |
134 // rather it is to speed up properly written and correct programs. | 134 // rather it is to speed up properly written and correct programs. |
135 // That means that contextual checks (like a label being declared where | 135 // That means that contextual checks (like a label being declared where |
136 // it is used) are generally omitted. | 136 // it is used) are generally omitted. |
137 | 137 |
138 PreParser::Statement PreParser::ParseFunctionDeclaration(bool* ok) { | |
139 Consume(Token::FUNCTION); | |
140 int pos = position(); | |
141 ParseFunctionFlags flags = ParseFunctionFlags::kIsNormal; | |
142 if (Check(Token::MUL)) { | |
143 flags |= ParseFunctionFlags::kIsGenerator; | |
144 if (allow_harmony_restrictive_declarations()) { | |
145 ReportMessageAt(scanner()->location(), | |
146 MessageTemplate::kGeneratorInLegacyContext); | |
147 *ok = false; | |
148 return Statement::Default(); | |
149 } | |
150 } | |
151 // PreParser is not able to parse "export default" yet (since PreParser is | |
152 // at the moment only used for functions, and it cannot occur | |
153 // there). TODO(marja): update this when it is. | |
154 return ParseHoistableDeclaration(pos, flags, nullptr, false, ok); | |
155 } | |
156 | |
157 // Redefinition of CHECK_OK for parsing expressions. | |
158 #undef CHECK_OK | |
159 #define CHECK_OK CHECK_OK_VALUE(Expression::Default()) | |
160 | |
161 PreParser::Expression PreParser::ParseFunctionLiteral( | 138 PreParser::Expression PreParser::ParseFunctionLiteral( |
162 Identifier function_name, Scanner::Location function_name_location, | 139 Identifier function_name, Scanner::Location function_name_location, |
163 FunctionNameValidity function_name_validity, FunctionKind kind, | 140 FunctionNameValidity function_name_validity, FunctionKind kind, |
164 int function_token_pos, FunctionLiteral::FunctionType function_type, | 141 int function_token_pos, FunctionLiteral::FunctionType function_type, |
165 LanguageMode language_mode, bool* ok) { | 142 LanguageMode language_mode, bool* ok) { |
166 // Function :: | 143 // Function :: |
167 // '(' FormalParameterList? ')' '{' FunctionBody '}' | 144 // '(' FormalParameterList? ')' '{' FunctionBody '}' |
168 | 145 |
169 // Parse function body. | 146 // Parse function body. |
170 PreParserStatementList body; | 147 PreParserStatementList body; |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
253 } | 230 } |
254 return PreParserExpression::FromIdentifier(name); | 231 return PreParserExpression::FromIdentifier(name); |
255 } | 232 } |
256 | 233 |
257 #undef CHECK_OK | 234 #undef CHECK_OK |
258 #undef CHECK_OK_CUSTOM | 235 #undef CHECK_OK_CUSTOM |
259 | 236 |
260 | 237 |
261 } // namespace internal | 238 } // namespace internal |
262 } // namespace v8 | 239 } // namespace v8 |
OLD | NEW |