10a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// Copyright 2011 the V8 project authors. All rights reserved. 20a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// Redistribution and use in source and binary forms, with or without 30a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// modification, are permitted provided that the following conditions are 40a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// met: 50a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// 60a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// * Redistributions of source code must retain the above copyright 70a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// notice, this list of conditions and the following disclaimer. 80a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// * Redistributions in binary form must reproduce the above 90a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// copyright notice, this list of conditions and the following 100a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// disclaimer in the documentation and/or other materials provided 110a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// with the distribution. 120a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// * Neither the name of Google Inc. nor the names of its 130a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// contributors may be used to endorse or promote products derived 140a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// from this software without specific prior written permission. 150a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// 160a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 170a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 180a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 190a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 200a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 210a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 220a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 230a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 240a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 250a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 260a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 270a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org 280a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.orgfunction CheckStrictMode(code, exception) { 290a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org assertDoesNotThrow(code); 300a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org assertThrows("'use strict';\n" + code, exception); 310a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org assertThrows('"use strict";\n' + code, exception); 320a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org assertDoesNotThrow("\ 330a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org function outer() {\ 340a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org function inner() {\n" 350a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org + code + 360a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org "\n}\ 370a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org }"); 380a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org assertThrows("\ 390a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org function outer() {\ 400a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org 'use strict';\ 410a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org function inner() {\n" 420a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org + code + 430a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org "\n}\ 440a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org }", exception); 450a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org} 460a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org 47378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.orgfunction CheckFunctionConstructorStrictMode() { 48378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org var args = []; 49378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org for (var i = 0; i < arguments.length; i ++) { 50378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org args[i] = arguments[i]; 51378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org } 52378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org // Create non-strict function. No exception. 53378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org args[arguments.length] = ""; 54378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org assertDoesNotThrow(function() { 55378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org Function.apply(this, args); 56378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org }); 57378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org // Create strict mode function. Exception expected. 58378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org args[arguments.length] = "'use strict';"; 59378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org assertThrows(function() { 60378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org Function.apply(this, args); 61378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org }, SyntaxError); 62378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org} 63378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org 640a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// Incorrect 'use strict' directive. 6531b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org(function UseStrictEscape() { 660a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org "use\\x20strict"; 670a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org with ({}) {}; 6831b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org})(); 690a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org 7004921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.org// Incorrectly place 'use strict' directive. 7104921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.orgassertThrows("function foo (x) 'use strict'; {}", SyntaxError); 7204921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.org 730a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// 'use strict' in non-directive position. 7431b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org(function UseStrictNonDirective() { 750a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org void(0); 760a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org "use strict"; 770a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org with ({}) {}; 7831b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org})(); 790a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org 800a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// Multiple directives, including "use strict". 810a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.orgassertThrows('\ 820a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org"directive 1";\ 830a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org"another directive";\ 840a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org"use strict";\ 850a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org"directive after strict";\ 860a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org"and one more";\ 870a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.orgwith({}) {}', SyntaxError); 880a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org 890a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// 'with' disallowed in strict mode. 900a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.orgCheckStrictMode("with({}) {}", SyntaxError); 910a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org 920a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// Function named 'eval'. 9331b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function eval() {}", SyntaxError); 940a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org 950a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// Function named 'arguments'. 9631b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function arguments() {}", SyntaxError); 970a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org 980a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// Function parameter named 'eval'. 9931b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function foo(a, b, eval, c, d) {}", SyntaxError); 1000a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org 1010a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// Function parameter named 'arguments'. 10231b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function foo(a, b, arguments, c, d) {}", SyntaxError); 1030a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org 1040a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// Property accessor parameter named 'eval'. 10531b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("var o = { set foo(eval) {} }", SyntaxError); 1060a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org 1070a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// Property accessor parameter named 'arguments'. 10831b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("var o = { set foo(arguments) {} }", SyntaxError); 1090a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org 1100a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// Duplicate function parameter name. 11131b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function foo(a, b, c, d, b) {}", SyntaxError); 112378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org 113378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org// Function constructor: eval parameter name. 11431b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckFunctionConstructorStrictMode("eval"); 115378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org 116378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org// Function constructor: arguments parameter name. 11731b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckFunctionConstructorStrictMode("arguments"); 118378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org 119378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org// Function constructor: duplicate parameter name. 12031b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckFunctionConstructorStrictMode("a", "b", "c", "b"); 12131b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckFunctionConstructorStrictMode("a,b,c,b"); 1220a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org 1230a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// catch(eval) 12431b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("try{}catch(eval){};", SyntaxError); 1250a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org 1260a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// catch(arguments) 12731b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("try{}catch(arguments){};", SyntaxError); 1280a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org 1290a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// var eval 13031b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("var eval;", SyntaxError); 1310a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org 1320a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// var arguments 13331b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("var arguments;", SyntaxError); 1340a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org 1350a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// Strict mode applies to the function in which the directive is used.. 136378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.orgassertThrows('\ 137378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.orgfunction foo(eval) {\ 138378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org "use strict";\ 139378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org}', SyntaxError); 1400a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org 1410a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org// Strict mode doesn't affect the outer stop of strict code. 14231b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org(function NotStrict(eval) { 1430a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org function Strict() { 1440a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org "use strict"; 1450a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org } 1460a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org with ({}) {}; 14731b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org})(); 1480ee099beef2c2b38743d657b84a30b626d9178ecager@chromium.org 1490ee099beef2c2b38743d657b84a30b626d9178ecager@chromium.org// Octal literal 1500ee099beef2c2b38743d657b84a30b626d9178ecager@chromium.orgCheckStrictMode("var x = 012"); 1510ee099beef2c2b38743d657b84a30b626d9178ecager@chromium.orgCheckStrictMode("012"); 1520ee099beef2c2b38743d657b84a30b626d9178ecager@chromium.orgCheckStrictMode("'Hello octal\\032'"); 1530ee099beef2c2b38743d657b84a30b626d9178ecager@chromium.orgCheckStrictMode("function octal() { return 012; }"); 1540ee099beef2c2b38743d657b84a30b626d9178ecager@chromium.orgCheckStrictMode("function octal() { return '\\032'; }"); 1550ee099beef2c2b38743d657b84a30b626d9178ecager@chromium.org 15631b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org(function ValidEscape() { 15731b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org "use strict"; 15831b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org var x = '\0'; 15931b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org var y = "\0"; 16031b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org})(); 16131b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org 1620ee099beef2c2b38743d657b84a30b626d9178ecager@chromium.org// Octal before "use strict" 1630ee099beef2c2b38743d657b84a30b626d9178ecager@chromium.orgassertThrows('\ 1640ee099beef2c2b38743d657b84a30b626d9178ecager@chromium.org function strict() {\ 1650ee099beef2c2b38743d657b84a30b626d9178ecager@chromium.org "octal\\032directive";\ 1660ee099beef2c2b38743d657b84a30b626d9178ecager@chromium.org "use strict";\ 1670ee099beef2c2b38743d657b84a30b626d9178ecager@chromium.org }', SyntaxError); 168378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org 169a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org// Duplicate data properties. 170a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgCheckStrictMode("var x = { dupe : 1, nondupe: 3, dupe : 2 };", SyntaxError); 171a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgCheckStrictMode("var x = { '1234' : 1, '2345' : 2, '1234' : 3 };", SyntaxError); 172a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgCheckStrictMode("var x = { '1234' : 1, '2345' : 2, 1234 : 3 };", SyntaxError); 173a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgCheckStrictMode("var x = { 3.14 : 1, 2.71 : 2, 3.14 : 3 };", SyntaxError); 174a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgCheckStrictMode("var x = { 3.14 : 1, '3.14' : 2 };", SyntaxError); 175a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgCheckStrictMode("var x = { \ 176a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org 123: 1, \ 177a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org 123.00000000000000000000000000000000000000000000000000000000000000000001: 2 \ 178a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org}", SyntaxError); 179a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org 180378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org// Non-conflicting data properties. 18131b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org(function StrictModeNonDuplicate() { 182378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org "use strict"; 183378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org var x = { 123 : 1, "0123" : 2 }; 18449edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org var x = { 18549edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org 123: 1, 18649edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org '123.00000000000000000000000000000000000000000000000000000000000000000001': 18749edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org 2 18849edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org }; 18931b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org})(); 190378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org 191a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org// Two getters (non-strict) 192a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgassertThrows("var x = { get foo() { }, get foo() { } };", SyntaxError); 193a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgassertThrows("var x = { get foo(){}, get 'foo'(){}};", SyntaxError); 194a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgassertThrows("var x = { get 12(){}, get '12'(){}};", SyntaxError); 195a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org 196a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org// Two setters (non-strict) 197a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgassertThrows("var x = { set foo(v) { }, set foo(v) { } };", SyntaxError); 198a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgassertThrows("var x = { set foo(v) { }, set 'foo'(v) { } };", SyntaxError); 199a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgassertThrows("var x = { set 13(v) { }, set '13'(v) { } };", SyntaxError); 200a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org 201a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org// Setter and data (non-strict) 202a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgassertThrows("var x = { foo: 'data', set foo(v) { } };", SyntaxError); 203a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgassertThrows("var x = { set foo(v) { }, foo: 'data' };", SyntaxError); 204a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgassertThrows("var x = { foo: 'data', set 'foo'(v) { } };", SyntaxError); 205a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgassertThrows("var x = { set foo(v) { }, 'foo': 'data' };", SyntaxError); 206a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgassertThrows("var x = { 'foo': 'data', set foo(v) { } };", SyntaxError); 207a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgassertThrows("var x = { set 'foo'(v) { }, foo: 'data' };", SyntaxError); 208a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgassertThrows("var x = { 'foo': 'data', set 'foo'(v) { } };", SyntaxError); 209a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgassertThrows("var x = { set 'foo'(v) { }, 'foo': 'data' };", SyntaxError); 210a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgassertThrows("var x = { 12: 1, set '12'(v){}};", SyntaxError); 211a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgassertThrows("var x = { 12: 1, set 12(v){}};", SyntaxError); 212a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgassertThrows("var x = { '12': 1, set '12'(v){}};", SyntaxError); 213a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgassertThrows("var x = { '12': 1, set 12(v){}};", SyntaxError); 214a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org 215a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org// Getter and data (non-strict) 216a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgassertThrows("var x = { foo: 'data', get foo() { } };", SyntaxError); 217a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgassertThrows("var x = { get foo() { }, foo: 'data' };", SyntaxError); 218a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgassertThrows("var x = { 'foo': 'data', get foo() { } };", SyntaxError); 219a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgassertThrows("var x = { get 'foo'() { }, 'foo': 'data' };", SyntaxError); 220a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgassertThrows("var x = { '12': 1, get '12'(){}};", SyntaxError); 221a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.orgassertThrows("var x = { '12': 1, get 12(){}};", SyntaxError); 222378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org 223378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org// Assignment to eval or arguments 22431b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function strict() { eval = undefined; }", SyntaxError); 22531b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function strict() { arguments = undefined; }", SyntaxError); 22631b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function strict() { print(eval = undefined); }", SyntaxError); 22749edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.orgCheckStrictMode("function strict() { print(arguments = undefined); }", 22849edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org SyntaxError); 22931b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function strict() { var x = eval = undefined; }", SyntaxError); 23049edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.orgCheckStrictMode("function strict() { var x = arguments = undefined; }", 23149edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org SyntaxError); 232378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org 233378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org// Compound assignment to eval or arguments 23431b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function strict() { eval *= undefined; }", SyntaxError); 23531b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function strict() { arguments /= undefined; }", SyntaxError); 23631b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function strict() { print(eval %= undefined); }", SyntaxError); 23749edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.orgCheckStrictMode("function strict() { print(arguments %= undefined); }", 23849edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org SyntaxError); 23949edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.orgCheckStrictMode("function strict() { var x = eval += undefined; }", 24049edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org SyntaxError); 24149edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.orgCheckStrictMode("function strict() { var x = arguments -= undefined; }", 24249edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org SyntaxError); 24331b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function strict() { eval <<= undefined; }", SyntaxError); 24431b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function strict() { arguments >>= undefined; }", SyntaxError); 24549edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.orgCheckStrictMode("function strict() { print(eval >>>= undefined); }", 24649edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org SyntaxError); 24749edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.orgCheckStrictMode("function strict() { print(arguments &= undefined); }", 24849edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org SyntaxError); 24949edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.orgCheckStrictMode("function strict() { var x = eval ^= undefined; }", 25049edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org SyntaxError); 25149edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.orgCheckStrictMode("function strict() { var x = arguments |= undefined; }", 25249edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org SyntaxError); 253378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org 254378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org// Postfix increment with eval or arguments 25531b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function strict() { eval++; }", SyntaxError); 25631b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function strict() { arguments++; }", SyntaxError); 25731b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function strict() { print(eval++); }", SyntaxError); 25831b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function strict() { print(arguments++); }", SyntaxError); 25931b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function strict() { var x = eval++; }", SyntaxError); 26031b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function strict() { var x = arguments++; }", SyntaxError); 261378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org 262378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org// Postfix decrement with eval or arguments 26331b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function strict() { eval--; }", SyntaxError); 26431b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function strict() { arguments--; }", SyntaxError); 26531b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function strict() { print(eval--); }", SyntaxError); 26631b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function strict() { print(arguments--); }", SyntaxError); 26731b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function strict() { var x = eval--; }", SyntaxError); 26831b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function strict() { var x = arguments--; }", SyntaxError); 269378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org 270378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org// Prefix increment with eval or arguments 27131b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function strict() { ++eval; }", SyntaxError); 27231b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function strict() { ++arguments; }", SyntaxError); 27331b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function strict() { print(++eval); }", SyntaxError); 27431b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function strict() { print(++arguments); }", SyntaxError); 27531b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function strict() { var x = ++eval; }", SyntaxError); 27631b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function strict() { var x = ++arguments; }", SyntaxError); 277378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org 278378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org// Prefix decrement with eval or arguments 27931b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function strict() { --eval; }", SyntaxError); 28031b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function strict() { --arguments; }", SyntaxError); 28131b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function strict() { print(--eval); }", SyntaxError); 28231b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function strict() { print(--arguments); }", SyntaxError); 28331b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function strict() { var x = --eval; }", SyntaxError); 28431b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgCheckStrictMode("function strict() { var x = --arguments; }", SyntaxError); 285378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org 2869ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org// Use of const in strict mode is disallowed in anticipation of ES Harmony. 2879ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.orgCheckStrictMode("const x = 0;", SyntaxError); 2889ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.orgCheckStrictMode("for (const x = 0; false;) {}", SyntaxError); 2899ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.orgCheckStrictMode("function strict() { const x = 0; }", SyntaxError); 2909ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org 2919ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org// Strict mode only allows functions in SourceElements 2929ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.orgCheckStrictMode("if (true) { function invalid() {} }", SyntaxError); 2939ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.orgCheckStrictMode("for (;false;) { function invalid() {} }", SyntaxError); 2949ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.orgCheckStrictMode("{ function invalid() {} }", SyntaxError); 2959ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.orgCheckStrictMode("try { function invalid() {} } catch(e) {}", SyntaxError); 2969ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.orgCheckStrictMode("try { } catch(e) { function invalid() {} }", SyntaxError); 2979ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.orgCheckStrictMode("function outer() {{ function invalid() {} }}", SyntaxError); 2989ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org 29949edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org// Delete of an unqualified identifier 30049edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.orgCheckStrictMode("delete unqualified;", SyntaxError); 30149edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.orgCheckStrictMode("function strict() { delete unqualified; }", SyntaxError); 30249edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.orgCheckStrictMode("function function_name() { delete function_name; }", 30349edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org SyntaxError); 30449edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.orgCheckStrictMode("function strict(parameter) { delete parameter; }", 30549edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org SyntaxError); 30649edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.orgCheckStrictMode("function strict() { var variable; delete variable; }", 30749edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org SyntaxError); 30849edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.orgCheckStrictMode("var variable; delete variable;", SyntaxError); 30949edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org 3103a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org(function TestStrictDelete() { 3113a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org "use strict"; 3123a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org // "delete this" is allowed in strict mode and should work. 3133a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org function strict_delete() { delete this; } 3143a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org strict_delete(); 3153a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org})(); 3163a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 317378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org// Prefix unary operators other than delete, ++, -- are valid in strict mode 31831b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org(function StrictModeUnaryOperators() { 319378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org "use strict"; 320378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org var x = [void eval, typeof eval, +eval, -eval, ~eval, !eval]; 321378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org var y = [void arguments, typeof arguments, 322378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org +arguments, -arguments, ~arguments, !arguments]; 32331b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org})(); 32483aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org 32504921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.org// 7.6.1.2 Future Reserved Words in strict mode 32604921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.orgvar future_strict_reserved_words = [ 32783aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org "implements", 32883aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org "interface", 32983aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org "let", 33083aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org "package", 33183aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org "private", 33283aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org "protected", 33383aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org "public", 33483aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org "static", 33583aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org "yield" ]; 33683aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org 33704921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.orgfunction testFutureStrictReservedWord(word) { 33883aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org // Simple use of each reserved word 33983aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org CheckStrictMode("var " + word + " = 1;", SyntaxError); 34004921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.org CheckStrictMode("typeof (" + word + ");", SyntaxError); 34183aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org 34283aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org // object literal properties 34383aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org eval("var x = { " + word + " : 42 };"); 34483aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org eval("var x = { get " + word + " () {} };"); 34583aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org eval("var x = { set " + word + " (value) {} };"); 34604921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.org eval("var x = { get " + word + " () { 'use strict'; } };"); 34704921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.org eval("var x = { set " + word + " (value) { 'use strict'; } };"); 34883aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org 34983aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org // object literal with string literal property names 35083aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org eval("var x = { '" + word + "' : 42 };"); 35183aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org eval("var x = { get '" + word + "' () { } };"); 35283aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org eval("var x = { set '" + word + "' (value) { } };"); 35383aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org eval("var x = { get '" + word + "' () { 'use strict'; } };"); 35483aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org eval("var x = { set '" + word + "' (value) { 'use strict'; } };"); 35583aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org 35683aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org // Function names and arguments, strict and non-strict contexts 35783aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org CheckStrictMode("function " + word + " () {}", SyntaxError); 35883aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org CheckStrictMode("function foo (" + word + ") {}", SyntaxError); 35983aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org CheckStrictMode("function foo (" + word + ", " + word + ") {}", SyntaxError); 36083aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org CheckStrictMode("function foo (a, " + word + ") {}", SyntaxError); 36183aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org CheckStrictMode("function foo (" + word + ", a) {}", SyntaxError); 36283aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org CheckStrictMode("function foo (a, " + word + ", b) {}", SyntaxError); 36383aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org CheckStrictMode("var foo = function (" + word + ") {}", SyntaxError); 36483aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org 36583aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org // Function names and arguments when the body is strict 36683aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org assertThrows("function " + word + " () { 'use strict'; }", SyntaxError); 36749edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org assertThrows("function foo (" + word + ", " + word + ") { 'use strict'; }", 36849edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org SyntaxError); 36983aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org assertThrows("function foo (a, " + word + ") { 'use strict'; }", SyntaxError); 37083aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org assertThrows("function foo (" + word + ", a) { 'use strict'; }", SyntaxError); 37149edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org assertThrows("function foo (a, " + word + ", b) { 'use strict'; }", 37249edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org SyntaxError); 37349edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org assertThrows("var foo = function (" + word + ") { 'use strict'; }", 37449edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org SyntaxError); 37583aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org 37604921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.org // setter parameter when the body is strict 37704921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.org CheckStrictMode("var x = { set foo(" + word + ") {} };", SyntaxError); 37849edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org assertThrows("var x = { set foo(" + word + ") { 'use strict'; } };", 37949edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org SyntaxError); 38083aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org} 38183aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org 38204921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.orgfor (var i = 0; i < future_strict_reserved_words.length; i++) { 38304921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.org testFutureStrictReservedWord(future_strict_reserved_words[i]); 38483aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org} 38583aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org 38644bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.orgfunction testAssignToUndefined(test, should_throw) { 387496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org try { 38844bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org test(); 389496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org } catch (e) { 390496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org assertTrue(should_throw, "strict mode"); 391496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org assertInstanceof(e, ReferenceError, "strict mode"); 392496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org return; 393496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org } 394496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org assertFalse(should_throw, "strict mode"); 395496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org} 396496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org 39744bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.orgfunction repeat(n, f) { 39844bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org for (var i = 0; i < n; i ++) { f(); } 39944bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org} 40044bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org 40144bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.orgfunction assignToUndefined() { 40244bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org "use strict"; 40344bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org possibly_undefined_variable_for_strict_mode_test = "should throw?"; 40444bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org} 40544bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org 40644bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.orgtestAssignToUndefined(assignToUndefined, true); 40744bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.orgtestAssignToUndefined(assignToUndefined, true); 40844bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.orgtestAssignToUndefined(assignToUndefined, true); 409496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org 410496c03a64f12710e837204e261ef155601247895sgjesse@chromium.orgpossibly_undefined_variable_for_strict_mode_test = "value"; 411496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org 41244bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.orgtestAssignToUndefined(assignToUndefined, false); 41344bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.orgtestAssignToUndefined(assignToUndefined, false); 41444bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.orgtestAssignToUndefined(assignToUndefined, false); 415496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org 416496c03a64f12710e837204e261ef155601247895sgjesse@chromium.orgdelete possibly_undefined_variable_for_strict_mode_test; 417496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org 41844bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.orgtestAssignToUndefined(assignToUndefined, true); 41944bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.orgtestAssignToUndefined(assignToUndefined, true); 42044bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.orgtestAssignToUndefined(assignToUndefined, true); 421496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org 42244bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.orgrepeat(10, function() { testAssignToUndefined(assignToUndefined, true); }); 423496c03a64f12710e837204e261ef155601247895sgjesse@chromium.orgpossibly_undefined_variable_for_strict_mode_test = "value"; 42444bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.orgrepeat(10, function() { testAssignToUndefined(assignToUndefined, false); }); 425496c03a64f12710e837204e261ef155601247895sgjesse@chromium.orgdelete possibly_undefined_variable_for_strict_mode_test; 42644bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.orgrepeat(10, function() { testAssignToUndefined(assignToUndefined, true); }); 427496c03a64f12710e837204e261ef155601247895sgjesse@chromium.orgpossibly_undefined_variable_for_strict_mode_test = undefined; 42844bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.orgrepeat(10, function() { testAssignToUndefined(assignToUndefined, false); }); 42944bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org 43044bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.orgfunction assignToUndefinedWithEval() { 43144bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org "use strict"; 43244bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org possibly_undefined_variable_for_strict_mode_test_with_eval = "should throw?"; 43344bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org eval(""); 43444bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org} 43544bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org 43644bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.orgtestAssignToUndefined(assignToUndefinedWithEval, true); 43744bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.orgtestAssignToUndefined(assignToUndefinedWithEval, true); 43844bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.orgtestAssignToUndefined(assignToUndefinedWithEval, true); 43944bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org 44044bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.orgpossibly_undefined_variable_for_strict_mode_test_with_eval = "value"; 44144bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org 44244bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.orgtestAssignToUndefined(assignToUndefinedWithEval, false); 44344bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.orgtestAssignToUndefined(assignToUndefinedWithEval, false); 44444bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.orgtestAssignToUndefined(assignToUndefinedWithEval, false); 44544bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org 44644bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.orgdelete possibly_undefined_variable_for_strict_mode_test_with_eval; 44744bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org 44844bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.orgtestAssignToUndefined(assignToUndefinedWithEval, true); 44944bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.orgtestAssignToUndefined(assignToUndefinedWithEval, true); 45044bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.orgtestAssignToUndefined(assignToUndefinedWithEval, true); 45144bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org 45244bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.orgrepeat(10, function() { 45344bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org testAssignToUndefined(assignToUndefinedWithEval, true); 45444bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org }); 45544bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.orgpossibly_undefined_variable_for_strict_mode_test_with_eval = "value"; 45644bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.orgrepeat(10, function() { 45744bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org testAssignToUndefined(assignToUndefinedWithEval, false); 45844bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org }); 45944bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.orgdelete possibly_undefined_variable_for_strict_mode_test_with_eval; 46044bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.orgrepeat(10, function() { 46144bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org testAssignToUndefined(assignToUndefinedWithEval, true); 46244bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org }); 46344bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.orgpossibly_undefined_variable_for_strict_mode_test_with_eval = undefined; 46444bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.orgrepeat(10, function() { 46544bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org testAssignToUndefined(assignToUndefinedWithEval, false); 46644bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org }); 46744bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org 46844bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org 46949edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org 47049edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org(function testDeleteNonConfigurable() { 47149edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org function delete_property(o) { 47249edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org "use strict"; 47349edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org delete o.property; 47449edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org } 47549edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org function delete_element(o, i) { 47649edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org "use strict"; 47749edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org delete o[i]; 47849edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org } 47949edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org 48049edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org var object = {}; 48149edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org 48249edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org Object.defineProperty(object, "property", { value: "property_value" }); 48349edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org Object.defineProperty(object, "1", { value: "one" }); 48449edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org Object.defineProperty(object, 7, { value: "seven" }); 48549edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org Object.defineProperty(object, 3.14, { value: "pi" }); 48649edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org 48749edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org assertThrows(function() { delete_property(object); }, TypeError); 48849edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org assertEquals(object.property, "property_value"); 48949edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org assertThrows(function() { delete_element(object, "1"); }, TypeError); 49049edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org assertThrows(function() { delete_element(object, 1); }, TypeError); 49149edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org assertEquals(object[1], "one"); 49249edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org assertThrows(function() { delete_element(object, "7"); }, TypeError); 49349edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org assertThrows(function() { delete_element(object, 7); }, TypeError); 49449edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org assertEquals(object[7], "seven"); 49549edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org assertThrows(function() { delete_element(object, "3.14"); }, TypeError); 49649edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org assertThrows(function() { delete_element(object, 3.14); }, TypeError); 49749edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org assertEquals(object[3.14], "pi"); 49849edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org})(); 49949edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org 50049edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org// Not transforming this in Function.call and Function.apply. 5013a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org(function testThisTransformCallApply() { 50249edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org function non_strict() { 50349edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org return this; 50449edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org } 50549edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org function strict() { 50649edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org "use strict"; 50749edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org return this; 50849edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org } 50949edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org 51049edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org var global_object = (function() { return this; })(); 51149edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org var object = {}; 51249edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org 51349edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org // Non-strict call. 51449edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org assertTrue(non_strict.call(null) === global_object); 51549edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org assertTrue(non_strict.call(undefined) === global_object); 51649edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org assertEquals(typeof non_strict.call(7), "object"); 51749edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org assertEquals(typeof non_strict.call("Hello"), "object"); 51849edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org assertTrue(non_strict.call(object) === object); 51949edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org 52049edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org // Non-strict apply. 52149edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org assertTrue(non_strict.apply(null) === global_object); 52249edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org assertTrue(non_strict.apply(undefined) === global_object); 52349edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org assertEquals(typeof non_strict.apply(7), "object"); 52449edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org assertEquals(typeof non_strict.apply("Hello"), "object"); 52549edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org assertTrue(non_strict.apply(object) === object); 52649edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org 52749edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org // Strict call. 52849edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org assertTrue(strict.call(null) === null); 52949edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org assertTrue(strict.call(undefined) === undefined); 53049edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org assertEquals(typeof strict.call(7), "number"); 53149edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org assertEquals(typeof strict.call("Hello"), "string"); 53249edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org assertTrue(strict.call(object) === object); 53349edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org 53449edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org // Strict apply. 53549edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org assertTrue(strict.apply(null) === null); 53649edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org assertTrue(strict.apply(undefined) === undefined); 53749edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org assertEquals(typeof strict.apply(7), "number"); 53849edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org assertEquals(typeof strict.apply("Hello"), "string"); 53949edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org assertTrue(strict.apply(object) === object); 54049edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org})(); 5413a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 5423a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org(function testThisTransform() { 5433a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org try { 5443a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org function strict() { 5453a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org "use strict"; 5463a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org return typeof(this); 5473a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org } 5483a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org function nonstrict() { 5493a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org return typeof(this); 5503a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org } 5513a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 5523a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org // Concat to avoid symbol. 5533a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org var strict_name = "str" + "ict"; 5543a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org var nonstrict_name = "non" + "str" + "ict"; 5553a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org var strict_number = 17; 5563a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org var nonstrict_number = 19; 5573a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org var strict_name_get = "str" + "ict" + "get"; 5583a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org var nonstrict_name_get = "non" + "str" + "ict" + "get" 5593a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org var strict_number_get = 23; 5603a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org var nonstrict_number_get = 29; 5613a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 5623a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org function install(t) { 5633a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org t.prototype.strict = strict; 5643a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org t.prototype.nonstrict = nonstrict; 5653a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org t.prototype[strict_number] = strict; 5663a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org t.prototype[nonstrict_number] = nonstrict; 5673a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org Object.defineProperty(t.prototype, strict_name_get, 5683a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org { get: function() { return strict; }, 5693a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org configurable: true }); 5703a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org Object.defineProperty(t.prototype, nonstrict_name_get, 5713a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org { get: function() { return nonstrict; }, 5723a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org configurable: true }); 5733a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org Object.defineProperty(t.prototype, strict_number_get, 5743a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org { get: function() { return strict; }, 5753a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org configurable: true }); 5763a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org Object.defineProperty(t.prototype, nonstrict_number_get, 5773a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org { get: function() { return nonstrict; }, 5783a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org configurable: true }); 5793a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org } 5803a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 5813a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org function cleanup(t) { 5823a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org delete t.prototype.strict; 5833a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org delete t.prototype.nonstrict; 5843a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org delete t.prototype[strict_number]; 5853a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org delete t.prototype[nonstrict_number]; 5863a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org delete t.prototype[strict_name_get]; 5873a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org delete t.prototype[nonstrict_name_get]; 5883a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org delete t.prototype[strict_number_get]; 5893a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org delete t.prototype[nonstrict_number_get]; 5903a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org } 5913a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 5923a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org // Set up fakes 5933a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org install(String); 5943a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org install(Number); 5953a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org install(Boolean) 5963a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 5973a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org function callStrict(o) { 5983a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org return o.strict(); 5993a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org } 6003a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org function callNonStrict(o) { 6013a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org return o.nonstrict(); 6023a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org } 6033a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org function callKeyedStrict(o) { 6043a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org return o[strict_name](); 6053a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org } 6063a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org function callKeyedNonStrict(o) { 6073a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org return o[nonstrict_name](); 6083a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org } 6093a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org function callIndexedStrict(o) { 6103a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org return o[strict_number](); 6113a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org } 6123a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org function callIndexedNonStrict(o) { 6133a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org return o[nonstrict_number](); 6143a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org } 6153a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org function callStrictGet(o) { 6163a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org return o.strictget(); 6173a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org } 6183a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org function callNonStrictGet(o) { 6193a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org return o.nonstrictget(); 6203a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org } 6213a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org function callKeyedStrictGet(o) { 6223a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org return o[strict_name_get](); 6233a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org } 6243a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org function callKeyedNonStrictGet(o) { 6253a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org return o[nonstrict_name_get](); 6263a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org } 6273a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org function callIndexedStrictGet(o) { 6283a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org return o[strict_number_get](); 6293a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org } 6303a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org function callIndexedNonStrictGet(o) { 6313a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org return o[nonstrict_number_get](); 6323a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org } 6333a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 6343a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org for (var i = 0; i < 10; i ++) { 6353a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(("hello").strict(), "string"); 6363a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(("hello").nonstrict(), "object"); 6373a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(("hello")[strict_name](), "string"); 6383a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(("hello")[nonstrict_name](), "object"); 6393a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(("hello")[strict_number](), "string"); 6403a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(("hello")[nonstrict_number](), "object"); 6413a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 6423a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((10 + i).strict(), "number"); 6433a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((10 + i).nonstrict(), "object"); 6443a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((10 + i)[strict_name](), "number"); 6453a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((10 + i)[nonstrict_name](), "object"); 6463a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((10 + i)[strict_number](), "number"); 6473a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((10 + i)[nonstrict_number](), "object"); 6483a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 6493a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((true).strict(), "boolean"); 6503a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((true).nonstrict(), "object"); 6513a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((true)[strict_name](), "boolean"); 6523a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((true)[nonstrict_name](), "object"); 6533a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((true)[strict_number](), "boolean"); 6543a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((true)[nonstrict_number](), "object"); 6553a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 6563a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((false).strict(), "boolean"); 6573a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((false).nonstrict(), "object"); 6583a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((false)[strict_name](), "boolean"); 6593a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((false)[nonstrict_name](), "object"); 6603a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((false)[strict_number](), "boolean"); 6613a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((false)[nonstrict_number](), "object"); 6623a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 6633a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callStrict("howdy"), "string"); 6643a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callNonStrict("howdy"), "object"); 6653a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callKeyedStrict("howdy"), "string"); 6663a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callKeyedNonStrict("howdy"), "object"); 6673a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callIndexedStrict("howdy"), "string"); 6683a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callIndexedNonStrict("howdy"), "object"); 6693a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 6703a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callStrict(17 + i), "number"); 6713a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callNonStrict(17 + i), "object"); 6723a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callKeyedStrict(17 + i), "number"); 6733a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callKeyedNonStrict(17 + i), "object"); 6743a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callIndexedStrict(17 + i), "number"); 6753a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callIndexedNonStrict(17 + i), "object"); 6763a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 6773a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callStrict(true), "boolean"); 6783a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callNonStrict(true), "object"); 6793a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callKeyedStrict(true), "boolean"); 6803a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callKeyedNonStrict(true), "object"); 6813a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callIndexedStrict(true), "boolean"); 6823a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callIndexedNonStrict(true), "object"); 6833a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 6843a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callStrict(false), "boolean"); 6853a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callNonStrict(false), "object"); 6863a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callKeyedStrict(false), "boolean"); 6873a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callKeyedNonStrict(false), "object"); 6883a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callIndexedStrict(false), "boolean"); 6893a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callIndexedNonStrict(false), "object"); 6903a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 6913a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org // All of the above, with getters 6923a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(("hello").strictget(), "string"); 6933a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(("hello").nonstrictget(), "object"); 6943a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(("hello")[strict_name_get](), "string"); 6953a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(("hello")[nonstrict_name_get](), "object"); 6963a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(("hello")[strict_number_get](), "string"); 6973a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(("hello")[nonstrict_number_get](), "object"); 6983a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 6993a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((10 + i).strictget(), "number"); 7003a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((10 + i).nonstrictget(), "object"); 7013a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((10 + i)[strict_name_get](), "number"); 7023a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((10 + i)[nonstrict_name_get](), "object"); 7033a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((10 + i)[strict_number_get](), "number"); 7043a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((10 + i)[nonstrict_number_get](), "object"); 7053a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 7063a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((true).strictget(), "boolean"); 7073a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((true).nonstrictget(), "object"); 7083a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((true)[strict_name_get](), "boolean"); 7093a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((true)[nonstrict_name_get](), "object"); 7103a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((true)[strict_number_get](), "boolean"); 7113a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((true)[nonstrict_number_get](), "object"); 7123a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 7133a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((false).strictget(), "boolean"); 7143a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((false).nonstrictget(), "object"); 7153a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((false)[strict_name_get](), "boolean"); 7163a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((false)[nonstrict_name_get](), "object"); 7173a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((false)[strict_number_get](), "boolean"); 7183a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals((false)[nonstrict_number_get](), "object"); 7193a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 7203a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callStrictGet("howdy"), "string"); 7213a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callNonStrictGet("howdy"), "object"); 7223a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callKeyedStrictGet("howdy"), "string"); 7233a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callKeyedNonStrictGet("howdy"), "object"); 7243a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callIndexedStrictGet("howdy"), "string"); 7253a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callIndexedNonStrictGet("howdy"), "object"); 7263a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 7273a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callStrictGet(17 + i), "number"); 7283a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callNonStrictGet(17 + i), "object"); 7293a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callKeyedStrictGet(17 + i), "number"); 7303a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callKeyedNonStrictGet(17 + i), "object"); 7313a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callIndexedStrictGet(17 + i), "number"); 7323a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callIndexedNonStrictGet(17 + i), "object"); 7333a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 7343a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callStrictGet(true), "boolean"); 7353a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callNonStrictGet(true), "object"); 7363a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callKeyedStrictGet(true), "boolean"); 7373a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callKeyedNonStrictGet(true), "object"); 7383a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callIndexedStrictGet(true), "boolean"); 7393a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callIndexedNonStrictGet(true), "object"); 7403a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 7413a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callStrictGet(false), "boolean"); 7423a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callNonStrictGet(false), "object"); 7433a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callKeyedStrictGet(false), "boolean"); 7443a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callKeyedNonStrictGet(false), "object"); 7453a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callIndexedStrictGet(false), "boolean"); 7463a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org assertEquals(callIndexedNonStrictGet(false), "object"); 7473a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 7483a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org } 7493a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org } finally { 7503a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org // Cleanup 7513a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org cleanup(String); 7523a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org cleanup(Number); 7533a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org cleanup(Boolean); 7543a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org } 7553a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org})(); 7569ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org 7579ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org 7589ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org(function ObjectEnvironment() { 7599ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org var o = {}; 7609ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org Object.defineProperty(o, "foo", { value: "FOO", writable: false }); 7619ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org assertThrows( 7629ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org function () { 7639ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org with (o) { 7649ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org (function() { 7659ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org "use strict"; 7669ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org foo = "Hello"; 7679ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org })(); 7689ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org } 7699ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org }, 7709ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org TypeError); 7719ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org})(); 7729ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org 7739ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org 7749ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org(function TestSetPropertyWithoutSetter() { 7759ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org var o = { get foo() { return "Yey"; } }; 7769ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org assertThrows( 7779ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org function broken() { 7789ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org "use strict"; 7799ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org o.foo = (0xBADBAD00 >> 1); 7809ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org }, 7819ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org TypeError); 7829ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org})(); 7839ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org 7849ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org 7859ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org(function TestSetPropertyNonConfigurable() { 7869ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org var frozen = Object.freeze({}); 7879ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org var sealed = Object.seal({}); 7889ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org 7899ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org function strict(o) { 7909ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org "use strict"; 7919ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org o.property = "value"; 7929ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org } 7939ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org 7949ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org assertThrows(function() { strict(frozen); }, TypeError); 7959ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org assertThrows(function() { strict(sealed); }, TypeError); 7969ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org})(); 7979ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org 7989ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org 7999ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org(function TestAssignmentToReadOnlyProperty() { 8009ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org "use strict"; 8019ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org 8029ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org var o = {}; 8039ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org Object.defineProperty(o, "property", { value: 7 }); 8049ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org 8059ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org assertThrows(function() { o.property = "new value"; }, TypeError); 8069ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org assertThrows(function() { o.property += 10; }, TypeError); 8079ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org assertThrows(function() { o.property -= 10; }, TypeError); 8089ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org assertThrows(function() { o.property *= 10; }, TypeError); 8099ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org assertThrows(function() { o.property /= 10; }, TypeError); 8109ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org assertThrows(function() { o.property++; }, TypeError); 8119ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org assertThrows(function() { o.property--; }, TypeError); 8129ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org assertThrows(function() { ++o.property; }, TypeError); 8139ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org assertThrows(function() { --o.property; }, TypeError); 8149ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org 8159ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org var name = "prop" + "erty"; // to avoid symbol path. 8169ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org assertThrows(function() { o[name] = "new value"; }, TypeError); 8179ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org assertThrows(function() { o[name] += 10; }, TypeError); 8189ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org assertThrows(function() { o[name] -= 10; }, TypeError); 8199ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org assertThrows(function() { o[name] *= 10; }, TypeError); 8209ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org assertThrows(function() { o[name] /= 10; }, TypeError); 8219ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org assertThrows(function() { o[name]++; }, TypeError); 8229ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org assertThrows(function() { o[name]--; }, TypeError); 8239ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org assertThrows(function() { ++o[name]; }, TypeError); 8249ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org assertThrows(function() { --o[name]; }, TypeError); 8259ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org 8269ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org assertEquals(o.property, 7); 8279ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org})(); 8289ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org 8299ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org 8309ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org(function TestAssignmentToReadOnlyLoop() { 8319ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org var name = "prop" + "erty"; // to avoid symbol path. 8329ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org var o = {}; 8339ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org Object.defineProperty(o, "property", { value: 7 }); 8349ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org 8359ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org function strict(o, name) { 8369ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org "use strict"; 8379ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org o[name] = "new value"; 8389ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org } 8399ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org 8409ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org for (var i = 0; i < 10; i ++) { 841d2be901879306d8ff27e78e37783028d581d46fcricow@chromium.org var exception = false; 8429ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org try { 8439ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org strict(o, name); 8449ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org } catch(e) { 845d2be901879306d8ff27e78e37783028d581d46fcricow@chromium.org exception = true; 8469ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org assertInstanceof(e, TypeError); 8479ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org } 848d2be901879306d8ff27e78e37783028d581d46fcricow@chromium.org assertTrue(exception); 8499ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org } 8509ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org})(); 8519ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org 8529ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org 8539ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org// Specialized KeyedStoreIC experiencing miss. 8549ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org(function testKeyedStoreICStrict() { 8559ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org var o = [9,8,7,6,5,4,3,2,1]; 8569ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org 8579ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org function test(o, i, v) { 8589ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org "use strict"; 8599ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org o[i] = v; 8609ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org } 8619ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org 8629ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org for (var i = 0; i < 10; i ++) { 8639ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org test(o, 5, 17); // start specialized for smi indices 8649ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org assertEquals(o[5], 17); 8659ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org test(o, "a", 19); 8669ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org assertEquals(o["a"], 19); 8679ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org test(o, "5", 29); 8689ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org assertEquals(o[5], 29); 8699ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org test(o, 100000, 31); 8709ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org assertEquals(o[100000], 31); 8719ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org } 8729ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org})(); 8738f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org 8748f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org 8758f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org(function TestSetElementWithoutSetter() { 8768f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org "use strict"; 8778f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org 8788f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org var o = { }; 8798f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org Object.defineProperty(o, 0, { get : function() { } }); 8808f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org 8818f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org var zero_smi = 0; 8828f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org var zero_number = new Number(0); 8838f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org var zero_symbol = "0"; 8848f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org var zero_string = "-0-".substring(1,2); 8858f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org 8868f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[zero_smi] = "new value"; }, TypeError); 8878f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[zero_number] = "new value"; }, TypeError); 8888f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[zero_symbol] = "new value"; }, TypeError); 8898f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[zero_string] = "new value"; }, TypeError); 8908f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org})(); 8918f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org 8928f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org 8938f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org(function TestSetElementNonConfigurable() { 8948f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org "use strict"; 8958f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org var frozen = Object.freeze({}); 8968f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org var sealed = Object.seal({}); 8978f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org 8988f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org var zero_number = 0; 8998f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org var zero_symbol = "0"; 9008f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org var zero_string = "-0-".substring(1,2); 9018f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org 9028f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { frozen[zero_number] = "value"; }, TypeError); 9038f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { sealed[zero_number] = "value"; }, TypeError); 9048f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { frozen[zero_symbol] = "value"; }, TypeError); 9058f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { sealed[zero_symbol] = "value"; }, TypeError); 9068f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { frozen[zero_string] = "value"; }, TypeError); 9078f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { sealed[zero_string] = "value"; }, TypeError); 9088f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org})(); 9098f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org 9108f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org 9118f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org(function TestAssignmentToReadOnlyElement() { 9128f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org "use strict"; 9138f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org 9148f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org var o = {}; 9158f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org Object.defineProperty(o, 7, { value: 17 }); 9168f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org 9178f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org var seven_smi = 7; 9188f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org var seven_number = new Number(7); 9198f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org var seven_symbol = "7"; 9208f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org var seven_string = "-7-".substring(1,2); 9218f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org 9228f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org // Index with number. 9238f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[seven_smi] = "value"; }, TypeError); 9248f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[seven_smi] += 10; }, TypeError); 9258f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[seven_smi] -= 10; }, TypeError); 9268f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[seven_smi] *= 10; }, TypeError); 9278f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[seven_smi] /= 10; }, TypeError); 9288f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[seven_smi]++; }, TypeError); 9298f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[seven_smi]--; }, TypeError); 9308f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { ++o[seven_smi]; }, TypeError); 9318f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { --o[seven_smi]; }, TypeError); 9328f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org 9338f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[seven_number] = "value"; }, TypeError); 9348f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[seven_number] += 10; }, TypeError); 9358f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[seven_number] -= 10; }, TypeError); 9368f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[seven_number] *= 10; }, TypeError); 9378f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[seven_number] /= 10; }, TypeError); 9388f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[seven_number]++; }, TypeError); 9398f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[seven_number]--; }, TypeError); 9408f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { ++o[seven_number]; }, TypeError); 9418f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { --o[seven_number]; }, TypeError); 9428f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org 9438f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[seven_symbol] = "value"; }, TypeError); 9448f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[seven_symbol] += 10; }, TypeError); 9458f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[seven_symbol] -= 10; }, TypeError); 9468f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[seven_symbol] *= 10; }, TypeError); 9478f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[seven_symbol] /= 10; }, TypeError); 9488f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[seven_symbol]++; }, TypeError); 9498f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[seven_symbol]--; }, TypeError); 9508f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { ++o[seven_symbol]; }, TypeError); 9518f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { --o[seven_symbol]; }, TypeError); 9528f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org 9538f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[seven_string] = "value"; }, TypeError); 9548f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[seven_string] += 10; }, TypeError); 9558f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[seven_string] -= 10; }, TypeError); 9568f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[seven_string] *= 10; }, TypeError); 9578f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[seven_string] /= 10; }, TypeError); 9588f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[seven_string]++; }, TypeError); 9598f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[seven_string]--; }, TypeError); 9608f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { ++o[seven_string]; }, TypeError); 9618f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { --o[seven_string]; }, TypeError); 9628f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org 9638f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertEquals(o[seven_number], 17); 9648f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertEquals(o[seven_symbol], 17); 9658f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertEquals(o[seven_string], 17); 9668f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org})(); 9678f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org 9688f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org 9698f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org(function TestAssignmentToReadOnlyLoop() { 9708f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org "use strict"; 9718f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org 9728f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org var o = {}; 9738f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org Object.defineProperty(o, 7, { value: 17 }); 9748f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org 9758f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org var seven_smi = 7; 9768f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org var seven_number = new Number(7); 9778f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org var seven_symbol = "7"; 9788f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org var seven_string = "-7-".substring(1,2); 9798f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org 9808f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org for (var i = 0; i < 10; i ++) { 9818f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[seven_smi] = "value" }, TypeError); 9828f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[seven_number] = "value" }, TypeError); 9838f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[seven_symbol] = "value" }, TypeError); 9848f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { o[seven_string] = "value" }, TypeError); 9858f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org } 9868f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org 9878f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertEquals(o[7], 17); 9888f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org})(); 9898f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org 9908f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org 9918f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org(function TestAssignmentToStringLength() { 9928f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org "use strict"; 9938f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org 9948f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org var str_val = "string"; 9958f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org var str_obj = new String(str_val); 9968f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org var str_cat = str_val + str_val + str_obj; 9978f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org 9988f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { str_val.length = 1; }, TypeError); 9998f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { str_obj.length = 1; }, TypeError); 10008f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org assertThrows(function() { str_cat.length = 1; }, TypeError); 10018f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org})(); 10024d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org 10034d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org 10044d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org(function TestArgumentsAliasing() { 10054d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org function strict(a, b) { 10064d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org "use strict"; 10074d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org a = "c"; 10084d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org b = "d"; 10094d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org return [a, b, arguments[0], arguments[1]]; 10104d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org } 10114d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org 10124d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org function nonstrict(a, b) { 10134d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org a = "c"; 10144d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org b = "d"; 10154d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org return [a, b, arguments[0], arguments[1]]; 10164d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org } 10174d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org 10184d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org assertEquals(["c", "d", "a", "b"], strict("a", "b")); 10194d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org assertEquals(["c", "d", "c", "d"], nonstrict("a", "b")); 10204d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org})(); 1021ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1022ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1023ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgfunction CheckPillDescriptor(func, name) { 1024ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1025ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org function CheckPill(pill) { 1026ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org assertEquals("function", typeof pill); 1027ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org assertInstanceof(pill, Function); 10287979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org pill.property = "value"; 10297979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org assertEquals(pill.value, undefined); 10307979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org assertThrows(function() { 'use strict'; pill.property = "value"; }, 10317979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org TypeError); 1032ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org assertThrows(pill, TypeError); 1033ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org assertEquals(pill.prototype, (function(){}).prototype); 1034ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org var d = Object.getOwnPropertyDescriptor(pill, "prototype"); 1035ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org assertFalse(d.writable); 1036ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org assertFalse(d.configurable); 1037ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org assertFalse(d.enumerable); 1038ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } 1039ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1040ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org var descriptor = Object.getOwnPropertyDescriptor(func, name); 1041ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org CheckPill(descriptor.get) 1042ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org CheckPill(descriptor.set); 1043ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org assertFalse(descriptor.enumerable); 1044ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org assertFalse(descriptor.configurable); 1045ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org} 1046ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1047ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1048ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org(function TestStrictFunctionPills() { 1049ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org function strict() { 1050ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org "use strict"; 1051ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } 1052ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org assertThrows(function() { strict.caller; }, TypeError); 1053ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org assertThrows(function() { strict.arguments; }, TypeError); 1054394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com assertThrows(function() { strict.caller = 42; }, TypeError); 1055394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com assertThrows(function() { strict.arguments = 42; }, TypeError); 1056ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1057ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org var another = new Function("'use strict'"); 1058ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org assertThrows(function() { another.caller; }, TypeError); 1059ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org assertThrows(function() { another.arguments; }, TypeError); 1060394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com assertThrows(function() { another.caller = 42; }, TypeError); 1061394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com assertThrows(function() { another.arguments = 42; }, TypeError); 1062ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1063ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org var third = (function() { "use strict"; return function() {}; })(); 1064ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org assertThrows(function() { third.caller; }, TypeError); 1065ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org assertThrows(function() { third.arguments; }, TypeError); 1066394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com assertThrows(function() { third.caller = 42; }, TypeError); 1067394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com assertThrows(function() { third.arguments = 42; }, TypeError); 1068ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1069ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org CheckPillDescriptor(strict, "caller"); 1070ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org CheckPillDescriptor(strict, "arguments"); 1071ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org CheckPillDescriptor(another, "caller"); 1072ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org CheckPillDescriptor(another, "arguments"); 1073ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org CheckPillDescriptor(third, "caller"); 1074ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org CheckPillDescriptor(third, "arguments"); 1075ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org})(); 1076ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1077ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1078ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org(function TestStrictFunctionWritablePrototype() { 1079ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org "use strict"; 1080ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org function TheClass() { 1081ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } 1082ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org assertThrows(function() { TheClass.caller; }, TypeError); 1083ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org assertThrows(function() { TheClass.arguments; }, TypeError); 1084ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1085ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org // Strict functions must have writable prototype. 1086ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org TheClass.prototype = { 1087ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org func: function() { return "func_value"; }, 1088ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org get accessor() { return "accessor_value"; }, 1089ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org property: "property_value", 1090ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org }; 1091ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1092ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org var o = new TheClass(); 1093ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org assertEquals(o.func(), "func_value"); 1094ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org assertEquals(o.accessor, "accessor_value"); 1095ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org assertEquals(o.property, "property_value"); 1096ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org})(); 1097ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1098ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1099ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org(function TestStrictArgumentPills() { 1100ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org function strict() { 1101ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org "use strict"; 1102ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org return arguments; 1103ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } 1104ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1105ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org var args = strict(); 1106ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org CheckPillDescriptor(args, "caller"); 1107ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org CheckPillDescriptor(args, "callee"); 1108ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1109ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org args = strict(17, "value", strict); 1110ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org assertEquals(17, args[0]) 1111ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org assertEquals("value", args[1]) 1112ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org assertEquals(strict, args[2]); 1113ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org CheckPillDescriptor(args, "caller"); 1114ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org CheckPillDescriptor(args, "callee"); 1115ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1116ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org function outer() { 1117ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org "use strict"; 1118ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org function inner() { 1119ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org return arguments; 1120ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } 1121ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org return inner; 1122ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } 1123ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1124ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org var args = outer()(); 1125ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org CheckPillDescriptor(args, "caller"); 1126ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org CheckPillDescriptor(args, "callee"); 1127ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1128ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org args = outer()(17, "value", strict); 1129ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org assertEquals(17, args[0]) 1130ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org assertEquals("value", args[1]) 1131ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org assertEquals(strict, args[2]); 1132ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org CheckPillDescriptor(args, "caller"); 1133ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org CheckPillDescriptor(args, "callee"); 1134ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org})(); 1135ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1136ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1137ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org(function TestNonStrictFunctionCallerPillSimple() { 1138ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org function return_my_caller() { 1139ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org return return_my_caller.caller; 1140ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } 1141ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1142ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org function strict() { 1143ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org "use strict"; 11441f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org return return_my_caller(); 1145ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } 11461f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org assertSame(null, strict()); 1147ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1148ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org function non_strict() { 1149ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org return return_my_caller(); 1150ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } 1151ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org assertSame(non_strict(), non_strict); 1152ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org})(); 1153ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1154ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1155ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org(function TestNonStrictFunctionCallerPill() { 1156ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org function strict(n) { 1157ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org "use strict"; 11581f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org return non_strict(n); 1159ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } 1160ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1161ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org function recurse(n, then) { 1162ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org if (n > 0) { 11631f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org return recurse(n - 1, then); 1164ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } else { 1165ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org return then(); 1166ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } 1167ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } 1168ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1169ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org function non_strict(n) { 11701f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org return recurse(n, function() { return non_strict.caller; }); 1171ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } 1172ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1173ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org function test(n) { 11741f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org return recurse(n, function() { return strict(n); }); 11751f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org } 11761f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org 11771f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org for (var i = 0; i < 10; i ++) { 11781f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org assertSame(null, test(i)); 11791f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org } 11801f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org})(); 11811f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org 11821f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org 11831f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org(function TestNonStrictFunctionCallerDescriptorPill() { 11841f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org function strict(n) { 11851f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org "use strict"; 11861f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org return non_strict(n); 11871f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org } 11881f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org 11891f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org function recurse(n, then) { 11901f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org if (n > 0) { 11911f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org return recurse(n - 1, then); 11921f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org } else { 11931f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org return then(); 1194ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } 11951f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org } 11961f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org 11971f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org function non_strict(n) { 11981f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org return recurse(n, function() { 11991f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org return Object.getOwnPropertyDescriptor(non_strict, "caller").value; 12001f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org }); 12011f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org } 12021f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org 12031f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org function test(n) { 12041f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org return recurse(n, function() { return strict(n); }); 1205ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } 1206ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1207ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org for (var i = 0; i < 10; i ++) { 12081f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org assertSame(null, test(i)); 1209ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } 1210ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org})(); 12118e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org 12128e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org 12138e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org(function TestStrictModeEval() { 12148e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org "use strict"; 12158e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org eval("var eval_local = 10;"); 12168e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org assertThrows(function() { return eval_local; }, ReferenceError); 12178e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org})(); 1218