/*
 * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 * 
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.
 * 
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 * 
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 * 
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

/**
 * JDK-8057691: Nashorn: let & const declarations are not shared between scripts
 *
 * @test
 * @run
 * @option -scripting
 * @option --language=es6
 */

load(__DIR__ + "lexical-toplevel-def.js");

var global = this;

function tryIt (code) {
    try {
        eval(code)
    } catch (e) {
        print(String(e).replace(/\\/g, "/"))
    }
}

function loadScript(script) {
    print(script);
    try {
        load(__DIR__ + script);
    } catch (e) {
        print(String(e).replace(/\\/g, "/"));
    }
    print(VAR);
    print(LET);
    print(CONST);
    print(FUNC);
    print(GLOBAL);
    print(global.VAR);
    print(global.LET);
    print(global.CONST);
    print(global.FUNC);
    print(global.GLOBAL);
    try {
        print(SHOULD_NOT_EXIST);
    } catch (e) {
        print(String(e).replace(/\\/g, "/"));
    }
    print(global.SHOULD_NOT_EXIST);
    print(Object);
    print(global.Object);
    print();
}

loadScript("lexical-toplevel-redeclare-var-on-let.js");
loadScript("lexical-toplevel-redeclare-func-on-let.js");
loadScript("lexical-toplevel-redeclare-let-on-var.js");
loadScript("lexical-toplevel-redeclare-let-on-func.js");
loadScript("lexical-toplevel-redeclare-let-on-builtin.js");
loadScript("lexical-toplevel-redeclare-let-on-global.js");
