/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */

/*
 * Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/licenses/publicdomain/
 */

/* Direct calls to eval should inherit the strictness of the calling code. */
assertEq(testLenientAndStrict("eval('010')",
                              completesNormally,
                              raisesException(SyntaxError)),
         true);

/*
 * Directives in the eval code itself should always override a direct
 * caller's strictness.
 */
assertEq(testLenientAndStrict("eval('\"use strict\"; 010')",
                              raisesException(SyntaxError),
                              raisesException(SyntaxError)),
         true);

/* Code passed to indirect calls to eval should never be strict. */
assertEq(testLenientAndStrict("var evil=eval; evil('010')",
                              completesNormally,
                              completesNormally),
         true);

/*
 * Code passed to the Function constructor never inherits the caller's
 * strictness.
 */
assertEq(completesNormally("Function('010')"),
         true);
assertEq(raisesException(SyntaxError)("Function('\"use strict\"; 010')"),
         true);

/*
 * If 'eval' causes a frame's primitive |this| to become wrapped, the frame should see the same
 * wrapper object as the eval code.
 */
var call_this, eval_this;
function f(code) {
  /*
   * At this point, a primitive |this| has not yet been wrapped. A
   * reference to |this| from the eval call should wrap it, and the wrapper
   * should be stored where the call frame can see it.
   */
  eval(code);
  call_this = this; 
}
f.call(true, 'eval_this = this');
assertEq(call_this, eval_this);

reportCompare(true, true);
