| Index: src/parsing/preparser.cc
|
| diff --git a/src/parsing/preparser.cc b/src/parsing/preparser.cc
|
| index c0dc9846465cf655271f9640b9f6964ccacee807..60dc330e00d445add99128b1f510f2da5e1e6552 100644
|
| --- a/src/parsing/preparser.cc
|
| +++ b/src/parsing/preparser.cc
|
| @@ -78,8 +78,6 @@ PreParserExpression PreParserTraits::ExpressionFromString(
|
| int pos, Scanner* scanner, PreParserFactory* factory) {
|
| if (scanner->UnescapedLiteralMatches("use strict", 10)) {
|
| return PreParserExpression::UseStrictStringLiteral();
|
| - } else if (scanner->UnescapedLiteralMatches("use strong", 10)) {
|
| - return PreParserExpression::UseStrongStringLiteral();
|
| }
|
| return PreParserExpression::StringLiteral();
|
| }
|
| @@ -132,15 +130,6 @@ PreParser::PreParseResult PreParser::PreParseLazyFunction(
|
| int end_pos = scanner()->location().end_pos;
|
| CheckStrictOctalLiteral(start_position, end_pos, &ok);
|
| if (!ok) return kPreParseSuccess;
|
| -
|
| - if (is_strong(scope_->language_mode()) && IsSubclassConstructor(kind)) {
|
| - if (!function_state.super_location().IsValid()) {
|
| - ReportMessageAt(Scanner::Location(start_position, start_position + 1),
|
| - MessageTemplate::kStrongSuperCallMissing,
|
| - kReferenceError);
|
| - return kPreParseSuccess;
|
| - }
|
| - }
|
| }
|
| }
|
| return kPreParseSuccess;
|
| @@ -226,62 +215,26 @@ void PreParser::ParseStatementList(int end_token, bool* ok,
|
| }
|
| bool starts_with_identifier = peek() == Token::IDENTIFIER;
|
| Scanner::Location token_loc = scanner()->peek_location();
|
| - Scanner::Location old_this_loc = function_state_->this_location();
|
| - Scanner::Location old_super_loc = function_state_->super_location();
|
| Statement statement = ParseStatementListItem(ok);
|
| if (!*ok) return;
|
|
|
| - if (is_strong(language_mode()) && scope_->is_function_scope() &&
|
| - IsClassConstructor(function_state_->kind())) {
|
| - Scanner::Location this_loc = function_state_->this_location();
|
| - Scanner::Location super_loc = function_state_->super_location();
|
| - if (this_loc.beg_pos != old_this_loc.beg_pos &&
|
| - this_loc.beg_pos != token_loc.beg_pos) {
|
| - ReportMessageAt(this_loc, MessageTemplate::kStrongConstructorThis);
|
| - *ok = false;
|
| - return;
|
| - }
|
| - if (super_loc.beg_pos != old_super_loc.beg_pos &&
|
| - super_loc.beg_pos != token_loc.beg_pos) {
|
| - ReportMessageAt(super_loc, MessageTemplate::kStrongConstructorSuper);
|
| - *ok = false;
|
| - return;
|
| - }
|
| - }
|
| -
|
| if (directive_prologue) {
|
| bool use_strict_found = statement.IsUseStrictLiteral();
|
| - bool use_strong_found =
|
| - statement.IsUseStrongLiteral() && allow_strong_mode();
|
|
|
| if (use_strict_found) {
|
| scope_->SetLanguageMode(
|
| static_cast<LanguageMode>(scope_->language_mode() | STRICT));
|
| - } else if (use_strong_found) {
|
| - scope_->SetLanguageMode(static_cast<LanguageMode>(
|
| - scope_->language_mode() | STRONG));
|
| - if (IsClassConstructor(function_state_->kind())) {
|
| - // "use strong" cannot occur in a class constructor body, to avoid
|
| - // unintuitive strong class object semantics.
|
| - PreParserTraits::ReportMessageAt(
|
| - token_loc, MessageTemplate::kStrongConstructorDirective);
|
| - *ok = false;
|
| - return;
|
| - }
|
| } else if (!statement.IsStringLiteral()) {
|
| directive_prologue = false;
|
| }
|
|
|
| - if ((use_strict_found || use_strong_found) &&
|
| - !scope_->HasSimpleParameters()) {
|
| + if (use_strict_found && !scope_->HasSimpleParameters()) {
|
| // TC39 deemed "use strict" directives to be an error when occurring
|
| // in the body of a function with non-simple parameter list, on
|
| // 29/7/2015. https://goo.gl/ueA7Ln
|
| - //
|
| - // In V8, this also applies to "use strong " directives.
|
| PreParserTraits::ReportMessageAt(
|
| token_loc, MessageTemplate::kIllegalLanguageModeDirective,
|
| - use_strict_found ? "use strict" : "use strong");
|
| + "use strict");
|
| *ok = false;
|
| return;
|
| }
|
| @@ -363,12 +316,6 @@ PreParser::Statement PreParser::ParseSubStatement(bool* ok) {
|
| return ParseBlock(ok);
|
|
|
| case Token::SEMICOLON:
|
| - if (is_strong(language_mode())) {
|
| - PreParserTraits::ReportMessageAt(scanner()->peek_location(),
|
| - MessageTemplate::kStrongEmpty);
|
| - *ok = false;
|
| - return Statement::Default();
|
| - }
|
| Next();
|
| return Statement::Default();
|
|
|
| @@ -533,12 +480,6 @@ PreParser::Statement PreParser::ParseVariableDeclarations(
|
| bool lexical = false;
|
| bool is_pattern = false;
|
| if (peek() == Token::VAR) {
|
| - if (is_strong(language_mode())) {
|
| - Scanner::Location location = scanner()->peek_location();
|
| - ReportMessageAt(location, MessageTemplate::kStrongVar);
|
| - *ok = false;
|
| - return Statement::Default();
|
| - }
|
| Consume(Token::VAR);
|
| } else if (peek() == Token::CONST && allow_const()) {
|
| // TODO(ES6): The ES6 Draft Rev4 section 12.2.2 reads:
|
| @@ -646,45 +587,6 @@ PreParser::Statement PreParser::ParseExpressionOrLabelledStatement(bool* ok) {
|
| *ok = false;
|
| return Statement::Default();
|
|
|
| - case Token::THIS:
|
| - if (!FLAG_strong_this) break;
|
| - // Fall through.
|
| - case Token::SUPER:
|
| - if (is_strong(language_mode()) &&
|
| - IsClassConstructor(function_state_->kind())) {
|
| - bool is_this = peek() == Token::THIS;
|
| - Expression expr = Expression::Default();
|
| - ExpressionClassifier classifier(this);
|
| - if (is_this) {
|
| - expr = ParseStrongInitializationExpression(&classifier, CHECK_OK);
|
| - } else {
|
| - expr = ParseStrongSuperCallExpression(&classifier, CHECK_OK);
|
| - }
|
| - ValidateExpression(&classifier, CHECK_OK);
|
| - switch (peek()) {
|
| - case Token::SEMICOLON:
|
| - Consume(Token::SEMICOLON);
|
| - break;
|
| - case Token::RBRACE:
|
| - case Token::EOS:
|
| - break;
|
| - default:
|
| - if (!scanner()->HasAnyLineTerminatorBeforeNext()) {
|
| - ReportMessageAt(function_state_->this_location(),
|
| - is_this
|
| - ? MessageTemplate::kStrongConstructorThis
|
| - : MessageTemplate::kStrongConstructorSuper);
|
| - *ok = false;
|
| - return Statement::Default();
|
| - }
|
| - }
|
| - return Statement::ExpressionStatement(expr);
|
| - }
|
| - break;
|
| -
|
| - // TODO(arv): Handle `let [`
|
| - // https://code.google.com/p/v8/issues/detail?id=3847
|
| -
|
| default:
|
| break;
|
| }
|
| @@ -805,14 +707,6 @@ PreParser::Statement PreParser::ParseReturnStatement(bool* ok) {
|
| tok != Token::SEMICOLON &&
|
| tok != Token::RBRACE &&
|
| tok != Token::EOS) {
|
| - if (is_strong(language_mode()) &&
|
| - IsClassConstructor(function_state_->kind())) {
|
| - int pos = peek_position();
|
| - ReportMessageAt(Scanner::Location(pos, pos + 1),
|
| - MessageTemplate::kStrongConstructorReturnValue);
|
| - *ok = false;
|
| - return Statement::Default();
|
| - }
|
| ParseExpression(true, CHECK_OK);
|
| }
|
| ExpectSemicolon(CHECK_OK);
|
| @@ -867,13 +761,6 @@ PreParser::Statement PreParser::ParseSwitchStatement(bool* ok) {
|
| statement = ParseStatementListItem(CHECK_OK);
|
| token = peek();
|
| }
|
| - if (is_strong(language_mode()) && !statement.IsJumpStatement() &&
|
| - token != Token::RBRACE) {
|
| - ReportMessageAt(scanner()->location(),
|
| - MessageTemplate::kStrongSwitchFallthrough);
|
| - *ok = false;
|
| - return Statement::Default();
|
| - }
|
| }
|
| Expect(Token::RBRACE, ok);
|
| return Statement::Default();
|
| @@ -1166,16 +1053,6 @@ PreParser::Expression PreParser::ParseFunctionLiteral(
|
| CheckStrictOctalLiteral(start_position, end_position, CHECK_OK);
|
| }
|
|
|
| - if (is_strong(language_mode) && IsSubclassConstructor(kind)) {
|
| - if (!function_state.super_location().IsValid()) {
|
| - ReportMessageAt(function_name_location,
|
| - MessageTemplate::kStrongSuperCallMissing,
|
| - kReferenceError);
|
| - *ok = false;
|
| - return Expression::Default();
|
| - }
|
| - }
|
| -
|
| return Expression::Default();
|
| }
|
|
|
| @@ -1212,13 +1089,8 @@ PreParserExpression PreParser::ParseClassLiteral(
|
| *ok = false;
|
| return EmptyExpression();
|
| }
|
| - LanguageMode class_language_mode = language_mode();
|
| - if (is_strong(class_language_mode) && IsUndefined(name)) {
|
| - ReportMessageAt(class_name_location, MessageTemplate::kStrongUndefined);
|
| - *ok = false;
|
| - return EmptyExpression();
|
| - }
|
|
|
| + LanguageMode class_language_mode = language_mode();
|
| Scope* scope = NewScope(scope_, BLOCK_SCOPE);
|
| BlockState block_state(&scope_, scope);
|
| scope_->SetLanguageMode(
|
|
|