(function(){"use strict";echo("hasOwnProperty(caller): ", arguments.hasOwnProperty("caller"));})();
hasOwnProperty(caller): true

var foo = function(){"use strict";};(function(){echo("hasOwnProperty(caller): ", foo.hasOwnProperty("caller"));})();
hasOwnProperty(caller): false

var foo = function(){"use strict";};(function(){"use strict";echo("hasOwnProperty(caller): ", foo.hasOwnProperty("caller"));})();
hasOwnProperty(caller): false

(function(){"use strict";echo("hasOwnProperty(callee): ", arguments.hasOwnProperty("callee"));})();
hasOwnProperty(callee): true

var foo = function(){"use strict";};(function(){echo("hasOwnProperty(arguments): ", foo.hasOwnProperty("arguments"));})();
hasOwnProperty(arguments): false

var foo = function(){"use strict";};(function(){"use strict";echo("hasOwnProperty(arguments): ", foo.hasOwnProperty("arguments"));})();
hasOwnProperty(arguments): false

(function(){"use strict";arguments.caller;})();
TypeError: 'arguments', 'callee' and 'caller' are restricted function properties and cannot be accessed in this context

var foo = function(){"use strict";};(function(){foo.caller;})();
TypeError: 'arguments', 'callee' and 'caller' are restricted function properties and cannot be accessed in this context

var foo = function(){"use strict";};(function(){"use strict";foo.caller;})();
TypeError: 'arguments', 'callee' and 'caller' are restricted function properties and cannot be accessed in this context

(function(){"use strict";arguments.callee;})();
TypeError: 'arguments', 'callee' and 'caller' are restricted function properties and cannot be accessed in this context

var foo = function(){"use strict";};(function(){foo.arguments;})();
TypeError: 'arguments', 'callee' and 'caller' are restricted function properties and cannot be accessed in this context

var foo = function(){"use strict";};(function(){"use strict";foo.arguments;})();
TypeError: 'arguments', 'callee' and 'caller' are restricted function properties and cannot be accessed in this context

(function(){"use strict";arguments.caller = 0;})();
TypeError: 'arguments', 'callee' and 'caller' are restricted function properties and cannot be accessed in this context

var foo = function(){"use strict";};(function(){foo.caller = 0;})();
TypeError: 'arguments', 'callee' and 'caller' are restricted function properties and cannot be accessed in this context

var foo = function(){"use strict";};(function(){"use strict";foo.caller = 0;})();
TypeError: 'arguments', 'callee' and 'caller' are restricted function properties and cannot be accessed in this context

(function(){"use strict";arguments.callee = 0;})();
TypeError: 'arguments', 'callee' and 'caller' are restricted function properties and cannot be accessed in this context

var foo = function(){"use strict";};(function(){foo.arguments = 0;})();
TypeError: 'arguments', 'callee' and 'caller' are restricted function properties and cannot be accessed in this context

var foo = function(){"use strict";};(function(){"use strict";foo.arguments = 0;})();
TypeError: 'arguments', 'callee' and 'caller' are restricted function properties and cannot be accessed in this context

(function(){"use strict";Object.defineProperty(arguments, "caller", {value: 0});})();
TypeError: Cannot redefine non-configurable property 'caller'

var foo = function(){"use strict";};(function(){Object.defineProperty(foo, "caller", {value: 0});})();

var foo = function(){"use strict";};(function(){"use strict";Object.defineProperty(foo, "caller", {value: 0});})();

(function(){"use strict";Object.defineProperty(arguments, "callee", {value: 0});})();
TypeError: Cannot redefine non-configurable property 'callee'

var foo = function(){"use strict";};(function(){Object.defineProperty(foo, "arguments", {value: 0});})();

var foo = function(){"use strict";};(function(){"use strict";Object.defineProperty(foo, "arguments", {value: 0});})();

(function(){"use strict";var descriptor = Object.getOwnPropertyDescriptor(arguments, "caller");if(descriptor.hasOwnProperty("get")) safeCall(descriptor.get);if(descriptor.hasOwnProperty("set")) safeCall(descriptor.set);})();
TypeError: 'arguments', 'callee' and 'caller' are restricted function properties and cannot be accessed in this context
TypeError: 'arguments', 'callee' and 'caller' are restricted function properties and cannot be accessed in this context

var foo = function(){"use strict";};(function(){var descriptor = Object.getOwnPropertyDescriptor(foo, "caller");if(descriptor.hasOwnProperty("get")) safeCall(descriptor.get);if(descriptor.hasOwnProperty("set")) safeCall(descriptor.set);})();
TypeError: Unable to get property 'hasOwnProperty' of undefined or null reference

var foo = function(){"use strict";};(function(){"use strict";var descriptor = Object.getOwnPropertyDescriptor(foo, "caller");if(descriptor.hasOwnProperty("get")) safeCall(descriptor.get);if(descriptor.hasOwnProperty("set")) safeCall(descriptor.set);})();
TypeError: Unable to get property 'hasOwnProperty' of undefined or null reference

(function(){"use strict";var descriptor = Object.getOwnPropertyDescriptor(arguments, "callee");if(descriptor.hasOwnProperty("get")) safeCall(descriptor.get);if(descriptor.hasOwnProperty("set")) safeCall(descriptor.set);})();
TypeError: 'arguments', 'callee' and 'caller' are restricted function properties and cannot be accessed in this context
TypeError: 'arguments', 'callee' and 'caller' are restricted function properties and cannot be accessed in this context

var foo = function(){"use strict";};(function(){var descriptor = Object.getOwnPropertyDescriptor(foo, "arguments");if(descriptor.hasOwnProperty("get")) safeCall(descriptor.get);if(descriptor.hasOwnProperty("set")) safeCall(descriptor.set);})();
TypeError: Unable to get property 'hasOwnProperty' of undefined or null reference

var foo = function(){"use strict";};(function(){"use strict";var descriptor = Object.getOwnPropertyDescriptor(foo, "arguments");if(descriptor.hasOwnProperty("get")) safeCall(descriptor.get);if(descriptor.hasOwnProperty("set")) safeCall(descriptor.set);})();
TypeError: Unable to get property 'hasOwnProperty' of undefined or null reference

