// Copyright 2017 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Flags: --preparser-scope-analysis // Tests for cases where PreParser must bail out of creating data for skipping // inner functions, since it cannot replicate the Scope structure created by // Parser. function TestBailoutBecauseOfSloppyEvalInArrowParams() { let bailout = (a = function() {}, b = eval('')) => 0 bailout(); function not_skippable() {} } TestBailoutBecauseOfSloppyEvalInArrowParams(); function TestBailoutBecauseOfSloppyEvalInArrowParams2() { let bailout = (a = function() {}, b = eval('')) => {} bailout(); function not_skippable() {} } TestBailoutBecauseOfSloppyEvalInArrowParams2(); function TestBailoutBecauseOfSloppyEvalInParams() { function bailout(a = function() {}, b = eval('')) { function not_skippable() {} } bailout(); function not_skippable_either() {} } TestBailoutBecauseOfSloppyEvalInParams(); // Test bailing out from 2 places. function TestMultiBailout1() { function bailout(a = function() {}, b = eval('')) { function not_skippable() {} } bailout(); function bailout_too(a = function() {}, b = eval('')) { function not_skippable_either() {} } bailout_too(); } TestMultiBailout1(); function TestMultiBailout2() { function f(a = function() {}, b = eval('')) { function not_skippable() {} } f(); function not_skippable_either() { function bailout_too(a = function() {}, b = eval('')) { function inner_not_skippable() {} } bailout_too(); } not_skippable_either(); } TestMultiBailout2(); function TestMultiBailout3() { function bailout(a = function() {}, b = eval('')) { function bailout_too(a = function() {}, b = eval('')) { function not_skippable() {} } bailout_too(); } bailout(); function not_skippable_either() {} } TestMultiBailout3(); // Regression test for // https://bugs.chromium.org/p/chromium/issues/detail?id=761980. The conditions // triggering a bailout occur in a context where we're not generating data // anyway (inside an arrow function). (This needs to be at top level.) x => { (y=eval()) => {} }