//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------

// This is a sketchy test because it relies on knowing that the following pattern
// hits the heuristics that decide to cache the scopes within the generator function.
// If those heuristics were to change this test could no longer be hitting the
// desired code paths.  If you suspect it is not hitting the cached scope code paths
// dump the bytecode and check for InitCachedScope and LdHeapArgsCached opcodes.
var o = {
    gf: function* () {
        var _a = 'pas';
        function a() { return _a; }
        return eval('a()') + arguments[0];
    }
};

function test() {
    for (var i = 0; i < 3; i += 1) {
        var g = o.gf('sed');
        WScript.Echo(g.next().value);
    }
}

test();
