Reviewers: adamk,
Description:
Stage sloppy let
Move the --harmony-sloppy-let flag to staging for further testing, and
update test262 for the new passing tests. Also increase the strictness
of the parser, even in sloppy mode, to disallow "new legacy compat" for
for (let x = 5 in {}) {}
which is now a SyntaxError.
BUG=v8:3305
LOG=Y
R=adamk
Please review this at https://codereview.chromium.org/1327483002/
Base URL: https://chromium.googlesource.com/v8/v8.git@master
Affected files (+17, -67 lines):
M src/flag-definitions.h
M src/parser.cc
M test/test262-es6/test262-es6.status
Index: src/flag-definitions.h
diff --git a/src/flag-definitions.h b/src/flag-definitions.h
index
19769f16047c29f7cc0e625a0ef8718138f3259b..0ca6f8137f6198060e6833bbdee185a5f47c4a89
100644
--- a/src/flag-definitions.h
+++ b/src/flag-definitions.h
@@ -193,7 +193,6 @@ DEFINE_BOOL(legacy_const, true, "legacy semantics for
const in sloppy mode")
V(harmony_regexps, "harmony regular expression extensions") \
V(harmony_proxies, "harmony proxies") \
V(harmony_sloppy_function, "harmony sloppy function block scoping") \
- V(harmony_sloppy_let, "harmony let in sloppy mode") \
V(harmony_unicode_regexps, "harmony unicode regexps") \
V(harmony_reflect, "harmony Reflect API") \
V(harmony_destructuring, "harmony destructuring") \
@@ -207,7 +206,8 @@ DEFINE_BOOL(legacy_const, true, "legacy semantics for
const in sloppy mode")
V(harmony_tostring, "harmony toString") \
V(harmony_concat_spreadable, "harmony isConcatSpreadable") \
V(harmony_rest_parameters, "harmony rest parameters") \
- V(harmony_sloppy, "harmony features in sloppy mode")
+ V(harmony_sloppy, "harmony features in sloppy mode") \
+ V(harmony_sloppy_let, "harmony let in sloppy mode")
// Features that are shipping (turned on by default, but internal flag
remains).
#define HARMONY_SHIPPING(V) \
Index: src/parser.cc
diff --git a/src/parser.cc b/src/parser.cc
index
319d468e4d61db43f529e8424139842d7bede8ba..8dafdc9cc8cb26ca5d18aa3d8fd01455ad6d454d
100644
--- a/src/parser.cc
+++ b/src/parser.cc
@@ -3594,7 +3594,8 @@ Statement* Parser::ParseForStatement(ZoneList<const
AstRawString*>* labels,
return nullptr;
}
if (parsing_result.first_initializer_loc.IsValid() &&
- (is_strict(language_mode()) || mode ==
ForEachStatement::ITERATE)) {
+ (is_strict(language_mode()) || mode ==
ForEachStatement::ITERATE ||
+ IsLexicalVariableMode(parsing_result.descriptor.mode))) {
if (mode == ForEachStatement::ITERATE) {
ReportMessageAt(parsing_result.first_initializer_loc,
MessageTemplate::kForOfLoopInitializer);
Index: test/test262-es6/test262-es6.status
diff --git a/test/test262-es6/test262-es6.status
b/test/test262-es6/test262-es6.status
index
c3496a3a56b63401b71f891b40e0d07148e8151c..cbc84cfca9bb745fdd7552f6d6ea71a73aa0c201
100644
--- a/test/test262-es6/test262-es6.status
+++ b/test/test262-es6/test262-es6.status
@@ -74,40 +74,10 @@
###################### MISSING ES6 FEATURES #######################
- # Class, let, const in sloppy mode.
+ # Const is still interpreted as legacy const in sloppy mode
# https://code.google.com/p/v8/issues/detail?id=3305
- 'language/block-scope/leave/finally-block-let-declaration-only-shadows-outer-parameter-value-1':
[PASS,
FAIL_SLOPPY],
- 'language/block-scope/leave/finally-block-let-declaration-only-shadows-outer-parameter-value-2':
[PASS,
FAIL_SLOPPY],
- 'language/block-scope/leave/for-loop-block-let-declaration-only-shadows-outer-parameter-value-1':
[PASS,
FAIL_SLOPPY],
- 'language/block-scope/leave/for-loop-block-let-declaration-only-shadows-outer-parameter-value-2':
[PASS,
FAIL_SLOPPY],
- 'language/block-scope/leave/nested-block-let-declaration-only-shadows-outer-parameter-value-1':
[PASS,
FAIL_SLOPPY],
- 'language/block-scope/leave/nested-block-let-declaration-only-shadows-outer-parameter-value-2':
[PASS,
FAIL_SLOPPY],
- 'language/block-scope/leave/outermost-binding-updated-in-catch-block-nested-block-let-declaration-unseen-outside-of-block':
[PASS,
FAIL_SLOPPY],
- 'language/block-scope/leave/try-block-let-declaration-only-shadows-outer-parameter-value-1':
[PASS,
FAIL_SLOPPY],
- 'language/block-scope/leave/try-block-let-declaration-only-shadows-outer-parameter-value-2':
[PASS,
FAIL_SLOPPY],
- 'language/block-scope/leave/verify-context-in-finally-block': [PASS,
FAIL_SLOPPY],
- 'language/block-scope/leave/verify-context-in-for-loop-block': [PASS,
FAIL_SLOPPY],
- 'language/block-scope/leave/verify-context-in-labelled-block': [PASS,
FAIL_SLOPPY],
- 'language/block-scope/leave/verify-context-in-try-block': [PASS,
FAIL_SLOPPY],
- 'language/block-scope/leave/x-after-break-to-label': [PASS, FAIL_SLOPPY],
- 'language/block-scope/leave/x-before-continue': [PASS, FAIL_SLOPPY],
- 'language/block-scope/return-from/block-let': [PASS, FAIL_SLOPPY],
- 'language/block-scope/shadowing/catch-parameter-shadowing-let-declaration':
[PASS,
FAIL_SLOPPY],
'language/block-scope/shadowing/const-declaration-shadowing-catch-parameter':
[PASS,
FAIL_SLOPPY],
'language/block-scope/shadowing/const-declarations-shadowing-parameter-name-let-const-and-var-variables':
[PASS,
FAIL_SLOPPY],
- 'language/block-scope/shadowing/dynamic-lookup-from-closure': [PASS,
FAIL_SLOPPY],
- 'language/block-scope/shadowing/dynamic-lookup-in-and-through-block-contexts':
[PASS,
FAIL_SLOPPY],
- 'language/block-scope/shadowing/let-declaration-shadowing-catch-parameter':
[PASS,
FAIL_SLOPPY],
- 'language/block-scope/shadowing/let-declarations-shadowing-parameter-name-let-const-and-var':
[PASS,
FAIL_SLOPPY],
- 'language/block-scope/shadowing/lookup-from-closure': [PASS,
FAIL_SLOPPY],
- 'language/block-scope/shadowing/lookup-in-and-through-block-contexts':
[PASS, FAIL_SLOPPY],
- 'language/block-scope/shadowing/parameter-name-shadowing-parameter-name-let-const-and-var':
[PASS,
FAIL_SLOPPY],
- 'language/block-scope/syntax/for-in/acquire-properties-from-array':
[PASS, FAIL_SLOPPY],
- 'language/block-scope/syntax/for-in/acquire-properties-from-object':
[PASS, FAIL_SLOPPY],
- 'language/block-scope/syntax/for-in/mixed-values-in-iteration': [PASS,
FAIL_SLOPPY],
- 'language/block-scope/syntax/redeclaration-in-block/attempt-to-redeclare-function-declaration-with-function-declaration':
[PASS,
FAIL_SLOPPY],
- 'language/block-scope/syntax/redeclaration-in-block/attempt-to-redeclare-function-declaration-with-var':
[PASS,
FAIL_SLOPPY],
- 'language/block-scope/syntax/redeclaration-in-block/attempt-to-redeclare-var-with-function-declaration':
[PASS,
FAIL_SLOPPY],
'language/statements/const/block-local-closure-get-before-initialization':
[PASS,
FAIL_SLOPPY],
'language/statements/const/block-local-use-before-initialization-in-declaration-statement':
[PASS,
FAIL_SLOPPY],
'language/statements/const/block-local-use-before-initialization-in-prior-statement':
[PASS,
FAIL_SLOPPY],
@@ -138,49 +108,28 @@
'language/statements/const/syntax/without-initializer-if-expression-statement-else-statement':
[PASS,
FAIL_SLOPPY],
'language/statements/const/syntax/without-initializer-label-statement':
[PASS, FAIL_SLOPPY],
'language/statements/const/syntax/without-initializer-while-expression-statement':
[PASS,
FAIL_SLOPPY],
- 'language/statements/continue/labeled-continue': [PASS, FAIL_SLOPPY],
- 'language/statements/continue/nested-let-bound-for-loops-inner-continue':
[PASS,
FAIL_SLOPPY],
- 'language/statements/continue/nested-let-bound-for-loops-labeled-continue':
[PASS,
FAIL_SLOPPY],
- 'language/statements/continue/nested-let-bound-for-loops-outer-continue':
[PASS,
FAIL_SLOPPY],
- 'language/statements/continue/no-label-continue': [PASS, FAIL_SLOPPY],
- 'language/statements/continue/shadowing-loop-variable-in-same-scope-as-continue':
[PASS,
FAIL_SLOPPY],
- 'language/statements/continue/simple-and-labeled': [PASS, FAIL_SLOPPY],
'language/statements/for-in/const-bound-names-fordecl-tdz-for-in':
[PASS, FAIL_SLOPPY],
'language/statements/for-in/const-fresh-binding-per-iteration-for-in':
[PASS, FAIL_SLOPPY],
- 'language/statements/for-in/let-bound-names-fordecl-tdz-for-in': [PASS,
FAIL_SLOPPY],
- 'language/statements/for-in/let-fresh-binding-per-iteration-for-in':
[PASS, FAIL_SLOPPY],
'language/statements/for-of/const-bound-names-fordecl-tdz-for-of':
[PASS, FAIL_SLOPPY],
'language/statements/for-of/const-fresh-binding-per-iteration-for-of':
[PASS, FAIL_SLOPPY],
- 'language/statements/for-of/let-bound-names-fordecl-tdz-for-of': [PASS,
FAIL_SLOPPY],
- 'language/statements/for-of/let-fresh-binding-per-iteration-for-of':
[PASS, FAIL_SLOPPY],
- 'language/statements/for/const-fresh-binding-per-iteration-for': [PASS,
FAIL_SLOPPY],
- 'language/statements/for/let-fresh-binding-per-iteration-for': [PASS,
FAIL_SLOPPY],
- 'language/statements/let/block-local-closure-get-before-initialization':
[PASS, FAIL_SLOPPY],
+
+ # Functions in blocks are var-declared and hoisted in sloppy mode
+ # https://code.google.com/p/v8/issues/detail?id=3305
+ 'language/block-scope/shadowing/dynamic-lookup-from-closure': [PASS,
FAIL_SLOPPY],
+ 'language/block-scope/shadowing/lookup-from-closure': [PASS,
FAIL_SLOPPY],
+ 'language/block-scope/syntax/redeclaration-in-block/attempt-to-redeclare-function-declaration-with-function-declaration':
[PASS,
FAIL_SLOPPY],
+ 'language/block-scope/syntax/redeclaration-in-block/attempt-to-redeclare-function-declaration-with-var':
[PASS,
FAIL_SLOPPY],
+ 'language/block-scope/syntax/redeclaration-in-block/attempt-to-redeclare-var-with-function-declaration':
[PASS,
FAIL_SLOPPY],
'language/statements/let/block-local-closure-set-before-initialization':
[PASS, FAIL_SLOPPY],
- 'language/statements/let/block-local-use-before-initialization-in-declaration-statement':
[PASS,
FAIL_SLOPPY],
- 'language/statements/let/block-local-use-before-initialization-in-prior-statement':
[PASS,
FAIL_SLOPPY],
- 'language/statements/let/function-local-closure-get-before-initialization':
[PASS,
FAIL_SLOPPY],
- 'language/statements/let/function-local-closure-set-before-initialization':
[PASS,
FAIL_SLOPPY],
- 'language/statements/let/function-local-use-before-initialization-in-declaration-statement':
[PASS,
FAIL_SLOPPY],
- 'language/statements/let/function-local-use-before-initialization-in-prior-statement':
[PASS,
FAIL_SLOPPY],
- 'language/statements/let/global-closure-get-before-initialization':
[PASS, FAIL_SLOPPY],
- 'language/statements/let/global-closure-set-before-initialization':
[PASS, FAIL_SLOPPY],
- 'language/statements/let/syntax/let': [PASS, FAIL_SLOPPY],
- 'language/statements/let/syntax/let-closure-inside-condition': [PASS,
FAIL_SLOPPY],
- 'language/statements/let/syntax/let-closure-inside-initialization':
[PASS, FAIL_SLOPPY],
- 'language/statements/let/syntax/let-closure-inside-next-expression':
[PASS, FAIL_SLOPPY],
- 'language/statements/let/syntax/let-iteration-variable-is-freshly-allocated-for-each-iteration-multi-let-binding':
[PASS,
FAIL_SLOPPY],
- 'language/statements/let/syntax/let-iteration-variable-is-freshly-allocated-for-each-iteration-single-let-binding':
[PASS,
FAIL_SLOPPY],
- 'language/statements/let/syntax/let-outer-inner-let-bindings': [PASS,
FAIL_SLOPPY],
- 'language/statements/let/syntax/with-initialisers-in-statement-positions-case-expression-statement-list':
[PASS,
FAIL_SLOPPY],
- 'language/statements/let/syntax/with-initialisers-in-statement-positions-default-statement-list':
[PASS,
FAIL_SLOPPY],
- 'language/statements/let/syntax/without-initialisers-in-statement-positions-case-expression-statement-list':
[PASS,
FAIL_SLOPPY],
- 'language/statements/let/syntax/without-initialisers-in-statement-positions-default-statement-list':
[PASS,
FAIL_SLOPPY],
+
# https://code.google.com/p/v8/issues/detail?id=3305
# This times out in sloppy mode because sloppy const assignment does not
throw.
'language/statements/const/syntax/const-invalid-assignment-next-expression-for':
[PASS,
FAIL, TIMEOUT],
+ # https://code.google.com/p/v8/issues/detail?id=4403
+ 'language/statements/let/syntax/identifier-let-disallowed-as-boundname':
[PASS, FAIL_SLOPPY],
+
# Number/Boolean.prototype is a plain object in ES6
# https://code.google.com/p/v8/issues/detail?id=4001
'built-ins/Boolean/prototype/S15.6.3.1_A1': [FAIL],
--
--
v8-dev mailing list
v8-dev@googlegroups.com
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to v8-dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.