/*
 *  Some 'arguments' binding tests
 */

/*===
object
number
object
false
object
===*/

/* A non-strict 'arguments' binding is writable but not deletable. */

function arguments_write() {
    print(typeof arguments);
    arguments = 1;
    print(typeof arguments);
}

function arguments_delete() {
    print(typeof arguments);
    print(delete arguments);
    print(typeof arguments);
}

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

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

/*===
SyntaxError
SyntaxError
===*/

/* A strict 'arguments' binding is immutable.  It cannot be deleted nor can
 * it be assigned to; doing so would be a SyntaxError.
 *
 * XXX: how to test that the binding is actually immutable, as it is a
 * SyntaxError trying to delete it or assign to it?  Even an eval() call
 * does not work: the eval will be parsed in strict mode too.
 */

try {
    eval("function arguments_strict_delete() { 'use strict'; delete arguments; }");
} catch (e) {
    print(e.name);
}

try {
    eval("function arguments_strict_delete() { 'use strict'; arguments = 1; }");
} catch (e) {
    print(e.name);
}

