| 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 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 158 if (consume_cached_parse_data()) { | 158 if (consume_cached_parse_data()) { |
| 159 if (allow_lazy_) { | 159 if (allow_lazy_) { |
| 160 cached_parse_data_ = ParseData::FromCachedData(*info->cached_data()); | 160 cached_parse_data_ = ParseData::FromCachedData(*info->cached_data()); |
| 161 if (cached_parse_data_ != nullptr) return; | 161 if (cached_parse_data_ != nullptr) return; |
| 162 } | 162 } |
| 163 compile_options_ = ScriptCompiler::kNoCompileOptions; | 163 compile_options_ = ScriptCompiler::kNoCompileOptions; |
| 164 } | 164 } |
| 165 } | 165 } |
| 166 | 166 |
| 167 FunctionLiteral* Parser::DefaultConstructor(const AstRawString* name, | 167 FunctionLiteral* Parser::DefaultConstructor(const AstRawString* name, |
| 168 bool call_super, | 168 bool call_super, int pos, |
| 169 int pos, int end_pos, | 169 int end_pos) { |
| 170 LanguageMode language_mode) { | |
| 171 int materialized_literal_count = -1; | 170 int materialized_literal_count = -1; |
| 172 int expected_property_count = -1; | 171 int expected_property_count = -1; |
| 173 const int parameter_count = 0; | 172 const int parameter_count = 0; |
| 174 if (name == nullptr) name = ast_value_factory()->empty_string(); | 173 if (name == nullptr) name = ast_value_factory()->empty_string(); |
| 175 | 174 |
| 176 FunctionKind kind = call_super ? FunctionKind::kDefaultSubclassConstructor | 175 FunctionKind kind = call_super ? FunctionKind::kDefaultSubclassConstructor |
| 177 : FunctionKind::kDefaultBaseConstructor; | 176 : FunctionKind::kDefaultBaseConstructor; |
| 178 DeclarationScope* function_scope = NewFunctionScope(kind); | 177 DeclarationScope* function_scope = NewFunctionScope(kind); |
| 179 SetLanguageMode(function_scope, | 178 SetLanguageMode(function_scope, STRICT); |
| 180 static_cast<LanguageMode>(language_mode | STRICT)); | |
| 181 // Set start and end position to the same value | 179 // Set start and end position to the same value |
| 182 function_scope->set_start_position(pos); | 180 function_scope->set_start_position(pos); |
| 183 function_scope->set_end_position(pos); | 181 function_scope->set_end_position(pos); |
| 184 ZoneList<Statement*>* body = NULL; | 182 ZoneList<Statement*>* body = NULL; |
| 185 | 183 |
| 186 { | 184 { |
| 187 FunctionState function_state(&function_state_, &scope_state_, | 185 FunctionState function_state(&function_state_, &scope_state_, |
| 188 function_scope); | 186 function_scope); |
| 189 | 187 |
| 190 body = new (zone()) ZoneList<Statement*>(call_super ? 2 : 1, zone()); | 188 body = new (zone()) ZoneList<Statement*>(call_super ? 2 : 1, zone()); |
| (...skipping 741 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 932 result = expression->AsFunctionLiteral(); | 930 result = expression->AsFunctionLiteral(); |
| 933 } else { | 931 } else { |
| 934 ok = false; | 932 ok = false; |
| 935 } | 933 } |
| 936 } | 934 } |
| 937 } | 935 } |
| 938 } else if (IsDefaultConstructor(kind)) { | 936 } else if (IsDefaultConstructor(kind)) { |
| 939 DCHECK_EQ(scope(), outer); | 937 DCHECK_EQ(scope(), outer); |
| 940 bool is_subclass_constructor = IsSubclassConstructor(kind); | 938 bool is_subclass_constructor = IsSubclassConstructor(kind); |
| 941 result = DefaultConstructor(raw_name, is_subclass_constructor, | 939 result = DefaultConstructor(raw_name, is_subclass_constructor, |
| 942 info->start_position(), info->end_position(), | 940 info->start_position(), info->end_position()); |
| 943 info->language_mode()); | |
| 944 } else { | 941 } else { |
| 945 result = ParseFunctionLiteral( | 942 result = ParseFunctionLiteral( |
| 946 raw_name, Scanner::Location::invalid(), kSkipFunctionNameCheck, kind, | 943 raw_name, Scanner::Location::invalid(), kSkipFunctionNameCheck, kind, |
| 947 kNoSourcePosition, function_type, info->language_mode(), &ok); | 944 kNoSourcePosition, function_type, info->language_mode(), &ok); |
| 948 } | 945 } |
| 949 // Make sure the results agree. | 946 // Make sure the results agree. |
| 950 DCHECK(ok == (result != nullptr)); | 947 DCHECK(ok == (result != nullptr)); |
| 951 } | 948 } |
| 952 | 949 |
| 953 // Make sure the target stack is empty. | 950 // Make sure the target stack is empty. |
| (...skipping 2373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3327 ClassInfo* class_info, int pos, | 3324 ClassInfo* class_info, int pos, |
| 3328 bool* ok) { | 3325 bool* ok) { |
| 3329 int end_pos = scanner()->location().end_pos; | 3326 int end_pos = scanner()->location().end_pos; |
| 3330 Block* do_block = factory()->NewBlock(nullptr, 1, false, pos); | 3327 Block* do_block = factory()->NewBlock(nullptr, 1, false, pos); |
| 3331 Variable* result_var = NewTemporary(ast_value_factory()->empty_string()); | 3328 Variable* result_var = NewTemporary(ast_value_factory()->empty_string()); |
| 3332 DoExpression* do_expr = factory()->NewDoExpression(do_block, result_var, pos); | 3329 DoExpression* do_expr = factory()->NewDoExpression(do_block, result_var, pos); |
| 3333 | 3330 |
| 3334 bool has_extends = class_info->extends != nullptr; | 3331 bool has_extends = class_info->extends != nullptr; |
| 3335 bool has_default_constructor = class_info->constructor == nullptr; | 3332 bool has_default_constructor = class_info->constructor == nullptr; |
| 3336 if (has_default_constructor) { | 3333 if (has_default_constructor) { |
| 3337 class_info->constructor = DefaultConstructor( | 3334 class_info->constructor = |
| 3338 name, has_extends, pos, end_pos, scope()->language_mode()); | 3335 DefaultConstructor(name, has_extends, pos, end_pos); |
| 3339 } | 3336 } |
| 3340 | 3337 |
| 3341 scope()->set_end_position(end_pos); | 3338 scope()->set_end_position(end_pos); |
| 3342 | 3339 |
| 3343 if (name != nullptr) { | 3340 if (name != nullptr) { |
| 3344 DCHECK_NOT_NULL(class_info->proxy); | 3341 DCHECK_NOT_NULL(class_info->proxy); |
| 3345 class_info->proxy->var()->set_initializer_position(end_pos); | 3342 class_info->proxy->var()->set_initializer_position(end_pos); |
| 3346 } | 3343 } |
| 3347 | 3344 |
| 3348 ClassLiteral* class_literal = factory()->NewClassLiteral( | 3345 ClassLiteral* class_literal = factory()->NewClassLiteral( |
| (...skipping 1785 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5134 | 5131 |
| 5135 return final_loop; | 5132 return final_loop; |
| 5136 } | 5133 } |
| 5137 | 5134 |
| 5138 #undef CHECK_OK | 5135 #undef CHECK_OK |
| 5139 #undef CHECK_OK_VOID | 5136 #undef CHECK_OK_VOID |
| 5140 #undef CHECK_FAILED | 5137 #undef CHECK_FAILED |
| 5141 | 5138 |
| 5142 } // namespace internal | 5139 } // namespace internal |
| 5143 } // namespace v8 | 5140 } // namespace v8 |
| OLD | NEW |