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 #include "src/parsing/parser.h" | 5 #include "src/parsing/parser.h" |
6 | 6 |
7 #include "src/api.h" | 7 #include "src/api.h" |
8 #include "src/ast/ast.h" | 8 #include "src/ast/ast.h" |
9 #include "src/ast/ast-expression-rewriter.h" | 9 #include "src/ast/ast-expression-rewriter.h" |
10 #include "src/ast/ast-expression-visitor.h" | 10 #include "src/ast/ast-expression-visitor.h" |
(...skipping 3482 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3493 *ok = false; | 3493 *ok = false; |
3494 return nullptr; | 3494 return nullptr; |
3495 } | 3495 } |
3496 | 3496 |
3497 Block* init_block = nullptr; | 3497 Block* init_block = nullptr; |
3498 | 3498 |
3499 // special case for legacy for (var/const x =.... in) | 3499 // special case for legacy for (var/const x =.... in) |
3500 if (!IsLexicalVariableMode(parsing_result.descriptor.mode) && | 3500 if (!IsLexicalVariableMode(parsing_result.descriptor.mode) && |
3501 decl.pattern->IsVariableProxy() && decl.initializer != nullptr) { | 3501 decl.pattern->IsVariableProxy() && decl.initializer != nullptr) { |
3502 ++use_counts_[v8::Isolate::kForInInitializer]; | 3502 ++use_counts_[v8::Isolate::kForInInitializer]; |
| 3503 if (FLAG_harmony_for_in) { |
| 3504 // TODO(rossberg): This error is not currently generated in the |
| 3505 // preparser, because that would lose some of the use counts |
| 3506 // recorded above. Once either the use counter or the flag is |
| 3507 // removed, the preparser should be adjusted. |
| 3508 ParserTraits::ReportMessageAt( |
| 3509 parsing_result.first_initializer_loc, |
| 3510 MessageTemplate::kForInOfLoopInitializer, |
| 3511 ForEachStatement::VisitModeString(mode)); |
| 3512 *ok = false; |
| 3513 return nullptr; |
| 3514 } |
3503 const AstRawString* name = | 3515 const AstRawString* name = |
3504 decl.pattern->AsVariableProxy()->raw_name(); | 3516 decl.pattern->AsVariableProxy()->raw_name(); |
3505 VariableProxy* single_var = scope_->NewUnresolved( | 3517 VariableProxy* single_var = scope_->NewUnresolved( |
3506 factory(), name, Variable::NORMAL, each_beg_pos, each_end_pos); | 3518 factory(), name, Variable::NORMAL, each_beg_pos, each_end_pos); |
3507 init_block = factory()->NewBlock( | 3519 init_block = factory()->NewBlock( |
3508 nullptr, 2, true, parsing_result.descriptor.declaration_pos); | 3520 nullptr, 2, true, parsing_result.descriptor.declaration_pos); |
3509 init_block->statements()->Add( | 3521 init_block->statements()->Add( |
3510 factory()->NewExpressionStatement( | 3522 factory()->NewExpressionStatement( |
3511 factory()->NewAssignment(Token::ASSIGN, single_var, | 3523 factory()->NewAssignment(Token::ASSIGN, single_var, |
3512 decl.initializer, | 3524 decl.initializer, |
(...skipping 3270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6783 try_block, target); | 6795 try_block, target); |
6784 final_loop = target; | 6796 final_loop = target; |
6785 } | 6797 } |
6786 | 6798 |
6787 return final_loop; | 6799 return final_loop; |
6788 } | 6800 } |
6789 | 6801 |
6790 | 6802 |
6791 } // namespace internal | 6803 } // namespace internal |
6792 } // namespace v8 | 6804 } // namespace v8 |
OLD | NEW |