| Index: src/parsing/pattern-rewriter.cc
|
| diff --git a/src/parsing/pattern-rewriter.cc b/src/parsing/pattern-rewriter.cc
|
| index 02d6de513fe9ce5ec8cd8f0895d4358af88a45ea..2a194ee14b32d9145bddd82f26285ab86ad81241 100644
|
| --- a/src/parsing/pattern-rewriter.cc
|
| +++ b/src/parsing/pattern-rewriter.cc
|
| @@ -230,22 +230,20 @@ void Parser::PatternRewriter::VisitVariableProxy(VariableProxy* pattern) {
|
|
|
| if (IsImmutableVariableMode(descriptor_->mode)) {
|
| arguments->Add(value, zone());
|
| - value = NULL; // zap the value to avoid the unnecessary assignment
|
| -
|
| // Construct the call to Runtime_InitializeConstGlobal
|
| // and add it to the initialization statement block.
|
| // Note that the function does different things depending on
|
| // the number of arguments (1 or 2).
|
| - initialize =
|
| - factory()->NewCallRuntime(Runtime::kInitializeConstGlobal, arguments,
|
| - descriptor_->initialization_pos);
|
| + initialize = factory()->NewCallRuntime(Runtime::kInitializeConstGlobal,
|
| + arguments, value->position());
|
| + value = NULL; // zap the value to avoid the unnecessary assignment
|
| } else {
|
| // Add language mode.
|
| // We may want to pass singleton to avoid Literal allocations.
|
| LanguageMode language_mode = initialization_scope->language_mode();
|
| - arguments->Add(factory()->NewNumberLiteral(language_mode,
|
| - descriptor_->declaration_pos),
|
| - zone());
|
| + arguments->Add(
|
| + factory()->NewNumberLiteral(language_mode, RelocInfo::kNoPosition),
|
| + zone());
|
|
|
| // Be careful not to assign a value to the global variable if
|
| // we're in a with. The initialization value should not
|
| @@ -253,12 +251,11 @@ void Parser::PatternRewriter::VisitVariableProxy(VariableProxy* pattern) {
|
| // which is why we need to generate a separate assignment node.
|
| if (value != NULL && !descriptor_->scope->inside_with()) {
|
| arguments->Add(value, zone());
|
| - value = NULL; // zap the value to avoid the unnecessary assignment
|
| // Construct the call to Runtime_InitializeVarGlobal
|
| // and add it to the initialization statement block.
|
| - initialize =
|
| - factory()->NewCallRuntime(Runtime::kInitializeVarGlobal, arguments,
|
| - descriptor_->declaration_pos);
|
| + initialize = factory()->NewCallRuntime(Runtime::kInitializeVarGlobal,
|
| + arguments, value->position());
|
| + value = NULL; // zap the value to avoid the unnecessary assignment
|
| } else {
|
| initialize = NULL;
|
| }
|
| @@ -282,8 +279,7 @@ void Parser::PatternRewriter::VisitVariableProxy(VariableProxy* pattern) {
|
| DCHECK_NOT_NULL(proxy->var());
|
| DCHECK_NOT_NULL(value);
|
| // Add break location for destructured sub-pattern.
|
| - int pos =
|
| - IsSubPattern() ? pattern->position() : descriptor_->initialization_pos;
|
| + int pos = IsSubPattern() ? pattern->position() : value->position();
|
| Assignment* assignment =
|
| factory()->NewAssignment(Token::INIT, proxy, value, pos);
|
| block_->statements()->Add(
|
| @@ -300,8 +296,7 @@ void Parser::PatternRewriter::VisitVariableProxy(VariableProxy* pattern) {
|
| // property).
|
| VariableProxy* proxy = initialization_scope->NewUnresolved(factory(), name);
|
| // Add break location for destructured sub-pattern.
|
| - int pos =
|
| - IsSubPattern() ? pattern->position() : descriptor_->initialization_pos;
|
| + int pos = IsSubPattern() ? pattern->position() : value->position();
|
| Assignment* assignment =
|
| factory()->NewAssignment(Token::INIT, proxy, value, pos);
|
| block_->statements()->Add(
|
|
|