| 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 5116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5127 continue; | 5127 continue; |
| 5128 } | 5128 } |
| 5129 } | 5129 } |
| 5130 | 5130 |
| 5131 bool var_created = false; | 5131 bool var_created = false; |
| 5132 | 5132 |
| 5133 // Write in assignments to var for each block-scoped function declaration | 5133 // Write in assignments to var for each block-scoped function declaration |
| 5134 auto delegates = static_cast<SloppyBlockFunctionMap::Vector*>(p->value); | 5134 auto delegates = static_cast<SloppyBlockFunctionMap::Vector*>(p->value); |
| 5135 for (SloppyBlockFunctionStatement* delegate : *delegates) { | 5135 for (SloppyBlockFunctionStatement* delegate : *delegates) { |
| 5136 // Check if there's a conflict with a lexical declaration | 5136 // Check if there's a conflict with a lexical declaration |
| 5137 Scope* outer_scope = scope->outer_scope(); | 5137 Scope* decl_scope = scope; |
| 5138 while (decl_scope->is_eval_scope()) { |
| 5139 decl_scope = decl_scope->outer_scope()->DeclarationScope(); |
| 5140 } |
| 5141 Scope* outer_scope = decl_scope->outer_scope(); |
| 5138 Scope* query_scope = delegate->scope()->outer_scope(); | 5142 Scope* query_scope = delegate->scope()->outer_scope(); |
| 5139 Variable* var = nullptr; | 5143 Variable* var = nullptr; |
| 5140 bool should_hoist = true; | 5144 bool should_hoist = true; |
| 5141 | 5145 |
| 5142 // Note that we perform this loop for each delegate named 'name', | 5146 // Note that we perform this loop for each delegate named 'name', |
| 5143 // which may duplicate work if those delegates share scopes. | 5147 // which may duplicate work if those delegates share scopes. |
| 5144 // It is not sufficient to just do a Lookup on query_scope: for | 5148 // It is not sufficient to just do a Lookup on query_scope: for |
| 5145 // example, that does not prevent hoisting of the function in | 5149 // example, that does not prevent hoisting of the function in |
| 5146 // `{ let e; try {} catch (e) { function e(){} } }` | 5150 // `{ let e; try {} catch (e) { function e(){} } }` |
| 5147 do { | 5151 do { |
| (...skipping 1870 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7018 try_block, target); | 7022 try_block, target); |
| 7019 final_loop = target; | 7023 final_loop = target; |
| 7020 } | 7024 } |
| 7021 | 7025 |
| 7022 return final_loop; | 7026 return final_loop; |
| 7023 } | 7027 } |
| 7024 | 7028 |
| 7025 | 7029 |
| 7026 } // namespace internal | 7030 } // namespace internal |
| 7027 } // namespace v8 | 7031 } // namespace v8 |
| OLD | NEW |