| 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_BASE_H | 5 #ifndef V8_PARSING_PARSER_BASE_H | 
| 6 #define V8_PARSING_PARSER_BASE_H | 6 #define V8_PARSING_PARSER_BASE_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/bailout-reason.h" | 10 #include "src/bailout-reason.h" | 
| (...skipping 1370 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1381         scope->GetDeclarationScope()->RecordEvalCall(); | 1381         scope->GetDeclarationScope()->RecordEvalCall(); | 
| 1382       } | 1382       } | 
| 1383       return Call::IS_POSSIBLY_EVAL; | 1383       return Call::IS_POSSIBLY_EVAL; | 
| 1384     } | 1384     } | 
| 1385     return Call::NOT_EVAL; | 1385     return Call::NOT_EVAL; | 
| 1386   } | 1386   } | 
| 1387 | 1387 | 
| 1388   // Convenience method which determines the type of return statement to emit | 1388   // Convenience method which determines the type of return statement to emit | 
| 1389   // depending on the current function type. | 1389   // depending on the current function type. | 
| 1390   inline StatementT BuildReturnStatement(ExpressionT expr, int pos) { | 1390   inline StatementT BuildReturnStatement(ExpressionT expr, int pos) { | 
| 1391     if (is_generator() && !is_async_generator()) { |  | 
| 1392       expr = impl()->BuildIteratorResult(expr, true); |  | 
| 1393     } |  | 
| 1394 |  | 
| 1395     if (is_async_function()) { | 1391     if (is_async_function()) { | 
| 1396       return factory()->NewAsyncReturnStatement(expr, pos); | 1392       return factory()->NewAsyncReturnStatement(expr, pos); | 
| 1397     } | 1393     } | 
| 1398     return factory()->NewReturnStatement(expr, pos); | 1394     return factory()->NewReturnStatement(expr, pos); | 
| 1399   } | 1395   } | 
| 1400 | 1396 | 
| 1401   inline SuspendExpressionT BuildSuspend( | 1397   inline SuspendExpressionT BuildSuspend( | 
| 1402       ExpressionT generator, ExpressionT expr, int pos, | 1398       ExpressionT generator, ExpressionT expr, int pos, | 
| 1403       Suspend::OnAbruptResume on_abrupt_resume, SuspendFlags suspend_type) { | 1399       Suspend::OnAbruptResume on_abrupt_resume, SuspendFlags suspend_type) { | 
| 1404     DCHECK_EQ(0, | 1400     DCHECK_EQ(0, | 
| (...skipping 1590 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2995         expression = ParseAssignmentExpression(accept_IN, CHECK_OK); | 2991         expression = ParseAssignmentExpression(accept_IN, CHECK_OK); | 
| 2996         impl()->RewriteNonPattern(CHECK_OK); | 2992         impl()->RewriteNonPattern(CHECK_OK); | 
| 2997         break; | 2993         break; | 
| 2998     } | 2994     } | 
| 2999   } | 2995   } | 
| 3000 | 2996 | 
| 3001   if (delegating) { | 2997   if (delegating) { | 
| 3002     return impl()->RewriteYieldStar(generator_object, expression, pos); | 2998     return impl()->RewriteYieldStar(generator_object, expression, pos); | 
| 3003   } | 2999   } | 
| 3004 | 3000 | 
| 3005   if (!is_async_generator()) { |  | 
| 3006     // Async generator yield is rewritten in Ignition, and doesn't require |  | 
| 3007     // producing an Iterator Result. |  | 
| 3008     expression = impl()->BuildIteratorResult(expression, false); |  | 
| 3009   } |  | 
| 3010 |  | 
| 3011   // Hackily disambiguate o from o.next and o [Symbol.iterator](). | 3001   // Hackily disambiguate o from o.next and o [Symbol.iterator](). | 
| 3012   // TODO(verwaest): Come up with a better solution. | 3002   // TODO(verwaest): Come up with a better solution. | 
| 3013   ExpressionT yield = | 3003   ExpressionT yield = | 
| 3014       BuildSuspend(generator_object, expression, pos, | 3004       BuildSuspend(generator_object, expression, pos, | 
| 3015                    Suspend::kOnExceptionThrow, SuspendFlags::kYield); | 3005                    Suspend::kOnExceptionThrow, SuspendFlags::kYield); | 
| 3016   return yield; | 3006   return yield; | 
| 3017 } | 3007 } | 
| 3018 | 3008 | 
| 3019 // Precedence = 3 | 3009 // Precedence = 3 | 
| 3020 template <typename Impl> | 3010 template <typename Impl> | 
| (...skipping 1067 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 4088     inner_scope = NewVarblockScope(); | 4078     inner_scope = NewVarblockScope(); | 
| 4089     inner_scope->set_start_position(scanner()->location().beg_pos); | 4079     inner_scope->set_start_position(scanner()->location().beg_pos); | 
| 4090     inner_block = factory()->NewBlock(NULL, 8, true, kNoSourcePosition); | 4080     inner_block = factory()->NewBlock(NULL, 8, true, kNoSourcePosition); | 
| 4091     inner_block->set_scope(inner_scope); | 4081     inner_block->set_scope(inner_scope); | 
| 4092     body = inner_block->statements(); | 4082     body = inner_block->statements(); | 
| 4093   } | 4083   } | 
| 4094 | 4084 | 
| 4095   { | 4085   { | 
| 4096     BlockState block_state(&scope_, inner_scope); | 4086     BlockState block_state(&scope_, inner_scope); | 
| 4097 | 4087 | 
| 4098     if (IsGeneratorFunction(kind)) { | 4088     if (IsAsyncGeneratorFunction(kind)) { | 
|  | 4089       impl()->ParseAndRewriteAsyncGeneratorFunctionBody(pos, kind, body, ok); | 
|  | 4090     } else if (IsGeneratorFunction(kind)) { | 
| 4099       impl()->ParseAndRewriteGeneratorFunctionBody(pos, kind, body, ok); | 4091       impl()->ParseAndRewriteGeneratorFunctionBody(pos, kind, body, ok); | 
| 4100     } else if (IsAsyncFunction(kind)) { | 4092     } else if (IsAsyncFunction(kind)) { | 
| 4101       const bool accept_IN = true; | 4093       const bool accept_IN = true; | 
| 4102       ParseAsyncFunctionBody(inner_scope, body, kind, FunctionBodyType::kNormal, | 4094       ParseAsyncFunctionBody(inner_scope, body, kind, FunctionBodyType::kNormal, | 
| 4103                              accept_IN, pos, CHECK_OK_VOID); | 4095                              accept_IN, pos, CHECK_OK_VOID); | 
| 4104     } else { | 4096     } else { | 
| 4105       ParseStatementList(body, Token::RBRACE, CHECK_OK_VOID); | 4097       ParseStatementList(body, Token::RBRACE, CHECK_OK_VOID); | 
| 4106     } | 4098     } | 
| 4107 | 4099 | 
| 4108     if (IsDerivedConstructor(kind)) { | 4100     if (IsDerivedConstructor(kind)) { | 
| (...skipping 1899 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 6008 } | 6000 } | 
| 6009 | 6001 | 
| 6010 #undef CHECK_OK | 6002 #undef CHECK_OK | 
| 6011 #undef CHECK_OK_CUSTOM | 6003 #undef CHECK_OK_CUSTOM | 
| 6012 #undef CHECK_OK_VOID | 6004 #undef CHECK_OK_VOID | 
| 6013 | 6005 | 
| 6014 }  // namespace internal | 6006 }  // namespace internal | 
| 6015 }  // namespace v8 | 6007 }  // namespace v8 | 
| 6016 | 6008 | 
| 6017 #endif  // V8_PARSING_PARSER_BASE_H | 6009 #endif  // V8_PARSING_PARSER_BASE_H | 
| OLD | NEW | 
|---|