| // 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()) => {} } |