// Copyright 2016 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: --allow-natives-syntax --gc-global(functionTestGCDuringToObjectForWith(){functionf(o){if(o=='warmup'){returng()}with(o){returnx}}functiong(){// Only a marker function serving as weak embedded object.}// Warm up 'f' so that weak embedded object 'g' will be used.f('warmup');f('warmup');g=null;// Test that 'f' behaves correctly unoptimized.assertEquals(23,f({x:23}));assertEquals(42,f({x:42}));// Test that 'f' behaves correctly optimized.%OptimizeFunctionOnNextCall(f);assertEquals(65,f({x:65}));// Test that 'f' behaves correctly on numbers.Number.prototype.x=99;assertEquals(99,f(0));// Make sure the next [[ToObject]] allocation triggers GC. This in turn will// deoptimize 'f' because it has the weak embedded object 'g' in the code.%SetAllocationTimeout(1000,1,false);assertEquals(99,f(0));})();