OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
2 // Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. | 2 // Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. |
3 // | 3 // |
4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without |
5 // modification, are permitted provided that the following conditions | 5 // modification, are permitted provided that the following conditions |
6 // are met: | 6 // are met: |
7 // 1. Redistributions of source code must retain the above copyright | 7 // 1. Redistributions of source code must retain the above copyright |
8 // notice, this list of conditions and the following disclaimer. | 8 // notice, this list of conditions and the following disclaimer. |
9 // 2. Redistributions in binary form must reproduce the above copyright | 9 // 2. Redistributions in binary form must reproduce the above copyright |
10 // notice, this list of conditions and the following disclaimer in the | 10 // notice, this list of conditions and the following disclaimer in the |
11 // documentation and/or other materials provided with the distribution. | 11 // documentation and/or other materials provided with the distribution. |
12 // | 12 // |
13 // THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND AN
Y | 13 // THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND AN
Y |
14 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | 14 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
15 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | 15 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
16 // DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR AN
Y | 16 // DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR AN
Y |
17 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | 17 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
18 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | 18 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
19 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND O
N | 19 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND O
N |
20 // ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 20 // ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
21 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | 21 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
22 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 22 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
23 | 23 |
24 function isReserved(word) | 24 function isReserved(word) |
25 { | 25 { |
26 try { | 26 try { |
27 eval("var " + word + ";"); | 27 eval("\"use strict\";var " + word + ";"); |
28 return false; | 28 return false; |
29 } catch (e) { | 29 } catch (e) { |
30 return true; | 30 var expectedError = "Use of reserved word '" + word + "' in strict m
ode"; |
| 31 if (expectedError == e.message) |
| 32 return true; |
| 33 else |
| 34 return false; |
31 } | 35 } |
32 } | 36 } |
33 | 37 |
34 var reservedWords = [ | 38 var reservedWords = [ |
35 "break", | 39 "implements", |
36 "case", | 40 "let", |
37 "catch", | 41 "private", |
38 "class", | 42 "public", |
39 "const", | 43 "yield", |
40 "continue", | 44 "interface", |
41 "debugger", | 45 "package", |
42 "default", | 46 "protected", |
43 "delete", | 47 "static" |
44 "do", | |
45 "else", | |
46 "enum", | |
47 "export", | |
48 "extends", | |
49 "false", | |
50 "finally", | |
51 "for", | |
52 "function", | |
53 "if", | |
54 "import", | |
55 "in", | |
56 "instanceof", | |
57 "new", | |
58 "null", | |
59 "return", | |
60 "super", | |
61 "switch", | |
62 "this", | |
63 "throw", | |
64 "true", | |
65 "try", | |
66 "typeof", | |
67 "var", | |
68 "void", | |
69 "while", | |
70 "with" | |
71 ]; | 48 ]; |
72 | 49 |
73 var unreservedWords = [ | 50 var unreservedWords = [ |
74 "abstract", | 51 "abstract", |
75 "boolean", | 52 "boolean", |
76 "byte", | 53 "byte", |
77 "char", | 54 "char", |
78 "double", | 55 "double", |
79 "final", | 56 "final", |
80 "float", | 57 "float", |
81 "goto", | 58 "goto", |
82 "implements", | |
83 "int", | 59 "int", |
84 "interface", | |
85 "long", | 60 "long", |
86 "native", | 61 "native", |
87 "package", | |
88 "private", | |
89 "protected", | |
90 "public", | |
91 "short", | 62 "short", |
92 "static", | |
93 "synchronized", | 63 "synchronized", |
94 "throws", | 64 "throws", |
95 "transient", | 65 "transient", |
96 "volatile" | 66 "volatile" |
97 ]; | 67 ]; |
98 | 68 |
99 description( | 69 description( |
100 "This file checks which ECMAScript 3 keywords are treated as reserved words." | 70 "This file checks which ECMAScript 3 keywords are treated as reserved words in s
trict mode." |
101 ); | 71 ); |
102 | 72 |
103 reservedWords.sort(); | 73 reservedWords.sort(); |
104 unreservedWords.sort(); | 74 unreservedWords.sort(); |
105 | 75 |
106 debug("SHOULD BE RESERVED:"); | 76 debug("SHOULD BE RESERVED:"); |
107 for (var p in reservedWords) { | 77 for (var p in reservedWords) { |
108 shouldBeTrue("isReserved('" + reservedWords[p] + "')"); | 78 shouldBeTrue("isReserved('" + reservedWords[p] + "')"); |
109 } | 79 } |
110 | 80 |
111 debug(""); | 81 debug(""); |
112 | 82 |
113 debug("SHOULD NOT BE RESERVED:"); | 83 debug("SHOULD NOT BE RESERVED:"); |
114 for (var p in unreservedWords) { | 84 for (var p in unreservedWords) { |
115 shouldBeFalse("isReserved('" + unreservedWords[p] + "')"); | 85 shouldBeFalse("isReserved('" + unreservedWords[p] + "')"); |
116 } | 86 } |
117 | 87 |
118 debug(""); | 88 debug(""); |
OLD | NEW |