| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 55 Function.apply(this, args); | 55 Function.apply(this, args); |
| 56 }); | 56 }); |
| 57 // Create strict mode function. Exception expected. | 57 // Create strict mode function. Exception expected. |
| 58 args[arguments.length] = "'use strict';"; | 58 args[arguments.length] = "'use strict';"; |
| 59 assertThrows(function() { | 59 assertThrows(function() { |
| 60 Function.apply(this, args); | 60 Function.apply(this, args); |
| 61 }, SyntaxError); | 61 }, SyntaxError); |
| 62 } | 62 } |
| 63 | 63 |
| 64 // Incorrect 'use strict' directive. | 64 // Incorrect 'use strict' directive. |
| 65 function UseStrictEscape() { | 65 (function UseStrictEscape() { |
| 66 "use\\x20strict"; | 66 "use\\x20strict"; |
| 67 with ({}) {}; | 67 with ({}) {}; |
| 68 } | 68 })(); |
| 69 | 69 |
| 70 // 'use strict' in non-directive position. | 70 // 'use strict' in non-directive position. |
| 71 function UseStrictNonDirective() { | 71 (function UseStrictNonDirective() { |
| 72 void(0); | 72 void(0); |
| 73 "use strict"; | 73 "use strict"; |
| 74 with ({}) {}; | 74 with ({}) {}; |
| 75 } | 75 })(); |
| 76 | 76 |
| 77 // Multiple directives, including "use strict". | 77 // Multiple directives, including "use strict". |
| 78 assertThrows('\ | 78 assertThrows('\ |
| 79 "directive 1";\ | 79 "directive 1";\ |
| 80 "another directive";\ | 80 "another directive";\ |
| 81 "use strict";\ | 81 "use strict";\ |
| 82 "directive after strict";\ | 82 "directive after strict";\ |
| 83 "and one more";\ | 83 "and one more";\ |
| 84 with({}) {}', SyntaxError); | 84 with({}) {}', SyntaxError); |
| 85 | 85 |
| 86 // 'with' disallowed in strict mode. | 86 // 'with' disallowed in strict mode. |
| 87 CheckStrictMode("with({}) {}", SyntaxError); | 87 CheckStrictMode("with({}) {}", SyntaxError); |
| 88 | 88 |
| 89 // Function named 'eval'. | 89 // Function named 'eval'. |
| 90 CheckStrictMode("function eval() {}", SyntaxError) | 90 CheckStrictMode("function eval() {}", SyntaxError); |
| 91 | 91 |
| 92 // Function named 'arguments'. | 92 // Function named 'arguments'. |
| 93 CheckStrictMode("function arguments() {}", SyntaxError) | 93 CheckStrictMode("function arguments() {}", SyntaxError); |
| 94 | 94 |
| 95 // Function parameter named 'eval'. | 95 // Function parameter named 'eval'. |
| 96 CheckStrictMode("function foo(a, b, eval, c, d) {}", SyntaxError) | 96 CheckStrictMode("function foo(a, b, eval, c, d) {}", SyntaxError); |
| 97 | 97 |
| 98 // Function parameter named 'arguments'. | 98 // Function parameter named 'arguments'. |
| 99 CheckStrictMode("function foo(a, b, arguments, c, d) {}", SyntaxError) | 99 CheckStrictMode("function foo(a, b, arguments, c, d) {}", SyntaxError); |
| 100 | 100 |
| 101 // Property accessor parameter named 'eval'. | 101 // Property accessor parameter named 'eval'. |
| 102 CheckStrictMode("var o = { set foo(eval) {} }", SyntaxError) | 102 CheckStrictMode("var o = { set foo(eval) {} }", SyntaxError); |
| 103 | 103 |
| 104 // Property accessor parameter named 'arguments'. | 104 // Property accessor parameter named 'arguments'. |
| 105 CheckStrictMode("var o = { set foo(arguments) {} }", SyntaxError) | 105 CheckStrictMode("var o = { set foo(arguments) {} }", SyntaxError); |
| 106 | 106 |
| 107 // Duplicate function parameter name. | 107 // Duplicate function parameter name. |
| 108 CheckStrictMode("function foo(a, b, c, d, b) {}", SyntaxError) | 108 CheckStrictMode("function foo(a, b, c, d, b) {}", SyntaxError); |
| 109 | 109 |
| 110 // Function constructor: eval parameter name. | 110 // Function constructor: eval parameter name. |
| 111 CheckFunctionConstructorStrictMode("eval") | 111 CheckFunctionConstructorStrictMode("eval"); |
| 112 | 112 |
| 113 // Function constructor: arguments parameter name. | 113 // Function constructor: arguments parameter name. |
| 114 CheckFunctionConstructorStrictMode("arguments") | 114 CheckFunctionConstructorStrictMode("arguments"); |
| 115 | 115 |
| 116 // Function constructor: duplicate parameter name. | 116 // Function constructor: duplicate parameter name. |
| 117 CheckFunctionConstructorStrictMode("a", "b", "c", "b") | 117 CheckFunctionConstructorStrictMode("a", "b", "c", "b"); |
| 118 CheckFunctionConstructorStrictMode("a,b,c,b") | 118 CheckFunctionConstructorStrictMode("a,b,c,b"); |
| 119 | 119 |
| 120 // catch(eval) | 120 // catch(eval) |
| 121 CheckStrictMode("try{}catch(eval){};", SyntaxError) | 121 CheckStrictMode("try{}catch(eval){};", SyntaxError); |
| 122 | 122 |
| 123 // catch(arguments) | 123 // catch(arguments) |
| 124 CheckStrictMode("try{}catch(arguments){};", SyntaxError) | 124 CheckStrictMode("try{}catch(arguments){};", SyntaxError); |
| 125 | 125 |
| 126 // var eval | 126 // var eval |
| 127 CheckStrictMode("var eval;", SyntaxError) | 127 CheckStrictMode("var eval;", SyntaxError); |
| 128 | 128 |
| 129 // var arguments | 129 // var arguments |
| 130 CheckStrictMode("var arguments;", SyntaxError) | 130 CheckStrictMode("var arguments;", SyntaxError); |
| 131 | 131 |
| 132 // Strict mode applies to the function in which the directive is used.. | 132 // Strict mode applies to the function in which the directive is used.. |
| 133 assertThrows('\ | 133 assertThrows('\ |
| 134 function foo(eval) {\ | 134 function foo(eval) {\ |
| 135 "use strict";\ | 135 "use strict";\ |
| 136 }', SyntaxError); | 136 }', SyntaxError); |
| 137 | 137 |
| 138 // Strict mode doesn't affect the outer stop of strict code. | 138 // Strict mode doesn't affect the outer stop of strict code. |
| 139 function NotStrict(eval) { | 139 (function NotStrict(eval) { |
| 140 function Strict() { | 140 function Strict() { |
| 141 "use strict"; | 141 "use strict"; |
| 142 } | 142 } |
| 143 with ({}) {}; | 143 with ({}) {}; |
| 144 } | 144 })(); |
| 145 | 145 |
| 146 // Octal literal | 146 // Octal literal |
| 147 CheckStrictMode("var x = 012"); | 147 CheckStrictMode("var x = 012"); |
| 148 CheckStrictMode("012"); | 148 CheckStrictMode("012"); |
| 149 CheckStrictMode("'Hello octal\\032'"); | 149 CheckStrictMode("'Hello octal\\032'"); |
| 150 CheckStrictMode("function octal() { return 012; }"); | 150 CheckStrictMode("function octal() { return 012; }"); |
| 151 CheckStrictMode("function octal() { return '\\032'; }"); | 151 CheckStrictMode("function octal() { return '\\032'; }"); |
| 152 | 152 |
| 153 (function ValidEscape() { |
| 154 "use strict"; |
| 155 var x = '\0'; |
| 156 var y = "\0"; |
| 157 })(); |
| 158 |
| 153 // Octal before "use strict" | 159 // Octal before "use strict" |
| 154 assertThrows('\ | 160 assertThrows('\ |
| 155 function strict() {\ | 161 function strict() {\ |
| 156 "octal\\032directive";\ | 162 "octal\\032directive";\ |
| 157 "use strict";\ | 163 "use strict";\ |
| 158 }', SyntaxError); | 164 }', SyntaxError); |
| 159 | 165 |
| 160 // Duplicate data properties. | 166 // Duplicate data properties. |
| 161 CheckStrictMode("var x = { dupe : 1, nondupe: 3, dupe : 2 };", SyntaxError) | 167 CheckStrictMode("var x = { dupe : 1, nondupe: 3, dupe : 2 };", SyntaxError); |
| 162 CheckStrictMode("var x = { '1234' : 1, '2345' : 2, '1234' : 3 };", SyntaxError) | 168 CheckStrictMode("var x = { '1234' : 1, '2345' : 2, '1234' : 3 };", SyntaxError); |
| 163 CheckStrictMode("var x = { '1234' : 1, '2345' : 2, 1234 : 3 };", SyntaxError) | 169 CheckStrictMode("var x = { '1234' : 1, '2345' : 2, 1234 : 3 };", SyntaxError); |
| 164 CheckStrictMode("var x = { 3.14 : 1, 2.71 : 2, 3.14 : 3 };", SyntaxError) | 170 CheckStrictMode("var x = { 3.14 : 1, 2.71 : 2, 3.14 : 3 };", SyntaxError); |
| 165 CheckStrictMode("var x = { 3.14 : 1, '3.14' : 2 };", SyntaxError) | 171 CheckStrictMode("var x = { 3.14 : 1, '3.14' : 2 };", SyntaxError); |
| 166 CheckStrictMode("var x = { 123: 1, 123.00000000000000000000000000000000000000000
000000000000000000000000001 : 2 }", SyntaxError) | 172 CheckStrictMode("var x = { 123: 1, 123.00000000000000000000000000000000000000000
000000000000000000000000001 : 2 }", SyntaxError); |
| 167 | 173 |
| 168 // Non-conflicting data properties. | 174 // Non-conflicting data properties. |
| 169 function StrictModeNonDuplicate() { | 175 (function StrictModeNonDuplicate() { |
| 170 "use strict"; | 176 "use strict"; |
| 171 var x = { 123 : 1, "0123" : 2 }; | 177 var x = { 123 : 1, "0123" : 2 }; |
| 172 var x = { 123: 1, '123.0000000000000000000000000000000000000000000000000000000
0000000000001' : 2 } | 178 var x = { 123: 1, '123.0000000000000000000000000000000000000000000000000000000
0000000000001' : 2 } |
| 173 } | 179 })(); |
| 174 | 180 |
| 175 // Two getters (non-strict) | 181 // Two getters (non-strict) |
| 176 assertThrows("var x = { get foo() { }, get foo() { } };", SyntaxError) | 182 assertThrows("var x = { get foo() { }, get foo() { } };", SyntaxError); |
| 177 assertThrows("var x = { get foo(){}, get 'foo'(){}};", SyntaxError) | 183 assertThrows("var x = { get foo(){}, get 'foo'(){}};", SyntaxError); |
| 178 assertThrows("var x = { get 12(){}, get '12'(){}};", SyntaxError) | 184 assertThrows("var x = { get 12(){}, get '12'(){}};", SyntaxError); |
| 179 | 185 |
| 180 // Two setters (non-strict) | 186 // Two setters (non-strict) |
| 181 assertThrows("var x = { set foo(v) { }, set foo(v) { } };", SyntaxError) | 187 assertThrows("var x = { set foo(v) { }, set foo(v) { } };", SyntaxError); |
| 182 assertThrows("var x = { set foo(v) { }, set 'foo'(v) { } };", SyntaxError) | 188 assertThrows("var x = { set foo(v) { }, set 'foo'(v) { } };", SyntaxError); |
| 183 assertThrows("var x = { set 13(v) { }, set '13'(v) { } };", SyntaxError) | 189 assertThrows("var x = { set 13(v) { }, set '13'(v) { } };", SyntaxError); |
| 184 | 190 |
| 185 // Setter and data (non-strict) | 191 // Setter and data (non-strict) |
| 186 assertThrows("var x = { foo: 'data', set foo(v) { } };", SyntaxError) | 192 assertThrows("var x = { foo: 'data', set foo(v) { } };", SyntaxError); |
| 187 assertThrows("var x = { set foo(v) { }, foo: 'data' };", SyntaxError) | 193 assertThrows("var x = { set foo(v) { }, foo: 'data' };", SyntaxError); |
| 188 assertThrows("var x = { foo: 'data', set 'foo'(v) { } };", SyntaxError) | 194 assertThrows("var x = { foo: 'data', set 'foo'(v) { } };", SyntaxError); |
| 189 assertThrows("var x = { set foo(v) { }, 'foo': 'data' };", SyntaxError) | 195 assertThrows("var x = { set foo(v) { }, 'foo': 'data' };", SyntaxError); |
| 190 assertThrows("var x = { 'foo': 'data', set foo(v) { } };", SyntaxError) | 196 assertThrows("var x = { 'foo': 'data', set foo(v) { } };", SyntaxError); |
| 191 assertThrows("var x = { set 'foo'(v) { }, foo: 'data' };", SyntaxError) | 197 assertThrows("var x = { set 'foo'(v) { }, foo: 'data' };", SyntaxError); |
| 192 assertThrows("var x = { 'foo': 'data', set 'foo'(v) { } };", SyntaxError) | 198 assertThrows("var x = { 'foo': 'data', set 'foo'(v) { } };", SyntaxError); |
| 193 assertThrows("var x = { set 'foo'(v) { }, 'foo': 'data' };", SyntaxError) | 199 assertThrows("var x = { set 'foo'(v) { }, 'foo': 'data' };", SyntaxError); |
| 194 assertThrows("var x = { 12: 1, set '12'(v){}};", SyntaxError); | 200 assertThrows("var x = { 12: 1, set '12'(v){}};", SyntaxError); |
| 195 assertThrows("var x = { 12: 1, set 12(v){}};", SyntaxError); | 201 assertThrows("var x = { 12: 1, set 12(v){}};", SyntaxError); |
| 196 assertThrows("var x = { '12': 1, set '12'(v){}};", SyntaxError); | 202 assertThrows("var x = { '12': 1, set '12'(v){}};", SyntaxError); |
| 197 assertThrows("var x = { '12': 1, set 12(v){}};", SyntaxError); | 203 assertThrows("var x = { '12': 1, set 12(v){}};", SyntaxError); |
| 198 | 204 |
| 199 // Getter and data (non-strict) | 205 // Getter and data (non-strict) |
| 200 assertThrows("var x = { foo: 'data', get foo() { } };", SyntaxError) | 206 assertThrows("var x = { foo: 'data', get foo() { } };", SyntaxError); |
| 201 assertThrows("var x = { get foo() { }, foo: 'data' };", SyntaxError) | 207 assertThrows("var x = { get foo() { }, foo: 'data' };", SyntaxError); |
| 202 assertThrows("var x = { 'foo': 'data', get foo() { } };", SyntaxError) | 208 assertThrows("var x = { 'foo': 'data', get foo() { } };", SyntaxError); |
| 203 assertThrows("var x = { get 'foo'() { }, 'foo': 'data' };", SyntaxError) | 209 assertThrows("var x = { get 'foo'() { }, 'foo': 'data' };", SyntaxError); |
| 204 assertThrows("var x = { '12': 1, get '12'(){}};", SyntaxError); | 210 assertThrows("var x = { '12': 1, get '12'(){}};", SyntaxError); |
| 205 assertThrows("var x = { '12': 1, get 12(){}};", SyntaxError); | 211 assertThrows("var x = { '12': 1, get 12(){}};", SyntaxError); |
| 206 | 212 |
| 207 // Assignment to eval or arguments | 213 // Assignment to eval or arguments |
| 208 CheckStrictMode("function strict() { eval = undefined; }", SyntaxError) | 214 CheckStrictMode("function strict() { eval = undefined; }", SyntaxError); |
| 209 CheckStrictMode("function strict() { arguments = undefined; }", SyntaxError) | 215 CheckStrictMode("function strict() { arguments = undefined; }", SyntaxError); |
| 210 CheckStrictMode("function strict() { print(eval = undefined); }", SyntaxError) | 216 CheckStrictMode("function strict() { print(eval = undefined); }", SyntaxError); |
| 211 CheckStrictMode("function strict() { print(arguments = undefined); }", SyntaxErr
or) | 217 CheckStrictMode("function strict() { print(arguments = undefined); }", SyntaxErr
or); |
| 212 CheckStrictMode("function strict() { var x = eval = undefined; }", SyntaxError) | 218 CheckStrictMode("function strict() { var x = eval = undefined; }", SyntaxError); |
| 213 CheckStrictMode("function strict() { var x = arguments = undefined; }", SyntaxEr
ror) | 219 CheckStrictMode("function strict() { var x = arguments = undefined; }", SyntaxEr
ror); |
| 214 | 220 |
| 215 // Compound assignment to eval or arguments | 221 // Compound assignment to eval or arguments |
| 216 CheckStrictMode("function strict() { eval *= undefined; }", SyntaxError) | 222 CheckStrictMode("function strict() { eval *= undefined; }", SyntaxError); |
| 217 CheckStrictMode("function strict() { arguments /= undefined; }", SyntaxError) | 223 CheckStrictMode("function strict() { arguments /= undefined; }", SyntaxError); |
| 218 CheckStrictMode("function strict() { print(eval %= undefined); }", SyntaxError) | 224 CheckStrictMode("function strict() { print(eval %= undefined); }", SyntaxError); |
| 219 CheckStrictMode("function strict() { print(arguments %= undefined); }", SyntaxEr
ror) | 225 CheckStrictMode("function strict() { print(arguments %= undefined); }", SyntaxEr
ror); |
| 220 CheckStrictMode("function strict() { var x = eval += undefined; }", SyntaxError) | 226 CheckStrictMode("function strict() { var x = eval += undefined; }", SyntaxError)
; |
| 221 CheckStrictMode("function strict() { var x = arguments -= undefined; }", SyntaxE
rror) | 227 CheckStrictMode("function strict() { var x = arguments -= undefined; }", SyntaxE
rror); |
| 222 CheckStrictMode("function strict() { eval <<= undefined; }", SyntaxError) | 228 CheckStrictMode("function strict() { eval <<= undefined; }", SyntaxError); |
| 223 CheckStrictMode("function strict() { arguments >>= undefined; }", SyntaxError) | 229 CheckStrictMode("function strict() { arguments >>= undefined; }", SyntaxError); |
| 224 CheckStrictMode("function strict() { print(eval >>>= undefined); }", SyntaxError
) | 230 CheckStrictMode("function strict() { print(eval >>>= undefined); }", SyntaxError
); |
| 225 CheckStrictMode("function strict() { print(arguments &= undefined); }", SyntaxEr
ror) | 231 CheckStrictMode("function strict() { print(arguments &= undefined); }", SyntaxEr
ror); |
| 226 CheckStrictMode("function strict() { var x = eval ^= undefined; }", SyntaxError) | 232 CheckStrictMode("function strict() { var x = eval ^= undefined; }", SyntaxError)
; |
| 227 CheckStrictMode("function strict() { var x = arguments |= undefined; }", SyntaxE
rror) | 233 CheckStrictMode("function strict() { var x = arguments |= undefined; }", SyntaxE
rror); |
| 228 | 234 |
| 229 // Postfix increment with eval or arguments | 235 // Postfix increment with eval or arguments |
| 230 CheckStrictMode("function strict() { eval++; }", SyntaxError) | 236 CheckStrictMode("function strict() { eval++; }", SyntaxError); |
| 231 CheckStrictMode("function strict() { arguments++; }", SyntaxError) | 237 CheckStrictMode("function strict() { arguments++; }", SyntaxError); |
| 232 CheckStrictMode("function strict() { print(eval++); }", SyntaxError) | 238 CheckStrictMode("function strict() { print(eval++); }", SyntaxError); |
| 233 CheckStrictMode("function strict() { print(arguments++); }", SyntaxError) | 239 CheckStrictMode("function strict() { print(arguments++); }", SyntaxError); |
| 234 CheckStrictMode("function strict() { var x = eval++; }", SyntaxError) | 240 CheckStrictMode("function strict() { var x = eval++; }", SyntaxError); |
| 235 CheckStrictMode("function strict() { var x = arguments++; }", SyntaxError) | 241 CheckStrictMode("function strict() { var x = arguments++; }", SyntaxError); |
| 236 | 242 |
| 237 // Postfix decrement with eval or arguments | 243 // Postfix decrement with eval or arguments |
| 238 CheckStrictMode("function strict() { eval--; }", SyntaxError) | 244 CheckStrictMode("function strict() { eval--; }", SyntaxError); |
| 239 CheckStrictMode("function strict() { arguments--; }", SyntaxError) | 245 CheckStrictMode("function strict() { arguments--; }", SyntaxError); |
| 240 CheckStrictMode("function strict() { print(eval--); }", SyntaxError) | 246 CheckStrictMode("function strict() { print(eval--); }", SyntaxError); |
| 241 CheckStrictMode("function strict() { print(arguments--); }", SyntaxError) | 247 CheckStrictMode("function strict() { print(arguments--); }", SyntaxError); |
| 242 CheckStrictMode("function strict() { var x = eval--; }", SyntaxError) | 248 CheckStrictMode("function strict() { var x = eval--; }", SyntaxError); |
| 243 CheckStrictMode("function strict() { var x = arguments--; }", SyntaxError) | 249 CheckStrictMode("function strict() { var x = arguments--; }", SyntaxError); |
| 244 | 250 |
| 245 // Prefix increment with eval or arguments | 251 // Prefix increment with eval or arguments |
| 246 CheckStrictMode("function strict() { ++eval; }", SyntaxError) | 252 CheckStrictMode("function strict() { ++eval; }", SyntaxError); |
| 247 CheckStrictMode("function strict() { ++arguments; }", SyntaxError) | 253 CheckStrictMode("function strict() { ++arguments; }", SyntaxError); |
| 248 CheckStrictMode("function strict() { print(++eval); }", SyntaxError) | 254 CheckStrictMode("function strict() { print(++eval); }", SyntaxError); |
| 249 CheckStrictMode("function strict() { print(++arguments); }", SyntaxError) | 255 CheckStrictMode("function strict() { print(++arguments); }", SyntaxError); |
| 250 CheckStrictMode("function strict() { var x = ++eval; }", SyntaxError) | 256 CheckStrictMode("function strict() { var x = ++eval; }", SyntaxError); |
| 251 CheckStrictMode("function strict() { var x = ++arguments; }", SyntaxError) | 257 CheckStrictMode("function strict() { var x = ++arguments; }", SyntaxError); |
| 252 | 258 |
| 253 // Prefix decrement with eval or arguments | 259 // Prefix decrement with eval or arguments |
| 254 CheckStrictMode("function strict() { --eval; }", SyntaxError) | 260 CheckStrictMode("function strict() { --eval; }", SyntaxError); |
| 255 CheckStrictMode("function strict() { --arguments; }", SyntaxError) | 261 CheckStrictMode("function strict() { --arguments; }", SyntaxError); |
| 256 CheckStrictMode("function strict() { print(--eval); }", SyntaxError) | 262 CheckStrictMode("function strict() { print(--eval); }", SyntaxError); |
| 257 CheckStrictMode("function strict() { print(--arguments); }", SyntaxError) | 263 CheckStrictMode("function strict() { print(--arguments); }", SyntaxError); |
| 258 CheckStrictMode("function strict() { var x = --eval; }", SyntaxError) | 264 CheckStrictMode("function strict() { var x = --eval; }", SyntaxError); |
| 259 CheckStrictMode("function strict() { var x = --arguments; }", SyntaxError) | 265 CheckStrictMode("function strict() { var x = --arguments; }", SyntaxError); |
| 260 | 266 |
| 261 // Prefix unary operators other than delete, ++, -- are valid in strict mode | 267 // Prefix unary operators other than delete, ++, -- are valid in strict mode |
| 262 function StrictModeUnaryOperators() { | 268 (function StrictModeUnaryOperators() { |
| 263 "use strict"; | 269 "use strict"; |
| 264 var x = [void eval, typeof eval, +eval, -eval, ~eval, !eval]; | 270 var x = [void eval, typeof eval, +eval, -eval, ~eval, !eval]; |
| 265 var y = [void arguments, typeof arguments, | 271 var y = [void arguments, typeof arguments, |
| 266 +arguments, -arguments, ~arguments, !arguments]; | 272 +arguments, -arguments, ~arguments, !arguments]; |
| 267 } | 273 })(); |
| OLD | NEW |