From: littledan Date: Sat, 25 Jul 2015 00:05:08 +0000 (-0700) Subject: Split off a separate --harmony_sloppy_let flag X-Git-Tag: upstream/4.7.83~1185 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2d2b72f6382df11056fb9c39da0581be85510459;p=platform%2Fupstream%2Fv8.git Split off a separate --harmony_sloppy_let flag --harmony_sloppy includes behavior to turn on sloppy mode lexical bindings. Before this patch, it also included a way to parse let which is likely web-incompatible (let is disallowed as an identifier). This patch splits off the let parsing from the more general block scoping code, so that block scoping can be developed independently. R=adamk LOG=N BUG=v8:3305 Review URL: https://codereview.chromium.org/1255013002 Cr-Commit-Position: refs/heads/master@{#29855} --- diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc index db05e3e8..71b61e6 100644 --- a/src/bootstrapper.cc +++ b/src/bootstrapper.cc @@ -1864,6 +1864,7 @@ EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_regexps) EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_arrow_functions) EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_tostring) EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_sloppy) +EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_sloppy_let) EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_unicode) EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_unicode_regexps) EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_computed_property_names) @@ -1900,6 +1901,7 @@ EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_array_includes) EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_arrow_functions) EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_proxies) EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_sloppy) +EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_sloppy_let) EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_unicode) EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_computed_property_names) EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_rest_parameters) @@ -2578,6 +2580,7 @@ bool Genesis::InstallExperimentalNatives() { static const char* harmony_tostring_natives[] = {"native harmony-tostring.js", nullptr}; static const char* harmony_sloppy_natives[] = {nullptr}; + static const char* harmony_sloppy_let_natives[] = {nullptr}; static const char* harmony_unicode_natives[] = {nullptr}; static const char* harmony_unicode_regexps_natives[] = {nullptr}; static const char* harmony_computed_property_names_natives[] = {nullptr}; diff --git a/src/flag-definitions.h b/src/flag-definitions.h index 787537e..9c1b214 100644 --- a/src/flag-definitions.h +++ b/src/flag-definitions.h @@ -191,6 +191,7 @@ 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, "harmony features in sloppy mode") \ + 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") \ @@ -240,6 +241,7 @@ HARMONY_SHIPPING(FLAG_SHIPPING_FEATURES) // Feature dependencies. DEFINE_IMPLICATION(harmony_unicode_regexps, harmony_unicode) +DEFINE_IMPLICATION(harmony_sloppy_let, harmony_sloppy) // Flags for experimental implementation features. diff --git a/src/parser.cc b/src/parser.cc index 8d1bd88..027880c 100644 --- a/src/parser.cc +++ b/src/parser.cc @@ -913,6 +913,7 @@ Parser::Parser(ParseInfo* info) set_allow_harmony_modules(!info->is_native() && FLAG_harmony_modules); set_allow_harmony_arrow_functions(FLAG_harmony_arrow_functions); set_allow_harmony_sloppy(FLAG_harmony_sloppy); + set_allow_harmony_sloppy_let(FLAG_harmony_sloppy_let); set_allow_harmony_unicode(FLAG_harmony_unicode); set_allow_harmony_computed_property_names( FLAG_harmony_computed_property_names); @@ -4459,6 +4460,7 @@ PreParser::PreParseResult Parser::ParseLazyFunctionBodyWithPreParser( SET_ALLOW(harmony_modules); SET_ALLOW(harmony_arrow_functions); SET_ALLOW(harmony_sloppy); + SET_ALLOW(harmony_sloppy_let); SET_ALLOW(harmony_unicode); SET_ALLOW(harmony_computed_property_names); SET_ALLOW(harmony_rest_params); diff --git a/src/preparser.h b/src/preparser.h index e652a1f..18a0162 100644 --- a/src/preparser.h +++ b/src/preparser.h @@ -101,6 +101,7 @@ class ParserBase : public Traits { allow_natives_(false), allow_harmony_arrow_functions_(false), allow_harmony_sloppy_(false), + allow_harmony_sloppy_let_(false), allow_harmony_computed_property_names_(false), allow_harmony_rest_params_(false), allow_harmony_spreadcalls_(false), @@ -118,6 +119,7 @@ class ParserBase : public Traits { ALLOW_ACCESSORS(natives); ALLOW_ACCESSORS(harmony_arrow_functions); ALLOW_ACCESSORS(harmony_sloppy); + ALLOW_ACCESSORS(harmony_sloppy_let); ALLOW_ACCESSORS(harmony_computed_property_names); ALLOW_ACCESSORS(harmony_rest_params); ALLOW_ACCESSORS(harmony_spreadcalls); @@ -504,7 +506,7 @@ class ParserBase : public Traits { } bool allow_let() { - return is_strict(language_mode()) || allow_harmony_sloppy(); + return is_strict(language_mode()) || allow_harmony_sloppy_let(); } // Report syntax errors. @@ -797,6 +799,7 @@ class ParserBase : public Traits { bool allow_natives_; bool allow_harmony_arrow_functions_; bool allow_harmony_sloppy_; + bool allow_harmony_sloppy_let_; bool allow_harmony_computed_property_names_; bool allow_harmony_rest_params_; bool allow_harmony_spreadcalls_; diff --git a/test/cctest/test-parsing.cc b/test/cctest/test-parsing.cc index 703f74d..5c78f43 100644 --- a/test/cctest/test-parsing.cc +++ b/test/cctest/test-parsing.cc @@ -1431,6 +1431,7 @@ enum ParserFlag { kAllowHarmonyArrowFunctions, kAllowHarmonyRestParameters, kAllowHarmonySloppy, + kAllowHarmonySloppyLet, kAllowHarmonyUnicode, kAllowHarmonyComputedPropertyNames, kAllowHarmonySpreadCalls, @@ -1461,6 +1462,7 @@ void SetParserFlags(i::ParserBase* parser, parser->set_allow_harmony_spreadcalls( flags.Contains(kAllowHarmonySpreadCalls)); parser->set_allow_harmony_sloppy(flags.Contains(kAllowHarmonySloppy)); + parser->set_allow_harmony_sloppy_let(flags.Contains(kAllowHarmonySloppyLet)); parser->set_allow_harmony_unicode(flags.Contains(kAllowHarmonyUnicode)); parser->set_allow_harmony_computed_property_names( flags.Contains(kAllowHarmonyComputedPropertyNames)); @@ -6841,7 +6843,8 @@ TEST(LetSloppy) { }; // clang-format on - static const ParserFlag always_flags[] = {kAllowHarmonySloppy}; + static const ParserFlag always_flags[] = {kAllowHarmonySloppy, + kAllowHarmonySloppyLet}; RunParserSyncTest(context_data, data, kSuccess, NULL, 0, always_flags, arraysize(always_flags)); } diff --git a/test/mjsunit/harmony/block-conflicts-sloppy.js b/test/mjsunit/harmony/block-conflicts-sloppy.js index 25694ed..14dc242 100644 --- a/test/mjsunit/harmony/block-conflicts-sloppy.js +++ b/test/mjsunit/harmony/block-conflicts-sloppy.js @@ -4,7 +4,7 @@ // Test for conflicting variable bindings. -// Flags: --no-legacy-const --harmony-sloppy +// Flags: --no-legacy-const --harmony-sloppy --harmony-sloppy-let function CheckException(e) { var string = e.toString(); diff --git a/test/mjsunit/harmony/block-const-assign-sloppy.js b/test/mjsunit/harmony/block-const-assign-sloppy.js index 56300a8..d8e62f6 100644 --- a/test/mjsunit/harmony/block-const-assign-sloppy.js +++ b/test/mjsunit/harmony/block-const-assign-sloppy.js @@ -26,7 +26,7 @@ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // Flags: --harmony-computed-property-names -// Flags: --no-legacy-const --harmony-sloppy +// Flags: --no-legacy-const --harmony-sloppy --harmony-sloppy-let // Test that we throw early syntax errors in harmony mode // when using an immutable binding in an assigment or with diff --git a/test/mjsunit/harmony/block-for-sloppy.js b/test/mjsunit/harmony/block-for-sloppy.js index 374c450..eee8e0b 100644 --- a/test/mjsunit/harmony/block-for-sloppy.js +++ b/test/mjsunit/harmony/block-for-sloppy.js @@ -25,7 +25,7 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// Flags: --no-legacy-const --harmony-sloppy +// Flags: --no-legacy-const --harmony-sloppy --harmony-sloppy-let function props(x) { var array = []; diff --git a/test/mjsunit/harmony/block-leave-sloppy.js b/test/mjsunit/harmony/block-leave-sloppy.js index 23e9fa1..fe21341 100644 --- a/test/mjsunit/harmony/block-leave-sloppy.js +++ b/test/mjsunit/harmony/block-leave-sloppy.js @@ -25,7 +25,7 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// Flags: --no-legacy-const --harmony-sloppy +// Flags: --no-legacy-const --harmony-sloppy --harmony-sloppy-let // We want to test the context chain shape. In each of the tests cases // below, the outer with is to force a runtime lookup of the identifier 'x' diff --git a/test/mjsunit/harmony/block-let-crankshaft-sloppy.js b/test/mjsunit/harmony/block-let-crankshaft-sloppy.js index ed8c815..dc5cdfb 100644 --- a/test/mjsunit/harmony/block-let-crankshaft-sloppy.js +++ b/test/mjsunit/harmony/block-let-crankshaft-sloppy.js @@ -26,7 +26,7 @@ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // Flags: --allow-natives-syntax -// Flags: --no-legacy-const --harmony-sloppy +// Flags: --no-legacy-const --harmony-sloppy --harmony-sloppy-let // Check that the following functions are optimizable. var functions = [ f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, diff --git a/test/mjsunit/harmony/block-let-declaration-sloppy.js b/test/mjsunit/harmony/block-let-declaration-sloppy.js index e5913f8..9fdc4bd 100644 --- a/test/mjsunit/harmony/block-let-declaration-sloppy.js +++ b/test/mjsunit/harmony/block-let-declaration-sloppy.js @@ -27,7 +27,7 @@ // Test let declarations in various settings. -// Flags: --no-legacy-const --harmony-sloppy +// Flags: --no-legacy-const --harmony-sloppy --harmony-sloppy-let // Global let x; diff --git a/test/mjsunit/harmony/block-let-semantics-sloppy.js b/test/mjsunit/harmony/block-let-semantics-sloppy.js index 35aad30..33fdc45 100644 --- a/test/mjsunit/harmony/block-let-semantics-sloppy.js +++ b/test/mjsunit/harmony/block-let-semantics-sloppy.js @@ -25,7 +25,7 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// Flags: --harmony-sloppy --no-legacy-const +// Flags: --harmony-sloppy --no-legacy-const --harmony-sloppy-let // Test temporal dead zone semantics of let bound variables in // function and block scopes. diff --git a/test/mjsunit/harmony/block-scoping-sloppy.js b/test/mjsunit/harmony/block-scoping-sloppy.js index 19d1e9a..d1975df 100644 --- a/test/mjsunit/harmony/block-scoping-sloppy.js +++ b/test/mjsunit/harmony/block-scoping-sloppy.js @@ -25,7 +25,7 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// Flags: --allow-natives-syntax --harmony-sloppy --no-legacy-const +// Flags: --allow-natives-syntax --harmony-sloppy --no-legacy-const --harmony-sloppy-let // Test functionality of block scopes. // Hoisting of var declarations. diff --git a/test/mjsunit/harmony/block-scoping-top-level-sloppy.js b/test/mjsunit/harmony/block-scoping-top-level-sloppy.js index f86e1a1..74492c4 100644 --- a/test/mjsunit/harmony/block-scoping-top-level-sloppy.js +++ b/test/mjsunit/harmony/block-scoping-top-level-sloppy.js @@ -3,7 +3,7 @@ // found in the LICENSE file. // Flags: --min-preparse-length=0 -// Flags: --no-legacy-const --harmony-sloppy +// Flags: --no-legacy-const --harmony-sloppy --harmony-sloppy-let let xxx = 1; let f = undefined;