/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ /* * Any copyright is dedicated to the Public Domain. * http://creativecommons.org/licenses/publicdomain/ */ function callFunctionBody(expr) { return ( '(function f() {\n' + 'Object.defineProperties(arguments, {1: { writable: false },\n' + ' 2: { configurable: false },\n' + ' 3: { writable: false,\n' + ' configurable: false }});\n' + 'return (' + expr + ');\n' + '})(0, 1, 2, 3);'); } assertEq(testLenientAndStrict(callFunctionBody('arguments[0] = 42'), returns(42), returns(42)), true); assertEq(testLenientAndStrict(callFunctionBody('delete arguments[0]'), returns(true), returns(true)), true); assertEq(testLenientAndStrict(callFunctionBody('arguments[1] = 42'), returns(42), raisesException(TypeError)), true); assertEq(testLenientAndStrict(callFunctionBody('delete arguments[1]'), returns(true), returns(true)), true); assertEq(testLenientAndStrict(callFunctionBody('arguments[2] = 42'), returns(42), returns(42)), true); assertEq(testLenientAndStrict(callFunctionBody('delete arguments[2]'), returns(false), raisesException(TypeError)), true); assertEq(testLenientAndStrict(callFunctionBody('arguments[3] = 42'), returns(42), raisesException(TypeError)), true); assertEq(testLenientAndStrict(callFunctionBody('delete arguments[3]'), returns(false), raisesException(TypeError)), true); reportCompare(true, true);