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

Side by Side Diff: src/parsing/preparser.cc

Issue 2267493002: Disallow 'await' in object literal shorthand position (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: More cleanup Created 4 years, 4 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
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 385 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 PreParser::Statement PreParser::ParseHoistableDeclaration( 396 PreParser::Statement PreParser::ParseHoistableDeclaration(
397 int pos, ParseFunctionFlags flags, bool* ok) { 397 int pos, ParseFunctionFlags flags, bool* ok) {
398 const bool is_generator = flags & ParseFunctionFlags::kIsGenerator; 398 const bool is_generator = flags & ParseFunctionFlags::kIsGenerator;
399 const bool is_async = flags & ParseFunctionFlags::kIsAsync; 399 const bool is_async = flags & ParseFunctionFlags::kIsAsync;
400 DCHECK(!is_generator || !is_async); 400 DCHECK(!is_generator || !is_async);
401 401
402 bool is_strict_reserved = false; 402 bool is_strict_reserved = false;
403 Identifier name = ParseIdentifierOrStrictReservedWord( 403 Identifier name = ParseIdentifierOrStrictReservedWord(
404 &is_strict_reserved, CHECK_OK); 404 &is_strict_reserved, CHECK_OK);
405 405
406 if (V8_UNLIKELY(is_async_function() && this->IsAwait(name))) {
407 ReportMessageAt(scanner()->location(),
408 MessageTemplate::kAwaitBindingIdentifier);
409 *ok = false;
410 return Statement::Default();
411 }
412
413 ParseFunctionLiteral(name, scanner()->location(), 406 ParseFunctionLiteral(name, scanner()->location(),
414 is_strict_reserved ? kFunctionNameIsStrictReserved 407 is_strict_reserved ? kFunctionNameIsStrictReserved
415 : kFunctionNameValidityUnknown, 408 : kFunctionNameValidityUnknown,
416 is_generator ? FunctionKind::kGeneratorFunction 409 is_generator ? FunctionKind::kGeneratorFunction
417 : is_async ? FunctionKind::kAsyncFunction 410 : is_async ? FunctionKind::kAsyncFunction
418 : FunctionKind::kNormalFunction, 411 : FunctionKind::kNormalFunction,
419 pos, FunctionLiteral::kDeclaration, language_mode(), 412 pos, FunctionLiteral::kDeclaration, language_mode(),
420 CHECK_OK); 413 CHECK_OK);
421 return Statement::FunctionDeclaration(); 414 return Statement::FunctionDeclaration();
422 } 415 }
(...skipping 732 matching lines...) Expand 10 before | Expand all | Expand 10 after
1155 // async [no LineTerminator here] function BindingIdentifier[Await] 1148 // async [no LineTerminator here] function BindingIdentifier[Await]
1156 // ( FormalParameters[Await] ) { AsyncFunctionBody } 1149 // ( FormalParameters[Await] ) { AsyncFunctionBody }
1157 int pos = position(); 1150 int pos = position();
1158 Expect(Token::FUNCTION, CHECK_OK); 1151 Expect(Token::FUNCTION, CHECK_OK);
1159 bool is_strict_reserved = false; 1152 bool is_strict_reserved = false;
1160 Identifier name; 1153 Identifier name;
1161 FunctionLiteral::FunctionType type = FunctionLiteral::kAnonymousExpression; 1154 FunctionLiteral::FunctionType type = FunctionLiteral::kAnonymousExpression;
1162 1155
1163 if (peek_any_identifier()) { 1156 if (peek_any_identifier()) {
1164 type = FunctionLiteral::kNamedExpression; 1157 type = FunctionLiteral::kNamedExpression;
1165 name = ParseIdentifierOrStrictReservedWord(&is_strict_reserved, CHECK_OK); 1158 name = ParseIdentifierOrStrictReservedWord(FunctionKind::kAsyncFunction,
1166 if (this->IsAwait(name)) { 1159 &is_strict_reserved, CHECK_OK);
1167 ReportMessageAt(scanner()->location(),
1168 MessageTemplate::kAwaitBindingIdentifier);
1169 *ok = false;
1170 return Expression::Default();
1171 }
1172 } 1160 }
1173 1161
1174 ParseFunctionLiteral(name, scanner()->location(), 1162 ParseFunctionLiteral(name, scanner()->location(),
1175 is_strict_reserved ? kFunctionNameIsStrictReserved 1163 is_strict_reserved ? kFunctionNameIsStrictReserved
1176 : kFunctionNameValidityUnknown, 1164 : kFunctionNameValidityUnknown,
1177 FunctionKind::kAsyncFunction, pos, type, language_mode(), 1165 FunctionKind::kAsyncFunction, pos, type, language_mode(),
1178 CHECK_OK); 1166 CHECK_OK);
1179 return Expression::Default(); 1167 return Expression::Default();
1180 } 1168 }
1181 1169
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
1302 1290
1303 body->Add(PreParserStatement::ExpressionStatement(return_value), zone()); 1291 body->Add(PreParserStatement::ExpressionStatement(return_value), zone());
1304 } 1292 }
1305 1293
1306 #undef CHECK_OK 1294 #undef CHECK_OK
1307 #undef CHECK_OK_CUSTOM 1295 #undef CHECK_OK_CUSTOM
1308 1296
1309 1297
1310 } // namespace internal 1298 } // namespace internal
1311 } // namespace v8 1299 } // namespace v8
OLDNEW
« src/parsing/parser-base.h ('K') | « src/parsing/preparser.h ('k') | src/parsing/token.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698