Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(204)

Side by Side Diff: src/preparser.h

Issue 1231343003: Scoping error caused crash in CallICNexus::StateFromFeedback (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix webkit tests. Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/parser.cc ('k') | src/preparser.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #ifndef V8_PREPARSER_H 5 #ifndef V8_PREPARSER_H
6 #define V8_PREPARSER_H 6 #define V8_PREPARSER_H
7 7
8 #include "src/v8.h" 8 #include "src/v8.h"
9 9
10 #include "src/bailout-reason.h" 10 #include "src/bailout-reason.h"
(...skipping 1609 matching lines...) Expand 10 before | Expand all | Expand 10 after
1620 ExpressionClassifier* classifier, bool is_rest) {} 1620 ExpressionClassifier* classifier, bool is_rest) {}
1621 1621
1622 void CheckConflictingVarDeclarations(Scope* scope, bool* ok) {} 1622 void CheckConflictingVarDeclarations(Scope* scope, bool* ok) {}
1623 1623
1624 // Temporary glue; these functions will move to ParserBase. 1624 // Temporary glue; these functions will move to ParserBase.
1625 PreParserExpression ParseV8Intrinsic(bool* ok); 1625 PreParserExpression ParseV8Intrinsic(bool* ok);
1626 PreParserExpression ParseFunctionLiteral( 1626 PreParserExpression ParseFunctionLiteral(
1627 PreParserIdentifier name, Scanner::Location function_name_location, 1627 PreParserIdentifier name, Scanner::Location function_name_location,
1628 FunctionNameValidity function_name_validity, FunctionKind kind, 1628 FunctionNameValidity function_name_validity, FunctionKind kind,
1629 int function_token_position, FunctionLiteral::FunctionType type, 1629 int function_token_position, FunctionLiteral::FunctionType type,
1630 FunctionLiteral::ArityRestriction arity_restriction, bool* ok); 1630 FunctionLiteral::ArityRestriction arity_restriction,
1631 LanguageMode language_mode, bool* ok);
1631 1632
1632 PreParserExpression ParseClassLiteral(PreParserIdentifier name, 1633 PreParserExpression ParseClassLiteral(PreParserIdentifier name,
1633 Scanner::Location class_name_location, 1634 Scanner::Location class_name_location,
1634 bool name_is_strict_reserved, int pos, 1635 bool name_is_strict_reserved, int pos,
1635 bool* ok); 1636 bool* ok);
1636 1637
1637 PreParserExpressionList PrepareSpreadArguments(PreParserExpressionList list) { 1638 PreParserExpressionList PrepareSpreadArguments(PreParserExpressionList list) {
1638 return list; 1639 return list;
1639 } 1640 }
1640 1641
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
1768 V8_INLINE PreParserStatementList 1769 V8_INLINE PreParserStatementList
1769 ParseEagerFunctionBody(PreParserIdentifier function_name, int pos, 1770 ParseEagerFunctionBody(PreParserIdentifier function_name, int pos,
1770 const FormalParameterParsingStateT& formal_parameters, 1771 const FormalParameterParsingStateT& formal_parameters,
1771 Variable* fvar, Token::Value fvar_init_op, 1772 Variable* fvar, Token::Value fvar_init_op,
1772 FunctionKind kind, bool* ok); 1773 FunctionKind kind, bool* ok);
1773 1774
1774 Expression ParseFunctionLiteral( 1775 Expression ParseFunctionLiteral(
1775 Identifier name, Scanner::Location function_name_location, 1776 Identifier name, Scanner::Location function_name_location,
1776 FunctionNameValidity function_name_validity, FunctionKind kind, 1777 FunctionNameValidity function_name_validity, FunctionKind kind,
1777 int function_token_pos, FunctionLiteral::FunctionType function_type, 1778 int function_token_pos, FunctionLiteral::FunctionType function_type,
1778 FunctionLiteral::ArityRestriction arity_restriction, bool* ok); 1779 FunctionLiteral::ArityRestriction arity_restriction,
1780 LanguageMode language_mode, bool* ok);
1779 void ParseLazyFunctionLiteralBody(bool* ok, 1781 void ParseLazyFunctionLiteralBody(bool* ok,
1780 Scanner::BookmarkScope* bookmark = nullptr); 1782 Scanner::BookmarkScope* bookmark = nullptr);
1781 1783
1782 PreParserExpression ParseClassLiteral(PreParserIdentifier name, 1784 PreParserExpression ParseClassLiteral(PreParserIdentifier name,
1783 Scanner::Location class_name_location, 1785 Scanner::Location class_name_location,
1784 bool name_is_strict_reserved, int pos, 1786 bool name_is_strict_reserved, int pos,
1785 bool* ok); 1787 bool* ok);
1786 }; 1788 };
1787 1789
1788 1790
(...skipping 754 matching lines...) Expand 10 before | Expand all | Expand 10 after
2543 *has_seen_constructor = true; 2545 *has_seen_constructor = true;
2544 kind = has_extends ? FunctionKind::kSubclassConstructor 2546 kind = has_extends ? FunctionKind::kSubclassConstructor
2545 : FunctionKind::kBaseConstructor; 2547 : FunctionKind::kBaseConstructor;
2546 } 2548 }
2547 2549
2548 if (!in_class) kind = WithObjectLiteralBit(kind); 2550 if (!in_class) kind = WithObjectLiteralBit(kind);
2549 2551
2550 value = this->ParseFunctionLiteral( 2552 value = this->ParseFunctionLiteral(
2551 name, scanner()->location(), kSkipFunctionNameCheck, kind, 2553 name, scanner()->location(), kSkipFunctionNameCheck, kind,
2552 RelocInfo::kNoPosition, FunctionLiteral::ANONYMOUS_EXPRESSION, 2554 RelocInfo::kNoPosition, FunctionLiteral::ANONYMOUS_EXPRESSION,
2553 FunctionLiteral::NORMAL_ARITY, 2555 FunctionLiteral::NORMAL_ARITY, language_mode(),
2554 CHECK_OK_CUSTOM(EmptyObjectLiteralProperty)); 2556 CHECK_OK_CUSTOM(EmptyObjectLiteralProperty));
2555 2557
2556 return factory()->NewObjectLiteralProperty(name_expression, value, 2558 return factory()->NewObjectLiteralProperty(name_expression, value,
2557 ObjectLiteralProperty::COMPUTED, 2559 ObjectLiteralProperty::COMPUTED,
2558 is_static, *is_computed_name); 2560 is_static, *is_computed_name);
2559 2561
2560 } else if (in_class && name_is_static && !is_static) { 2562 } else if (in_class && name_is_static && !is_static) {
2561 // static MethodDefinition 2563 // static MethodDefinition
2562 return ParsePropertyDefinition(checker, true, has_extends, true, 2564 return ParsePropertyDefinition(checker, true, has_extends, true,
2563 is_computed_name, nullptr, classifier, ok); 2565 is_computed_name, nullptr, classifier, ok);
(...skipping 12 matching lines...) Expand all
2576 is_generator, 2578 is_generator,
2577 CHECK_OK_CUSTOM(EmptyObjectLiteralProperty)); 2579 CHECK_OK_CUSTOM(EmptyObjectLiteralProperty));
2578 } 2580 }
2579 2581
2580 FunctionKind kind = FunctionKind::kAccessorFunction; 2582 FunctionKind kind = FunctionKind::kAccessorFunction;
2581 if (!in_class) kind = WithObjectLiteralBit(kind); 2583 if (!in_class) kind = WithObjectLiteralBit(kind);
2582 typename Traits::Type::FunctionLiteral value = this->ParseFunctionLiteral( 2584 typename Traits::Type::FunctionLiteral value = this->ParseFunctionLiteral(
2583 name, scanner()->location(), kSkipFunctionNameCheck, kind, 2585 name, scanner()->location(), kSkipFunctionNameCheck, kind,
2584 RelocInfo::kNoPosition, FunctionLiteral::ANONYMOUS_EXPRESSION, 2586 RelocInfo::kNoPosition, FunctionLiteral::ANONYMOUS_EXPRESSION,
2585 is_get ? FunctionLiteral::GETTER_ARITY : FunctionLiteral::SETTER_ARITY, 2587 is_get ? FunctionLiteral::GETTER_ARITY : FunctionLiteral::SETTER_ARITY,
2586 CHECK_OK_CUSTOM(EmptyObjectLiteralProperty)); 2588 language_mode(), CHECK_OK_CUSTOM(EmptyObjectLiteralProperty));
2587 2589
2588 // Make sure the name expression is a string since we need a Name for 2590 // Make sure the name expression is a string since we need a Name for
2589 // Runtime_DefineAccessorPropertyUnchecked and since we can determine this 2591 // Runtime_DefineAccessorPropertyUnchecked and since we can determine this
2590 // statically we can skip the extra runtime check. 2592 // statically we can skip the extra runtime check.
2591 if (!*is_computed_name) { 2593 if (!*is_computed_name) {
2592 name_expression = 2594 name_expression =
2593 factory()->NewStringLiteral(name, name_expression->position()); 2595 factory()->NewStringLiteral(name, name_expression->position());
2594 } 2596 }
2595 2597
2596 return factory()->NewObjectLiteralProperty( 2598 return factory()->NewObjectLiteralProperty(
(...skipping 698 matching lines...) Expand 10 before | Expand all | Expand 10 after
3295 function_name_location = scanner()->location(); 3297 function_name_location = scanner()->location();
3296 function_type = FunctionLiteral::NAMED_EXPRESSION; 3298 function_type = FunctionLiteral::NAMED_EXPRESSION;
3297 } 3299 }
3298 result = this->ParseFunctionLiteral( 3300 result = this->ParseFunctionLiteral(
3299 name, function_name_location, 3301 name, function_name_location,
3300 is_strict_reserved_name ? kFunctionNameIsStrictReserved 3302 is_strict_reserved_name ? kFunctionNameIsStrictReserved
3301 : kFunctionNameValidityUnknown, 3303 : kFunctionNameValidityUnknown,
3302 is_generator ? FunctionKind::kGeneratorFunction 3304 is_generator ? FunctionKind::kGeneratorFunction
3303 : FunctionKind::kNormalFunction, 3305 : FunctionKind::kNormalFunction,
3304 function_token_position, function_type, FunctionLiteral::NORMAL_ARITY, 3306 function_token_position, function_type, FunctionLiteral::NORMAL_ARITY,
3305 CHECK_OK); 3307 language_mode(), CHECK_OK);
3306 } else if (peek() == Token::SUPER) { 3308 } else if (peek() == Token::SUPER) {
3307 const bool is_new = false; 3309 const bool is_new = false;
3308 result = ParseSuperExpression(is_new, classifier, CHECK_OK); 3310 result = ParseSuperExpression(is_new, classifier, CHECK_OK);
3309 } else { 3311 } else {
3310 result = ParsePrimaryExpression(classifier, CHECK_OK); 3312 result = ParsePrimaryExpression(classifier, CHECK_OK);
3311 } 3313 }
3312 3314
3313 result = ParseMemberExpressionContinuation(result, classifier, CHECK_OK); 3315 result = ParseMemberExpressionContinuation(result, classifier, CHECK_OK);
3314 return result; 3316 return result;
3315 } 3317 }
(...skipping 664 matching lines...) Expand 10 before | Expand all | Expand 10 after
3980 *ok = false; 3982 *ok = false;
3981 return; 3983 return;
3982 } 3984 }
3983 has_seen_constructor_ = true; 3985 has_seen_constructor_ = true;
3984 return; 3986 return;
3985 } 3987 }
3986 } 3988 }
3987 } } // v8::internal 3989 } } // v8::internal
3988 3990
3989 #endif // V8_PREPARSER_H 3991 #endif // V8_PREPARSER_H
OLDNEW
« no previous file with comments | « src/parser.cc ('k') | src/preparser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698