Chromium Code Reviews| 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/rewriter.h" | 5 #include "src/parsing/rewriter.h" |
| 6 | 6 |
| 7 #include "src/ast/ast.h" | 7 #include "src/ast/ast.h" |
| 8 #include "src/ast/scopes.h" | 8 #include "src/ast/scopes.h" |
| 9 #include "src/parsing/parse-info.h" | 9 #include "src/parsing/parse-info.h" |
| 10 #include "src/parsing/parser.h" | 10 #include "src/parsing/parser.h" |
| (...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 340 Scope* scope = function->scope(); | 340 Scope* scope = function->scope(); |
| 341 DCHECK_NOT_NULL(scope); | 341 DCHECK_NOT_NULL(scope); |
| 342 if (!scope->is_script_scope() && !scope->is_eval_scope()) return true; | 342 if (!scope->is_script_scope() && !scope->is_eval_scope()) return true; |
| 343 DeclarationScope* closure_scope = scope->GetClosureScope(); | 343 DeclarationScope* closure_scope = scope->GetClosureScope(); |
| 344 | 344 |
| 345 ZoneList<Statement*>* body = function->body(); | 345 ZoneList<Statement*>* body = function->body(); |
| 346 if (!body->is_empty()) { | 346 if (!body->is_empty()) { |
| 347 Variable* result = closure_scope->NewTemporary( | 347 Variable* result = closure_scope->NewTemporary( |
| 348 info->ast_value_factory()->dot_result_string()); | 348 info->ast_value_factory()->dot_result_string()); |
| 349 // The name string must be internalized at this point. | 349 // The name string must be internalized at this point. |
| 350 info->ast_value_factory()->Internalize(info->isolate()); | |
|
marja
2016/09/12 07:21:48
Is this needed? Isn't the name internalized at thi
rmcilroy
2016/09/20 08:50:46
Yeah this is needed. The "dot_result_string" needs
| |
| 350 DCHECK(!result->name().is_null()); | 351 DCHECK(!result->name().is_null()); |
| 351 Processor processor(info->isolate(), closure_scope, result, | 352 Processor processor(info->isolate(), closure_scope, result, |
| 352 info->ast_value_factory()); | 353 info->ast_value_factory()); |
| 353 processor.Process(body); | 354 processor.Process(body); |
| 355 // Internalize any values created during rewriting. | |
| 356 info->ast_value_factory()->Internalize(info->isolate()); | |
| 354 if (processor.HasStackOverflow()) return false; | 357 if (processor.HasStackOverflow()) return false; |
| 355 | 358 |
| 356 if (processor.result_assigned()) { | 359 if (processor.result_assigned()) { |
| 357 int pos = kNoSourcePosition; | 360 int pos = kNoSourcePosition; |
| 358 VariableProxy* result_proxy = | 361 VariableProxy* result_proxy = |
| 359 processor.factory()->NewVariableProxy(result, pos); | 362 processor.factory()->NewVariableProxy(result, pos); |
| 360 Statement* result_statement = | 363 Statement* result_statement = |
| 361 processor.factory()->NewReturnStatement(result_proxy, pos); | 364 processor.factory()->NewReturnStatement(result_proxy, pos); |
| 362 body->Add(result_statement, info->zone()); | 365 body->Add(result_statement, info->zone()); |
| 363 } | 366 } |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 388 processor.SetResult(undef), expr->position()); | 391 processor.SetResult(undef), expr->position()); |
| 389 body->Add(completion, factory->zone()); | 392 body->Add(completion, factory->zone()); |
| 390 } | 393 } |
| 391 } | 394 } |
| 392 return true; | 395 return true; |
| 393 } | 396 } |
| 394 | 397 |
| 395 | 398 |
| 396 } // namespace internal | 399 } // namespace internal |
| 397 } // namespace v8 | 400 } // namespace v8 |
| OLD | NEW |