| 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/v8.h" | 5 #include "src/v8.h" |
| 6 | 6 |
| 7 #include "src/api.h" | 7 #include "src/api.h" |
| 8 #include "src/ast.h" | 8 #include "src/ast.h" |
| 9 #include "src/bailout-reason.h" | 9 #include "src/bailout-reason.h" |
| 10 #include "src/base/platform/platform.h" | 10 #include "src/base/platform/platform.h" |
| (...skipping 2181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2192 is_strict_reserved, pos, CHECK_OK); | 2192 is_strict_reserved, pos, CHECK_OK); |
| 2193 | 2193 |
| 2194 VariableMode mode = is_strong(language_mode()) ? CONST : LET; | 2194 VariableMode mode = is_strong(language_mode()) ? CONST : LET; |
| 2195 VariableProxy* proxy = NewUnresolved(name, mode); | 2195 VariableProxy* proxy = NewUnresolved(name, mode); |
| 2196 const bool is_class_declaration = true; | 2196 const bool is_class_declaration = true; |
| 2197 Declaration* declaration = factory()->NewVariableDeclaration( | 2197 Declaration* declaration = factory()->NewVariableDeclaration( |
| 2198 proxy, mode, scope_, pos, is_class_declaration, | 2198 proxy, mode, scope_, pos, is_class_declaration, |
| 2199 scope_->class_declaration_group_start()); | 2199 scope_->class_declaration_group_start()); |
| 2200 Variable* outer_class_variable = Declare(declaration, true, CHECK_OK); | 2200 Variable* outer_class_variable = Declare(declaration, true, CHECK_OK); |
| 2201 proxy->var()->set_initializer_position(position()); | 2201 proxy->var()->set_initializer_position(position()); |
| 2202 // This is needed because a class ("class Name { }") creates two bindings (one |
| 2203 // in the outer scope, and one in the class scope). The method is a function |
| 2204 // scope inside the inner scope (class scope). The consecutive class |
| 2205 // declarations are in the outer scope. |
| 2202 if (value->class_variable_proxy() && value->class_variable_proxy()->var() && | 2206 if (value->class_variable_proxy() && value->class_variable_proxy()->var() && |
| 2203 outer_class_variable->is_class()) { | 2207 outer_class_variable->is_class()) { |
| 2204 // In some cases, the outer variable is not detected as a class variable; | 2208 // In some cases, the outer variable is not detected as a class variable; |
| 2205 // this happens e.g., for lazy methods. They are excluded from strong mode | 2209 // this happens e.g., for lazy methods. They are excluded from strong mode |
| 2206 // checks for now. TODO(marja, rossberg): re-create variables with the | 2210 // checks for now. TODO(marja, rossberg): re-create variables with the |
| 2207 // correct Kind and remove this hack. | 2211 // correct Kind and remove this hack. |
| 2208 value->class_variable_proxy() | 2212 value->class_variable_proxy() |
| 2209 ->var() | 2213 ->var() |
| 2210 ->AsClassVariable() | 2214 ->AsClassVariable() |
| 2211 ->set_corresponding_outer_class_variable( | 2215 ->set_declaration_group_start( |
| 2212 outer_class_variable->AsClassVariable()); | 2216 outer_class_variable->AsClassVariable()->declaration_group_start()); |
| 2213 } | 2217 } |
| 2214 | 2218 |
| 2215 Token::Value init_op = | 2219 Token::Value init_op = |
| 2216 is_strong(language_mode()) ? Token::INIT_CONST : Token::INIT_LET; | 2220 is_strong(language_mode()) ? Token::INIT_CONST : Token::INIT_LET; |
| 2217 Assignment* assignment = factory()->NewAssignment(init_op, proxy, value, pos); | 2221 Assignment* assignment = factory()->NewAssignment(init_op, proxy, value, pos); |
| 2218 Statement* assignment_statement = | 2222 Statement* assignment_statement = |
| 2219 factory()->NewExpressionStatement(assignment, RelocInfo::kNoPosition); | 2223 factory()->NewExpressionStatement(assignment, RelocInfo::kNoPosition); |
| 2220 if (names) names->Add(name, zone()); | 2224 if (names) names->Add(name, zone()); |
| 2221 return assignment_statement; | 2225 return assignment_statement; |
| 2222 } | 2226 } |
| (...skipping 3609 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5832 | 5836 |
| 5833 Expression* Parser::SpreadCallNew(Expression* function, | 5837 Expression* Parser::SpreadCallNew(Expression* function, |
| 5834 ZoneList<v8::internal::Expression*>* args, | 5838 ZoneList<v8::internal::Expression*>* args, |
| 5835 int pos) { | 5839 int pos) { |
| 5836 args->InsertAt(0, function, zone()); | 5840 args->InsertAt(0, function, zone()); |
| 5837 | 5841 |
| 5838 return factory()->NewCallRuntime( | 5842 return factory()->NewCallRuntime( |
| 5839 ast_value_factory()->reflect_construct_string(), NULL, args, pos); | 5843 ast_value_factory()->reflect_construct_string(), NULL, args, pos); |
| 5840 } | 5844 } |
| 5841 } } // namespace v8::internal | 5845 } } // namespace v8::internal |
| OLD | NEW |