Index: test/mjsunit/strict-mode.js |
diff --git a/test/mjsunit/strict-mode.js b/test/mjsunit/strict-mode.js |
index a0320c065212378e2e9472853daa1b2daaa44769..f871430232901b010c3e82e836e53e952d06f75f 100644 |
--- a/test/mjsunit/strict-mode.js |
+++ b/test/mjsunit/strict-mode.js |
@@ -978,20 +978,7 @@ repeat(10, function() { testAssignToUndefined(false); }); |
})(); |
-(function TestStrictFunctionPills() { |
- function strict() { |
- "use strict"; |
- } |
- assertThrows(function() { strict.caller; }, TypeError); |
- assertThrows(function() { strict.arguments; }, TypeError); |
- |
- var another = new Function("'use strict'"); |
- assertThrows(function() { another.caller; }, TypeError); |
- assertThrows(function() { another.arguments; }, TypeError); |
- |
- var third = (function() { "use strict"; return function() {}; })(); |
- assertThrows(function() { third.caller; }, TypeError); |
- assertThrows(function() { third.arguments; }, TypeError); |
+function CheckPillDescriptor(func, name) { |
function CheckPill(pill) { |
assertEquals("function", typeof pill); |
@@ -1005,13 +992,28 @@ repeat(10, function() { testAssignToUndefined(false); }); |
assertFalse(d.enumerable); |
} |
- function CheckPillDescriptor(func, name) { |
- var descriptor = Object.getOwnPropertyDescriptor(func, name); |
- CheckPill(descriptor.get) |
- CheckPill(descriptor.set); |
- assertFalse(descriptor.enumerable); |
- assertFalse(descriptor.configurable); |
+ var descriptor = Object.getOwnPropertyDescriptor(func, name); |
+ CheckPill(descriptor.get) |
+ CheckPill(descriptor.set); |
+ assertFalse(descriptor.enumerable); |
+ assertFalse(descriptor.configurable); |
+} |
+ |
+ |
+(function TestStrictFunctionPills() { |
+ function strict() { |
+ "use strict"; |
} |
+ assertThrows(function() { strict.caller; }, TypeError); |
+ assertThrows(function() { strict.arguments; }, TypeError); |
+ |
+ var another = new Function("'use strict'"); |
+ assertThrows(function() { another.caller; }, TypeError); |
+ assertThrows(function() { another.arguments; }, TypeError); |
+ |
+ var third = (function() { "use strict"; return function() {}; })(); |
+ assertThrows(function() { third.caller; }, TypeError); |
+ assertThrows(function() { third.arguments; }, TypeError); |
CheckPillDescriptor(strict, "caller"); |
CheckPillDescriptor(strict, "arguments"); |
@@ -1020,3 +1022,41 @@ repeat(10, function() { testAssignToUndefined(false); }); |
CheckPillDescriptor(third, "caller"); |
CheckPillDescriptor(third, "arguments"); |
})(); |
+ |
+ |
+(function TestStrictArgumentPills() { |
+ function strict() { |
+ "use strict"; |
+ return arguments; |
+ } |
+ |
+ var args = strict(); |
+ CheckPillDescriptor(args, "caller"); |
+ CheckPillDescriptor(args, "callee"); |
+ |
+ args = strict(17, "value", strict); |
+ assertEquals(17, args[0]) |
+ assertEquals("value", args[1]) |
+ assertEquals(strict, args[2]); |
+ CheckPillDescriptor(args, "caller"); |
+ CheckPillDescriptor(args, "callee"); |
+ |
+ function outer() { |
+ "use strict"; |
+ function inner() { |
+ return arguments; |
+ } |
+ return inner; |
+ } |
+ |
+ var args = outer()(); |
+ CheckPillDescriptor(args, "caller"); |
+ CheckPillDescriptor(args, "callee"); |
+ |
+ args = outer()(17, "value", strict); |
+ assertEquals(17, args[0]) |
+ assertEquals("value", args[1]) |
+ assertEquals(strict, args[2]); |
+ CheckPillDescriptor(args, "caller"); |
+ CheckPillDescriptor(args, "callee"); |
+})(); |