| 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 <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "src/api.h" | 9 #include "src/api.h" |
| 10 #include "src/ast/ast-expression-rewriter.h" | 10 #include "src/ast/ast-expression-rewriter.h" |
| (...skipping 1656 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1667 void Parser::RewriteCatchPattern(CatchInfo* catch_info, bool* ok) { | 1667 void Parser::RewriteCatchPattern(CatchInfo* catch_info, bool* ok) { |
| 1668 if (catch_info->name == nullptr) { | 1668 if (catch_info->name == nullptr) { |
| 1669 DCHECK_NOT_NULL(catch_info->pattern); | 1669 DCHECK_NOT_NULL(catch_info->pattern); |
| 1670 catch_info->name = ast_value_factory()->dot_catch_string(); | 1670 catch_info->name = ast_value_factory()->dot_catch_string(); |
| 1671 } | 1671 } |
| 1672 catch_info->variable = catch_info->scope->DeclareLocal(catch_info->name, VAR); | 1672 catch_info->variable = catch_info->scope->DeclareLocal(catch_info->name, VAR); |
| 1673 if (catch_info->pattern != nullptr) { | 1673 if (catch_info->pattern != nullptr) { |
| 1674 DeclarationDescriptor descriptor; | 1674 DeclarationDescriptor descriptor; |
| 1675 descriptor.declaration_kind = DeclarationDescriptor::NORMAL; | 1675 descriptor.declaration_kind = DeclarationDescriptor::NORMAL; |
| 1676 descriptor.scope = scope(); | 1676 descriptor.scope = scope(); |
| 1677 descriptor.hoist_scope = nullptr; | |
| 1678 descriptor.mode = LET; | 1677 descriptor.mode = LET; |
| 1679 descriptor.declaration_pos = catch_info->pattern->position(); | 1678 descriptor.declaration_pos = catch_info->pattern->position(); |
| 1680 descriptor.initialization_pos = catch_info->pattern->position(); | 1679 descriptor.initialization_pos = catch_info->pattern->position(); |
| 1681 | 1680 |
| 1682 // Initializer position for variables declared by the pattern. | 1681 // Initializer position for variables declared by the pattern. |
| 1683 const int initializer_position = position(); | 1682 const int initializer_position = position(); |
| 1684 | 1683 |
| 1685 DeclarationParsingResult::Declaration decl( | 1684 DeclarationParsingResult::Declaration decl( |
| 1686 catch_info->pattern, initializer_position, | 1685 catch_info->pattern, initializer_position, |
| 1687 factory()->NewVariableProxy(catch_info->variable)); | 1686 factory()->NewVariableProxy(catch_info->variable)); |
| (...skipping 1215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2903 const ParserFormalParameters& parameters, bool* ok) { | 2902 const ParserFormalParameters& parameters, bool* ok) { |
| 2904 DCHECK(!parameters.is_simple); | 2903 DCHECK(!parameters.is_simple); |
| 2905 DCHECK(scope()->is_function_scope()); | 2904 DCHECK(scope()->is_function_scope()); |
| 2906 Block* init_block = factory()->NewBlock(NULL, 1, true, kNoSourcePosition); | 2905 Block* init_block = factory()->NewBlock(NULL, 1, true, kNoSourcePosition); |
| 2907 int index = 0; | 2906 int index = 0; |
| 2908 for (auto parameter : parameters.params) { | 2907 for (auto parameter : parameters.params) { |
| 2909 if (parameter->is_rest && parameter->pattern->IsVariableProxy()) break; | 2908 if (parameter->is_rest && parameter->pattern->IsVariableProxy()) break; |
| 2910 DeclarationDescriptor descriptor; | 2909 DeclarationDescriptor descriptor; |
| 2911 descriptor.declaration_kind = DeclarationDescriptor::PARAMETER; | 2910 descriptor.declaration_kind = DeclarationDescriptor::PARAMETER; |
| 2912 descriptor.scope = scope(); | 2911 descriptor.scope = scope(); |
| 2913 descriptor.hoist_scope = nullptr; | |
| 2914 descriptor.mode = LET; | 2912 descriptor.mode = LET; |
| 2915 descriptor.declaration_pos = parameter->pattern->position(); | 2913 descriptor.declaration_pos = parameter->pattern->position(); |
| 2916 // The position that will be used by the AssignmentExpression | 2914 // The position that will be used by the AssignmentExpression |
| 2917 // which copies from the temp parameter to the pattern. | 2915 // which copies from the temp parameter to the pattern. |
| 2918 // | 2916 // |
| 2919 // TODO(adamk): Should this be kNoSourcePosition, since | 2917 // TODO(adamk): Should this be kNoSourcePosition, since |
| 2920 // it's just copying from a temp var to the real param var? | 2918 // it's just copying from a temp var to the real param var? |
| 2921 descriptor.initialization_pos = parameter->pattern->position(); | 2919 descriptor.initialization_pos = parameter->pattern->position(); |
| 2922 Expression* initial_value = | 2920 Expression* initial_value = |
| 2923 factory()->NewVariableProxy(parameters.scope->parameter(index)); | 2921 factory()->NewVariableProxy(parameters.scope->parameter(index)); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 2938 | 2936 |
| 2939 Scope* param_scope = scope(); | 2937 Scope* param_scope = scope(); |
| 2940 Block* param_block = init_block; | 2938 Block* param_block = init_block; |
| 2941 if (!parameter->is_simple() && scope()->calls_sloppy_eval()) { | 2939 if (!parameter->is_simple() && scope()->calls_sloppy_eval()) { |
| 2942 param_scope = NewVarblockScope(); | 2940 param_scope = NewVarblockScope(); |
| 2943 param_scope->set_start_position(descriptor.initialization_pos); | 2941 param_scope->set_start_position(descriptor.initialization_pos); |
| 2944 param_scope->set_end_position(parameter->initializer_end_position); | 2942 param_scope->set_end_position(parameter->initializer_end_position); |
| 2945 param_scope->RecordEvalCall(); | 2943 param_scope->RecordEvalCall(); |
| 2946 param_block = factory()->NewBlock(NULL, 8, true, kNoSourcePosition); | 2944 param_block = factory()->NewBlock(NULL, 8, true, kNoSourcePosition); |
| 2947 param_block->set_scope(param_scope); | 2945 param_block->set_scope(param_scope); |
| 2948 descriptor.hoist_scope = scope(); | |
| 2949 // Pass the appropriate scope in so that PatternRewriter can appropriately | 2946 // Pass the appropriate scope in so that PatternRewriter can appropriately |
| 2950 // rewrite inner initializers of the pattern to param_scope | 2947 // rewrite inner initializers of the pattern to param_scope |
| 2951 descriptor.scope = param_scope; | 2948 descriptor.scope = param_scope; |
| 2952 // Rewrite the outer initializer to point to param_scope | 2949 // Rewrite the outer initializer to point to param_scope |
| 2953 ReparentParameterExpressionScope(stack_limit(), initial_value, | 2950 ReparentParameterExpressionScope(stack_limit(), initial_value, |
| 2954 param_scope); | 2951 param_scope); |
| 2955 } | 2952 } |
| 2956 | 2953 |
| 2957 BlockState block_state(&scope_state_, param_scope); | 2954 BlockState block_state(&scope_state_, param_scope); |
| 2958 DeclarationParsingResult::Declaration decl( | 2955 DeclarationParsingResult::Declaration decl( |
| (...skipping 2062 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5021 | 5018 |
| 5022 return final_loop; | 5019 return final_loop; |
| 5023 } | 5020 } |
| 5024 | 5021 |
| 5025 #undef CHECK_OK | 5022 #undef CHECK_OK |
| 5026 #undef CHECK_OK_VOID | 5023 #undef CHECK_OK_VOID |
| 5027 #undef CHECK_FAILED | 5024 #undef CHECK_FAILED |
| 5028 | 5025 |
| 5029 } // namespace internal | 5026 } // namespace internal |
| 5030 } // namespace v8 | 5027 } // namespace v8 |
| OLD | NEW |