| function isReserved(word) |
| { |
| try { |
| eval("\"use strict\";var " + word + ";"); |
| return false; |
| } catch (e) { |
| var expectedError = "Cannot use the reserved word '" + word + "' as a variable name in strict mode."; |
| if (expectedError == e.message) |
| return true; |
| else { |
| debug(e.message); |
| return false; |
| } |
| } |
| } |
| |
| var reservedWords = [ |
| "implements", |
| "private", |
| "public", |
| "interface", |
| "package", |
| "protected", |
| "static" |
| ]; |
| |
| var unreservedWords = [ |
| "abstract", |
| "boolean", |
| "byte", |
| "char", |
| "double", |
| "final", |
| "float", |
| "goto", |
| "int", |
| "long", |
| "native", |
| "short", |
| "synchronized", |
| "throws", |
| "transient", |
| "volatile" |
| ]; |
| |
| description( |
| "This file checks which ECMAScript 3 keywords are treated as reserved words in strict mode." |
| ); |
| |
| reservedWords.sort(); |
| unreservedWords.sort(); |
| |
| debug("SHOULD BE RESERVED:"); |
| for (var p in reservedWords) { |
| shouldBeTrue("isReserved('" + reservedWords[p] + "')"); |
| } |
| |
| debug(""); |
| |
| debug("SHOULD NOT BE RESERVED:"); |
| for (var p in unreservedWords) { |
| shouldBeFalse("isReserved('" + unreservedWords[p] + "')"); |
| } |
| |
| debug(""); |