/*===
true
false
===*/

/* The function constructed with Function constructor does not inherit
 * its parent's strictness.  Strictness is determined only based on
 * the function body itself (i.e., the presence of a 'use strict').
 */

function f() {
    'use strict';

    // non-strict: this=global -> !this=false
    var g = new Function('print(!this)');

    // strict: this=undefined -> !this=true
    print(!this);
    g();
}

try {
    f();
} catch (e) {
    print(e.name);
}

