OLD | NEW |
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_PARSING_PARSER_H_ | 5 #ifndef V8_PARSING_PARSER_H_ |
6 #define V8_PARSING_PARSER_H_ | 6 #define V8_PARSING_PARSER_H_ |
7 | 7 |
8 #include "src/ast/ast.h" | 8 #include "src/ast/ast.h" |
9 #include "src/ast/scopes.h" | 9 #include "src/ast/scopes.h" |
10 #include "src/parsing/parser-base.h" | 10 #include "src/parsing/parser-base.h" |
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
288 Statement* ParseHoistableDeclaration(int pos, ParseFunctionFlags flags, | 288 Statement* ParseHoistableDeclaration(int pos, ParseFunctionFlags flags, |
289 ZoneList<const AstRawString*>* names, | 289 ZoneList<const AstRawString*>* names, |
290 bool default_export, bool* ok); | 290 bool default_export, bool* ok); |
291 Statement* ParseAsyncFunctionDeclaration(ZoneList<const AstRawString*>* names, | 291 Statement* ParseAsyncFunctionDeclaration(ZoneList<const AstRawString*>* names, |
292 bool default_export, bool* ok); | 292 bool default_export, bool* ok); |
293 Expression* ParseAsyncFunctionExpression(bool* ok); | 293 Expression* ParseAsyncFunctionExpression(bool* ok); |
294 Statement* ParseClassDeclaration(ZoneList<const AstRawString*>* names, | 294 Statement* ParseClassDeclaration(ZoneList<const AstRawString*>* names, |
295 bool default_export, bool* ok); | 295 bool default_export, bool* ok); |
296 Statement* ParseNativeDeclaration(bool* ok); | 296 Statement* ParseNativeDeclaration(bool* ok); |
297 Block* ParseBlock(ZoneList<const AstRawString*>* labels, bool* ok); | 297 Block* ParseBlock(ZoneList<const AstRawString*>* labels, bool* ok); |
| 298 Block* BuildInitializationBlock(DeclarationParsingResult* parsing_result, |
| 299 ZoneList<const AstRawString*>* names, |
| 300 bool* ok); |
| 301 |
298 Block* ParseVariableStatement(VariableDeclarationContext var_context, | 302 Block* ParseVariableStatement(VariableDeclarationContext var_context, |
299 ZoneList<const AstRawString*>* names, | 303 ZoneList<const AstRawString*>* names, |
300 bool* ok); | 304 bool* ok); |
301 DoExpression* ParseDoExpression(bool* ok); | 305 DoExpression* ParseDoExpression(bool* ok); |
302 Expression* ParseYieldStarExpression(bool* ok); | 306 Expression* ParseYieldStarExpression(bool* ok); |
303 | 307 |
304 struct DeclarationDescriptor { | |
305 enum Kind { NORMAL, PARAMETER }; | |
306 Parser* parser; | |
307 Scope* scope; | |
308 Scope* hoist_scope; | |
309 VariableMode mode; | |
310 int declaration_pos; | |
311 int initialization_pos; | |
312 Kind declaration_kind; | |
313 }; | |
314 | |
315 struct DeclarationParsingResult { | |
316 struct Declaration { | |
317 Declaration(Expression* pattern, int initializer_position, | |
318 Expression* initializer) | |
319 : pattern(pattern), | |
320 initializer_position(initializer_position), | |
321 initializer(initializer) {} | |
322 | |
323 Expression* pattern; | |
324 int initializer_position; | |
325 Expression* initializer; | |
326 }; | |
327 | |
328 DeclarationParsingResult() | |
329 : declarations(4), | |
330 first_initializer_loc(Scanner::Location::invalid()), | |
331 bindings_loc(Scanner::Location::invalid()) {} | |
332 | |
333 Block* BuildInitializationBlock(ZoneList<const AstRawString*>* names, | |
334 bool* ok); | |
335 | |
336 DeclarationDescriptor descriptor; | |
337 List<Declaration> declarations; | |
338 Scanner::Location first_initializer_loc; | |
339 Scanner::Location bindings_loc; | |
340 }; | |
341 | |
342 class PatternRewriter final : public AstVisitor<PatternRewriter> { | 308 class PatternRewriter final : public AstVisitor<PatternRewriter> { |
343 public: | 309 public: |
344 static void DeclareAndInitializeVariables( | 310 static void DeclareAndInitializeVariables( |
345 Block* block, const DeclarationDescriptor* declaration_descriptor, | 311 Parser* parser, Block* block, |
| 312 const DeclarationDescriptor* declaration_descriptor, |
346 const DeclarationParsingResult::Declaration* declaration, | 313 const DeclarationParsingResult::Declaration* declaration, |
347 ZoneList<const AstRawString*>* names, bool* ok); | 314 ZoneList<const AstRawString*>* names, bool* ok); |
348 | 315 |
349 static void RewriteDestructuringAssignment(Parser* parser, | 316 static void RewriteDestructuringAssignment(Parser* parser, |
350 RewritableExpression* expr, | 317 RewritableExpression* expr, |
351 Scope* Scope); | 318 Scope* Scope); |
352 | 319 |
353 static Expression* RewriteDestructuringAssignment(Parser* parser, | 320 static Expression* RewriteDestructuringAssignment(Parser* parser, |
354 Assignment* assignment, | 321 Assignment* assignment, |
355 Scope* scope); | 322 Scope* scope); |
(...skipping 731 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1087 static const int kLiteralTypeSlot = 0; | 1054 static const int kLiteralTypeSlot = 0; |
1088 static const int kElementsSlot = 1; | 1055 static const int kElementsSlot = 1; |
1089 | 1056 |
1090 DISALLOW_IMPLICIT_CONSTRUCTORS(CompileTimeValue); | 1057 DISALLOW_IMPLICIT_CONSTRUCTORS(CompileTimeValue); |
1091 }; | 1058 }; |
1092 | 1059 |
1093 } // namespace internal | 1060 } // namespace internal |
1094 } // namespace v8 | 1061 } // namespace v8 |
1095 | 1062 |
1096 #endif // V8_PARSING_PARSER_H_ | 1063 #endif // V8_PARSING_PARSER_H_ |
OLD | NEW |