| OLD | NEW |
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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/ast/ast.h" | 5 #include "src/ast/ast.h" |
| 6 #include "src/messages.h" | 6 #include "src/messages.h" |
| 7 #include "src/parsing/parameter-initializer-rewriter.h" | 7 #include "src/parsing/parameter-initializer-rewriter.h" |
| 8 #include "src/parsing/parser.h" | 8 #include "src/parsing/parser.h" |
| 9 | 9 |
| 10 namespace v8 { | 10 namespace v8 { |
| (...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 261 } else { | 261 } else { |
| 262 initialize = NULL; | 262 initialize = NULL; |
| 263 } | 263 } |
| 264 } | 264 } |
| 265 | 265 |
| 266 if (initialize != NULL) { | 266 if (initialize != NULL) { |
| 267 block_->statements()->Add( | 267 block_->statements()->Add( |
| 268 factory()->NewExpressionStatement(initialize, initialize->position()), | 268 factory()->NewExpressionStatement(initialize, initialize->position()), |
| 269 zone()); | 269 zone()); |
| 270 } | 270 } |
| 271 } else if (value != nullptr && (descriptor_->mode == CONST_LEGACY || | 271 } else if (value != nullptr && IsLexicalVariableMode(descriptor_->mode)) { |
| 272 IsLexicalVariableMode(descriptor_->mode))) { | 272 // For 'let' and 'const' declared variables the initialization always |
| 273 // Constant initializations always assign to the declared constant which | 273 // assigns to the declared variable. |
| 274 // is always at the function scope level. This is only relevant for | |
| 275 // dynamically looked-up variables and constants (the | |
| 276 // start context for constant lookups is always the function context, | |
| 277 // while it is the top context for var declared variables). Sigh... | |
| 278 // For 'let' and 'const' declared variables in harmony mode the | |
| 279 // initialization also always assigns to the declared variable. | |
| 280 DCHECK_NOT_NULL(proxy); | 274 DCHECK_NOT_NULL(proxy); |
| 281 DCHECK_NOT_NULL(proxy->var()); | 275 DCHECK_NOT_NULL(proxy->var()); |
| 282 DCHECK_NOT_NULL(value); | 276 DCHECK_NOT_NULL(value); |
| 283 // Add break location for destructured sub-pattern. | 277 // Add break location for destructured sub-pattern. |
| 284 int pos = IsSubPattern() ? pattern->position() : value->position(); | 278 int pos = IsSubPattern() ? pattern->position() : value->position(); |
| 285 Assignment* assignment = | 279 Assignment* assignment = |
| 286 factory()->NewAssignment(Token::INIT, proxy, value, pos); | 280 factory()->NewAssignment(Token::INIT, proxy, value, pos); |
| 287 block_->statements()->Add( | 281 block_->statements()->Add( |
| 288 factory()->NewExpressionStatement(assignment, pos), zone()); | 282 factory()->NewExpressionStatement(assignment, pos), zone()); |
| 289 value = NULL; | 283 value = NULL; |
| (...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 699 NOT_A_PATTERN(TryFinallyStatement) | 693 NOT_A_PATTERN(TryFinallyStatement) |
| 700 NOT_A_PATTERN(UnaryOperation) | 694 NOT_A_PATTERN(UnaryOperation) |
| 701 NOT_A_PATTERN(VariableDeclaration) | 695 NOT_A_PATTERN(VariableDeclaration) |
| 702 NOT_A_PATTERN(WhileStatement) | 696 NOT_A_PATTERN(WhileStatement) |
| 703 NOT_A_PATTERN(WithStatement) | 697 NOT_A_PATTERN(WithStatement) |
| 704 NOT_A_PATTERN(Yield) | 698 NOT_A_PATTERN(Yield) |
| 705 | 699 |
| 706 #undef NOT_A_PATTERN | 700 #undef NOT_A_PATTERN |
| 707 } // namespace internal | 701 } // namespace internal |
| 708 } // namespace v8 | 702 } // namespace v8 |
| OLD | NEW |