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

//-----------------------------------------------------------------------------
var BUGNUMBER = 1111101;
var summary =
  "delete (foo), delete ((foo)), and so on are strict mode early errors";

print(BUGNUMBER + ": " + summary);

/**************
 * BEGIN TEST *
 **************/

function checkSyntaxError(code)
{
  function helper(maker)
  {
    var earlyError = false;
    try
    {
      var f = maker(code);

      var error = "no early error, created a function with code <" + code + ">";
      try
      {
        f();
        error += ", and the function can be called without error";
      }
      catch (e)
      {
        error +=", and calling the function throws " + e;
      }

      throw new Error(error);
    }
    catch (e)
    {
      assertEq(e instanceof SyntaxError, true,
               "expected syntax error, got " + e);
    }
  }

  helper(Function);
  helper(eval);
}

checkSyntaxError("function f() { 'use strict'; delete escape; } f();");
checkSyntaxError("function f() { 'use strict'; delete escape; }");
checkSyntaxError("function f() { 'use strict'; delete (escape); } f();");
checkSyntaxError("function f() { 'use strict'; delete (escape); }");
checkSyntaxError("function f() { 'use strict'; delete ((escape)); } f();");
checkSyntaxError("function f() { 'use strict'; delete ((escape)); }");

// Meanwhile, non-strict all of these should work

function checkFine(code)
{
  Function(code);
  (1, eval)(code); // indirect, to be consistent w/above
}

checkFine("function f() { delete escape; } f();");
checkFine("function f() { delete escape; }");
checkFine("function f() { delete (escape); } f();");
checkFine("function f() { delete (escape); }");
checkFine("function f() { delete ((escape)); } f();");
checkFine("function f() { delete ((escape)); }");


/******************************************************************************/

if (typeof reportCompare === "function")
  reportCompare(true, true);

print("Tests complete");
