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.

Reply via email to