| 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 389 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 400 | 400 |
| 401 | 401 |
| 402 bool ParserTraits::IsConstructor(const AstRawString* identifier) const { | 402 bool ParserTraits::IsConstructor(const AstRawString* identifier) const { |
| 403 return identifier == parser_->ast_value_factory()->constructor_string(); | 403 return identifier == parser_->ast_value_factory()->constructor_string(); |
| 404 } | 404 } |
| 405 | 405 |
| 406 | 406 |
| 407 bool ParserTraits::IsThisProperty(Expression* expression) { | 407 bool ParserTraits::IsThisProperty(Expression* expression) { |
| 408 DCHECK(expression != NULL); | 408 DCHECK(expression != NULL); |
| 409 Property* property = expression->AsProperty(); | 409 Property* property = expression->AsProperty(); |
| 410 return property != NULL && | 410 return property != NULL && property->obj()->IsVariableProxy() && |
| 411 property->obj()->AsVariableProxy() != NULL && | 411 property->obj()->AsVariableProxy()->is_this(); |
| 412 property->obj()->AsVariableProxy()->is_this(); | |
| 413 } | 412 } |
| 414 | 413 |
| 415 | 414 |
| 416 bool ParserTraits::IsIdentifier(Expression* expression) { | 415 bool ParserTraits::IsIdentifier(Expression* expression) { |
| 417 VariableProxy* operand = expression->AsVariableProxy(); | 416 VariableProxy* operand = expression->AsVariableProxy(); |
| 418 return operand != NULL && !operand->is_this(); | 417 return operand != NULL && !operand->is_this(); |
| 419 } | 418 } |
| 420 | 419 |
| 421 | 420 |
| 422 void ParserTraits::PushPropertyName(FuncNameInferrer* fni, | 421 void ParserTraits::PushPropertyName(FuncNameInferrer* fni, |
| 423 Expression* expression) { | 422 Expression* expression) { |
| 424 if (expression->IsPropertyName()) { | 423 if (expression->IsPropertyName()) { |
| 425 fni->PushLiteralName(expression->AsLiteral()->AsRawPropertyName()); | 424 fni->PushLiteralName(expression->AsLiteral()->AsRawPropertyName()); |
| 426 } else { | 425 } else { |
| 427 fni->PushLiteralName( | 426 fni->PushLiteralName( |
| 428 parser_->ast_value_factory()->anonymous_function_string()); | 427 parser_->ast_value_factory()->anonymous_function_string()); |
| 429 } | 428 } |
| 430 } | 429 } |
| 431 | 430 |
| 432 | 431 |
| 433 void ParserTraits::CheckAssigningFunctionLiteralToProperty(Expression* left, | 432 void ParserTraits::CheckAssigningFunctionLiteralToProperty(Expression* left, |
| 434 Expression* right) { | 433 Expression* right) { |
| 435 DCHECK(left != NULL); | 434 DCHECK(left != NULL); |
| 436 if (left->AsProperty() != NULL && | 435 if (left->IsProperty() && right->IsFunctionLiteral()) { |
| 437 right->AsFunctionLiteral() != NULL) { | |
| 438 right->AsFunctionLiteral()->set_pretenure(); | 436 right->AsFunctionLiteral()->set_pretenure(); |
| 439 } | 437 } |
| 440 } | 438 } |
| 441 | 439 |
| 442 | 440 |
| 443 void ParserTraits::CheckPossibleEvalCall(Expression* expression, | 441 void ParserTraits::CheckPossibleEvalCall(Expression* expression, |
| 444 Scope* scope) { | 442 Scope* scope) { |
| 445 VariableProxy* callee = expression->AsVariableProxy(); | 443 VariableProxy* callee = expression->AsVariableProxy(); |
| 446 if (callee != NULL && | 444 if (callee != NULL && |
| 447 callee->raw_name() == parser_->ast_value_factory()->eval_string()) { | 445 callee->raw_name() == parser_->ast_value_factory()->eval_string()) { |
| (...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 799 set_allow_natives(FLAG_allow_natives_syntax || info->is_native()); | 797 set_allow_natives(FLAG_allow_natives_syntax || info->is_native()); |
| 800 set_allow_harmony_scoping(!info->is_native() && FLAG_harmony_scoping); | 798 set_allow_harmony_scoping(!info->is_native() && FLAG_harmony_scoping); |
| 801 set_allow_harmony_modules(!info->is_native() && FLAG_harmony_modules); | 799 set_allow_harmony_modules(!info->is_native() && FLAG_harmony_modules); |
| 802 set_allow_harmony_arrow_functions(FLAG_harmony_arrow_functions); | 800 set_allow_harmony_arrow_functions(FLAG_harmony_arrow_functions); |
| 803 set_allow_harmony_numeric_literals(FLAG_harmony_numeric_literals); | 801 set_allow_harmony_numeric_literals(FLAG_harmony_numeric_literals); |
| 804 set_allow_harmony_classes(FLAG_harmony_classes); | 802 set_allow_harmony_classes(FLAG_harmony_classes); |
| 805 set_allow_harmony_object_literals(FLAG_harmony_object_literals); | 803 set_allow_harmony_object_literals(FLAG_harmony_object_literals); |
| 806 set_allow_harmony_templates(FLAG_harmony_templates); | 804 set_allow_harmony_templates(FLAG_harmony_templates); |
| 807 set_allow_harmony_sloppy(FLAG_harmony_sloppy); | 805 set_allow_harmony_sloppy(FLAG_harmony_sloppy); |
| 808 set_allow_harmony_unicode(FLAG_harmony_unicode); | 806 set_allow_harmony_unicode(FLAG_harmony_unicode); |
| 807 set_allow_harmony_computed_property_names( |
| 808 FLAG_harmony_computed_property_names); |
| 809 for (int feature = 0; feature < v8::Isolate::kUseCounterFeatureCount; | 809 for (int feature = 0; feature < v8::Isolate::kUseCounterFeatureCount; |
| 810 ++feature) { | 810 ++feature) { |
| 811 use_counts_[feature] = 0; | 811 use_counts_[feature] = 0; |
| 812 } | 812 } |
| 813 if (info->ast_value_factory() == NULL) { | 813 if (info->ast_value_factory() == NULL) { |
| 814 // info takes ownership of AstValueFactory. | 814 // info takes ownership of AstValueFactory. |
| 815 info->SetAstValueFactory( | 815 info->SetAstValueFactory( |
| 816 new AstValueFactory(zone(), parse_info->hash_seed)); | 816 new AstValueFactory(zone(), parse_info->hash_seed)); |
| 817 } | 817 } |
| 818 } | 818 } |
| (...skipping 3150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3969 reusable_preparser_->set_allow_harmony_arrow_functions( | 3969 reusable_preparser_->set_allow_harmony_arrow_functions( |
| 3970 allow_harmony_arrow_functions()); | 3970 allow_harmony_arrow_functions()); |
| 3971 reusable_preparser_->set_allow_harmony_numeric_literals( | 3971 reusable_preparser_->set_allow_harmony_numeric_literals( |
| 3972 allow_harmony_numeric_literals()); | 3972 allow_harmony_numeric_literals()); |
| 3973 reusable_preparser_->set_allow_harmony_classes(allow_harmony_classes()); | 3973 reusable_preparser_->set_allow_harmony_classes(allow_harmony_classes()); |
| 3974 reusable_preparser_->set_allow_harmony_object_literals( | 3974 reusable_preparser_->set_allow_harmony_object_literals( |
| 3975 allow_harmony_object_literals()); | 3975 allow_harmony_object_literals()); |
| 3976 reusable_preparser_->set_allow_harmony_templates(allow_harmony_templates()); | 3976 reusable_preparser_->set_allow_harmony_templates(allow_harmony_templates()); |
| 3977 reusable_preparser_->set_allow_harmony_sloppy(allow_harmony_sloppy()); | 3977 reusable_preparser_->set_allow_harmony_sloppy(allow_harmony_sloppy()); |
| 3978 reusable_preparser_->set_allow_harmony_unicode(allow_harmony_unicode()); | 3978 reusable_preparser_->set_allow_harmony_unicode(allow_harmony_unicode()); |
| 3979 reusable_preparser_->set_allow_harmony_computed_property_names( |
| 3980 allow_harmony_computed_property_names()); |
| 3979 } | 3981 } |
| 3980 PreParser::PreParseResult result = | 3982 PreParser::PreParseResult result = |
| 3981 reusable_preparser_->PreParseLazyFunction(strict_mode(), | 3983 reusable_preparser_->PreParseLazyFunction(strict_mode(), |
| 3982 is_generator(), | 3984 is_generator(), |
| 3983 logger); | 3985 logger); |
| 3984 if (pre_parse_timer_ != NULL) { | 3986 if (pre_parse_timer_ != NULL) { |
| 3985 pre_parse_timer_->Stop(); | 3987 pre_parse_timer_->Stop(); |
| 3986 } | 3988 } |
| 3987 return result; | 3989 return result; |
| 3988 } | 3990 } |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4028 ZoneList<ObjectLiteral::Property*>* properties = NewPropertyList(4, zone()); | 4030 ZoneList<ObjectLiteral::Property*>* properties = NewPropertyList(4, zone()); |
| 4029 Expression* constructor = NULL; | 4031 Expression* constructor = NULL; |
| 4030 bool has_seen_constructor = false; | 4032 bool has_seen_constructor = false; |
| 4031 | 4033 |
| 4032 Expect(Token::LBRACE, CHECK_OK); | 4034 Expect(Token::LBRACE, CHECK_OK); |
| 4033 while (peek() != Token::RBRACE) { | 4035 while (peek() != Token::RBRACE) { |
| 4034 if (Check(Token::SEMICOLON)) continue; | 4036 if (Check(Token::SEMICOLON)) continue; |
| 4035 if (fni_ != NULL) fni_->Enter(); | 4037 if (fni_ != NULL) fni_->Enter(); |
| 4036 const bool in_class = true; | 4038 const bool in_class = true; |
| 4037 const bool is_static = false; | 4039 const bool is_static = false; |
| 4038 ObjectLiteral::Property* property = ParsePropertyDefinition( | 4040 bool is_computed_name = false; // Classes do not care about computed |
| 4039 NULL, in_class, is_static, &has_seen_constructor, CHECK_OK); | 4041 // property names here. |
| 4042 ObjectLiteral::Property* property = |
| 4043 ParsePropertyDefinition(NULL, in_class, is_static, &is_computed_name, |
| 4044 &has_seen_constructor, CHECK_OK); |
| 4040 | 4045 |
| 4041 if (has_seen_constructor && constructor == NULL) { | 4046 if (has_seen_constructor && constructor == NULL) { |
| 4042 constructor = GetPropertyValue(property); | 4047 constructor = GetPropertyValue(property); |
| 4043 } else { | 4048 } else { |
| 4044 properties->Add(property, zone()); | 4049 properties->Add(property, zone()); |
| 4045 } | 4050 } |
| 4046 | 4051 |
| 4047 if (fni_ != NULL) { | 4052 if (fni_ != NULL) { |
| 4048 fni_->Infer(); | 4053 fni_->Infer(); |
| 4049 fni_->Leave(); | 4054 fni_->Leave(); |
| (...skipping 1241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5291 } else { | 5296 } else { |
| 5292 const uc16* data = reinterpret_cast<const uc16*>(raw_string->raw_data()); | 5297 const uc16* data = reinterpret_cast<const uc16*>(raw_string->raw_data()); |
| 5293 running_hash = StringHasher::ComputeRunningHash(running_hash, data, | 5298 running_hash = StringHasher::ComputeRunningHash(running_hash, data, |
| 5294 raw_string->length()); | 5299 raw_string->length()); |
| 5295 } | 5300 } |
| 5296 } | 5301 } |
| 5297 | 5302 |
| 5298 return running_hash; | 5303 return running_hash; |
| 5299 } | 5304 } |
| 5300 } } // namespace v8::internal | 5305 } } // namespace v8::internal |
| OLD | NEW |