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

Side by Side Diff: src/preparser.cc

Issue 722203006: Disable classes in sloppy mode unless --harmony-sloppy is set (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Introduce harmony-sloppy flag Created 6 years, 1 month 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
OLDNEW
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 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 <cmath> 5 #include <cmath>
6 6
7 #include "src/allocation.h" 7 #include "src/allocation.h"
8 #include "src/base/logging.h" 8 #include "src/base/logging.h"
9 #include "src/conversions-inl.h" 9 #include "src/conversions-inl.h"
10 #include "src/conversions.h" 10 #include "src/conversions.h"
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 is_generator ? FunctionKind::kGeneratorFunction 343 is_generator ? FunctionKind::kGeneratorFunction
344 : FunctionKind::kNormalFunction, 344 : FunctionKind::kNormalFunction,
345 pos, FunctionLiteral::DECLARATION, 345 pos, FunctionLiteral::DECLARATION,
346 FunctionLiteral::NORMAL_ARITY, CHECK_OK); 346 FunctionLiteral::NORMAL_ARITY, CHECK_OK);
347 return Statement::FunctionDeclaration(); 347 return Statement::FunctionDeclaration();
348 } 348 }
349 349
350 350
351 PreParser::Statement PreParser::ParseClassDeclaration(bool* ok) { 351 PreParser::Statement PreParser::ParseClassDeclaration(bool* ok) {
352 Expect(Token::CLASS, CHECK_OK); 352 Expect(Token::CLASS, CHECK_OK);
353 if (!allow_harmony_sloppy() && strict_mode() == SLOPPY) {
354 ReportMessage("sloppy_lexical");
355 *ok = false;
356 return Statement::Default();
357 }
358
353 int pos = position(); 359 int pos = position();
354 bool is_strict_reserved = false; 360 bool is_strict_reserved = false;
355 Identifier name = 361 Identifier name =
356 ParseIdentifierOrStrictReservedWord(&is_strict_reserved, CHECK_OK); 362 ParseIdentifierOrStrictReservedWord(&is_strict_reserved, CHECK_OK);
357 ParseClassLiteral(name, scanner()->location(), is_strict_reserved, pos, 363 ParseClassLiteral(name, scanner()->location(), is_strict_reserved, pos,
358 CHECK_OK); 364 CHECK_OK);
359 return Statement::Default(); 365 return Statement::Default();
360 } 366 }
361 367
362 368
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
505 Consume(Token::COLON); 511 Consume(Token::COLON);
506 return ParseStatement(ok); 512 return ParseStatement(ok);
507 // Preparsing is disabled for extensions (because the extension details 513 // Preparsing is disabled for extensions (because the extension details
508 // aren't passed to lazily compiled functions), so we don't 514 // aren't passed to lazily compiled functions), so we don't
509 // accept "native function" in the preparser. 515 // accept "native function" in the preparser.
510 } 516 }
511 // Parsed expression statement. 517 // Parsed expression statement.
512 // Detect attempts at 'let' declarations in sloppy mode. 518 // Detect attempts at 'let' declarations in sloppy mode.
513 if (peek() == Token::IDENTIFIER && strict_mode() == SLOPPY && 519 if (peek() == Token::IDENTIFIER && strict_mode() == SLOPPY &&
514 expr.IsIdentifier() && expr.AsIdentifier().IsLet()) { 520 expr.IsIdentifier() && expr.AsIdentifier().IsLet()) {
515 ReportMessage("lexical_strict_mode", NULL); 521 ReportMessage("sloppy_lexical", NULL);
516 *ok = false; 522 *ok = false;
517 return Statement::Default(); 523 return Statement::Default();
518 } 524 }
519 ExpectSemicolon(CHECK_OK); 525 ExpectSemicolon(CHECK_OK);
520 return Statement::ExpressionStatement(expr); 526 return Statement::ExpressionStatement(expr);
521 } 527 }
522 528
523 529
524 PreParser::Statement PreParser::ParseIfStatement(bool* ok) { 530 PreParser::Statement PreParser::ParseIfStatement(bool* ok) {
525 // IfStatement :: 531 // IfStatement ::
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
726 ParseStatement(CHECK_OK); 732 ParseStatement(CHECK_OK);
727 return Statement::Default(); 733 return Statement::Default();
728 } 734 }
729 } 735 }
730 } 736 }
731 737
732 // Parsed initializer at this point. 738 // Parsed initializer at this point.
733 // Detect attempts at 'let' declarations in sloppy mode. 739 // Detect attempts at 'let' declarations in sloppy mode.
734 if (peek() == Token::IDENTIFIER && strict_mode() == SLOPPY && 740 if (peek() == Token::IDENTIFIER && strict_mode() == SLOPPY &&
735 is_let_identifier_expression) { 741 is_let_identifier_expression) {
736 ReportMessage("lexical_strict_mode", NULL); 742 ReportMessage("sloppy_lexical", NULL);
737 *ok = false; 743 *ok = false;
738 return Statement::Default(); 744 return Statement::Default();
739 } 745 }
740 Expect(Token::SEMICOLON, CHECK_OK); 746 Expect(Token::SEMICOLON, CHECK_OK);
741 747
742 if (peek() != Token::SEMICOLON) { 748 if (peek() != Token::SEMICOLON) {
743 ParseExpression(true, CHECK_OK); 749 ParseExpression(true, CHECK_OK);
744 } 750 }
745 Expect(Token::SEMICOLON, CHECK_OK); 751 Expect(Token::SEMICOLON, CHECK_OK);
746 752
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
991 Expect(Token::RBRACE, CHECK_OK); 997 Expect(Token::RBRACE, CHECK_OK);
992 998
993 return Expression::Default(); 999 return Expression::Default();
994 } 1000 }
995 1001
996 1002
997 PreParser::Expression PreParser::ParseV8Intrinsic(bool* ok) { 1003 PreParser::Expression PreParser::ParseV8Intrinsic(bool* ok) {
998 // CallRuntime :: 1004 // CallRuntime ::
999 // '%' Identifier Arguments 1005 // '%' Identifier Arguments
1000 Expect(Token::MOD, CHECK_OK); 1006 Expect(Token::MOD, CHECK_OK);
1001 if (!allow_natives_syntax()) { 1007 if (!allow_natives()) {
1002 *ok = false; 1008 *ok = false;
1003 return Expression::Default(); 1009 return Expression::Default();
1004 } 1010 }
1005 // Allow "eval" or "arguments" for backward compatibility. 1011 // Allow "eval" or "arguments" for backward compatibility.
1006 ParseIdentifier(kAllowEvalOrArguments, CHECK_OK); 1012 ParseIdentifier(kAllowEvalOrArguments, CHECK_OK);
1007 ParseArguments(ok); 1013 ParseArguments(ok);
1008 1014
1009 return Expression::Default(); 1015 return Expression::Default();
1010 } 1016 }
1011 1017
1012 #undef CHECK_OK 1018 #undef CHECK_OK
1013 1019
1014 1020
1015 } } // v8::internal 1021 } } // v8::internal
OLDNEW
« no previous file with comments | « src/preparser.h ('k') | test/cctest/test-parsing.cc » ('j') | test/cctest/test-parsing.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698