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

Side by Side Diff: src/preparser.h

Issue 932333004: [strong] Deprecate arguments (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Comments Created 5 years, 10 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') | test/mjsunit/strong/arguments.js » ('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 690 matching lines...) Expand 10 before | Expand all | Expand 10 after
701 static PreParserIdentifier Yield() { 701 static PreParserIdentifier Yield() {
702 return PreParserIdentifier(kYieldIdentifier); 702 return PreParserIdentifier(kYieldIdentifier);
703 } 703 }
704 static PreParserIdentifier Prototype() { 704 static PreParserIdentifier Prototype() {
705 return PreParserIdentifier(kPrototypeIdentifier); 705 return PreParserIdentifier(kPrototypeIdentifier);
706 } 706 }
707 static PreParserIdentifier Constructor() { 707 static PreParserIdentifier Constructor() {
708 return PreParserIdentifier(kConstructorIdentifier); 708 return PreParserIdentifier(kConstructorIdentifier);
709 } 709 }
710 bool IsEval() const { return type_ == kEvalIdentifier; } 710 bool IsEval() const { return type_ == kEvalIdentifier; }
711 bool IsArguments(const AstValueFactory* = NULL) const { 711 bool IsArguments() const { return type_ == kArgumentsIdentifier; }
712 return type_ == kArgumentsIdentifier; 712 bool IsEvalOrArguments() const { return IsEval() || IsArguments(); }
713 }
714 bool IsLet() const { return type_ == kLetIdentifier; } 713 bool IsLet() const { return type_ == kLetIdentifier; }
715 bool IsStatic() const { return type_ == kStaticIdentifier; } 714 bool IsStatic() const { return type_ == kStaticIdentifier; }
716 bool IsYield() const { return type_ == kYieldIdentifier; } 715 bool IsYield() const { return type_ == kYieldIdentifier; }
717 bool IsPrototype() const { return type_ == kPrototypeIdentifier; } 716 bool IsPrototype() const { return type_ == kPrototypeIdentifier; }
718 bool IsConstructor() const { return type_ == kConstructorIdentifier; } 717 bool IsConstructor() const { return type_ == kConstructorIdentifier; }
719 bool IsEvalOrArguments() const {
720 return type_ == kEvalIdentifier || type_ == kArgumentsIdentifier;
721 }
722 bool IsFutureReserved() const { return type_ == kFutureReservedIdentifier; } 718 bool IsFutureReserved() const { return type_ == kFutureReservedIdentifier; }
723 bool IsFutureStrictReserved() const { 719 bool IsFutureStrictReserved() const {
724 return type_ == kFutureStrictReservedIdentifier || 720 return type_ == kFutureStrictReservedIdentifier ||
725 type_ == kLetIdentifier || type_ == kStaticIdentifier || 721 type_ == kLetIdentifier || type_ == kStaticIdentifier ||
726 type_ == kYieldIdentifier; 722 type_ == kYieldIdentifier;
727 } 723 }
728 bool IsValidStrictVariable() const { return type_ == kUnknownIdentifier; } 724 bool IsValidStrictVariable() const { return type_ == kUnknownIdentifier; }
729 V8_INLINE bool IsValidArrowParam() const { 725 V8_INLINE bool IsValidArrowParam() const {
730 // A valid identifier can be an arrow function parameter 726 // A valid identifier can be an arrow function parameter
731 // except for eval, arguments, yield, and reserved keywords. 727 // except for eval, arguments, yield, and reserved keywords.
(...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after
1212 typedef PreParserExpressionList PropertyList; 1208 typedef PreParserExpressionList PropertyList;
1213 typedef PreParserStatementList StatementList; 1209 typedef PreParserStatementList StatementList;
1214 1210
1215 // For constructing objects returned by the traversing functions. 1211 // For constructing objects returned by the traversing functions.
1216 typedef PreParserFactory Factory; 1212 typedef PreParserFactory Factory;
1217 }; 1213 };
1218 1214
1219 explicit PreParserTraits(PreParser* pre_parser) : pre_parser_(pre_parser) {} 1215 explicit PreParserTraits(PreParser* pre_parser) : pre_parser_(pre_parser) {}
1220 1216
1221 // Helper functions for recursive descent. 1217 // Helper functions for recursive descent.
1218 static bool IsEval(PreParserIdentifier identifier) {
1219 return identifier.IsEval();
1220 }
1221
1222 static bool IsArguments(PreParserIdentifier identifier) {
1223 return identifier.IsArguments();
1224 }
1225
1222 static bool IsEvalOrArguments(PreParserIdentifier identifier) { 1226 static bool IsEvalOrArguments(PreParserIdentifier identifier) {
1223 return identifier.IsEvalOrArguments(); 1227 return identifier.IsEvalOrArguments();
1224 } 1228 }
1225 1229
1226 static bool IsPrototype(PreParserIdentifier identifier) { 1230 static bool IsPrototype(PreParserIdentifier identifier) {
1227 return identifier.IsPrototype(); 1231 return identifier.IsPrototype();
1228 } 1232 }
1229 1233
1230 static bool IsConstructor(PreParserIdentifier identifier) { 1234 static bool IsConstructor(PreParserIdentifier identifier) {
1231 return identifier.IsConstructor(); 1235 return identifier.IsConstructor();
(...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after
1707 } 1711 }
1708 1712
1709 1713
1710 template<class Traits> 1714 template<class Traits>
1711 typename ParserBase<Traits>::IdentifierT ParserBase<Traits>::ParseIdentifier( 1715 typename ParserBase<Traits>::IdentifierT ParserBase<Traits>::ParseIdentifier(
1712 AllowEvalOrArgumentsAsIdentifier allow_eval_or_arguments, 1716 AllowEvalOrArgumentsAsIdentifier allow_eval_or_arguments,
1713 bool* ok) { 1717 bool* ok) {
1714 Token::Value next = Next(); 1718 Token::Value next = Next();
1715 if (next == Token::IDENTIFIER) { 1719 if (next == Token::IDENTIFIER) {
1716 IdentifierT name = this->GetSymbol(scanner()); 1720 IdentifierT name = this->GetSymbol(scanner());
1717 if (allow_eval_or_arguments == kDontAllowEvalOrArguments && 1721 if (allow_eval_or_arguments == kDontAllowEvalOrArguments) {
1718 is_strict(language_mode()) && this->IsEvalOrArguments(name)) { 1722 if (is_strict(language_mode()) && this->IsEvalOrArguments(name)) {
1719 ReportMessage("strict_eval_arguments"); 1723 ReportMessage("strict_eval_arguments");
1720 *ok = false; 1724 *ok = false;
1725 }
1726 } else {
1727 if (is_strong(language_mode()) && this->IsArguments(name)) {
1728 ReportMessage("strong_arguments");
1729 *ok = false;
1730 }
1721 } 1731 }
1722 if (name->IsArguments(ast_value_factory())) scope_->RecordArgumentsUsage(); 1732 if (this->IsArguments(name)) scope_->RecordArgumentsUsage();
1723 return name; 1733 return name;
1724 } else if (is_sloppy(language_mode()) && 1734 } else if (is_sloppy(language_mode()) &&
1725 (next == Token::FUTURE_STRICT_RESERVED_WORD || 1735 (next == Token::FUTURE_STRICT_RESERVED_WORD ||
1726 next == Token::LET || next == Token::STATIC || 1736 next == Token::LET || next == Token::STATIC ||
1727 (next == Token::YIELD && !is_generator()))) { 1737 (next == Token::YIELD && !is_generator()))) {
1728 return this->GetSymbol(scanner()); 1738 return this->GetSymbol(scanner());
1729 } else { 1739 } else {
1730 this->ReportUnexpectedToken(next); 1740 this->ReportUnexpectedToken(next);
1731 *ok = false; 1741 *ok = false;
1732 return Traits::EmptyIdentifier(); 1742 return Traits::EmptyIdentifier();
(...skipping 12 matching lines...) Expand all
1745 next == Token::STATIC || 1755 next == Token::STATIC ||
1746 (next == Token::YIELD && !this->is_generator())) { 1756 (next == Token::YIELD && !this->is_generator())) {
1747 *is_strict_reserved = true; 1757 *is_strict_reserved = true;
1748 } else { 1758 } else {
1749 ReportUnexpectedToken(next); 1759 ReportUnexpectedToken(next);
1750 *ok = false; 1760 *ok = false;
1751 return Traits::EmptyIdentifier(); 1761 return Traits::EmptyIdentifier();
1752 } 1762 }
1753 1763
1754 IdentifierT name = this->GetSymbol(scanner()); 1764 IdentifierT name = this->GetSymbol(scanner());
1755 if (name->IsArguments(ast_value_factory())) scope_->RecordArgumentsUsage(); 1765 if (this->IsArguments(name)) scope_->RecordArgumentsUsage();
1756 return name; 1766 return name;
1757 } 1767 }
1758 1768
1759 1769
1760 template <class Traits> 1770 template <class Traits>
1761 typename ParserBase<Traits>::IdentifierT 1771 typename ParserBase<Traits>::IdentifierT
1762 ParserBase<Traits>::ParseIdentifierName(bool* ok) { 1772 ParserBase<Traits>::ParseIdentifierName(bool* ok) {
1763 Token::Value next = Next(); 1773 Token::Value next = Next();
1764 if (next != Token::IDENTIFIER && next != Token::FUTURE_RESERVED_WORD && 1774 if (next != Token::IDENTIFIER && next != Token::FUTURE_RESERVED_WORD &&
1765 next != Token::LET && next != Token::STATIC && next != Token::YIELD && 1775 next != Token::LET && next != Token::STATIC && next != Token::YIELD &&
1766 next != Token::FUTURE_STRICT_RESERVED_WORD && !Token::IsKeyword(next)) { 1776 next != Token::FUTURE_STRICT_RESERVED_WORD && !Token::IsKeyword(next)) {
1767 this->ReportUnexpectedToken(next); 1777 this->ReportUnexpectedToken(next);
1768 *ok = false; 1778 *ok = false;
1769 return Traits::EmptyIdentifier(); 1779 return Traits::EmptyIdentifier();
1770 } 1780 }
1771 1781
1772 IdentifierT name = this->GetSymbol(scanner()); 1782 IdentifierT name = this->GetSymbol(scanner());
1773 if (name->IsArguments(ast_value_factory())) scope_->RecordArgumentsUsage(); 1783 if (this->IsArguments(name)) scope_->RecordArgumentsUsage();
1774 return name; 1784 return name;
1775 } 1785 }
1776 1786
1777 1787
1778 template <class Traits> 1788 template <class Traits>
1779 typename ParserBase<Traits>::IdentifierT 1789 typename ParserBase<Traits>::IdentifierT
1780 ParserBase<Traits>::ParseIdentifierNameOrGetOrSet(bool* is_get, 1790 ParserBase<Traits>::ParseIdentifierNameOrGetOrSet(bool* is_get,
1781 bool* is_set, 1791 bool* is_set,
1782 bool* ok) { 1792 bool* ok) {
1783 IdentifierT result = ParseIdentifierName(ok); 1793 IdentifierT result = ParseIdentifierName(ok);
(...skipping 1299 matching lines...) Expand 10 before | Expand all | Expand 10 after
3083 *ok = false; 3093 *ok = false;
3084 return; 3094 return;
3085 } 3095 }
3086 has_seen_constructor_ = true; 3096 has_seen_constructor_ = true;
3087 return; 3097 return;
3088 } 3098 }
3089 } 3099 }
3090 } } // v8::internal 3100 } } // v8::internal
3091 3101
3092 #endif // V8_PREPARSER_H 3102 #endif // V8_PREPARSER_H
OLDNEW
« no previous file with comments | « src/parser.cc ('k') | test/mjsunit/strong/arguments.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698