OLD | NEW |
| (Empty) |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | |
2 // for details. All rights reserved. Use of this source code is governed by a | |
3 // BSD-style license that can be found in the LICENSE file. | |
4 | |
5 class JsNames { | |
6 static final javaScriptKeywords = const <String>[ | |
7 // These are current keywords | |
8 "break", "delete", "function", "return", "typeof", "case", "do", "if", | |
9 "switch", "var", "catch", "else", "in", "this", "void", "continue", | |
10 "false", "instanceof", "throw", "while", "debugger", "finally", "new", | |
11 "true", "with", "default", "for", "null", "try", | |
12 | |
13 // These are future keywords | |
14 "abstract", "double", "goto", "native", "static", "boolean", "enum", | |
15 "implements", "package", "super", "byte", "export", "import", "private", | |
16 "synchronized", "char", "extends", "int", "protected", "throws", | |
17 "class", "final", "interface", "public", "transient", "const", "float", | |
18 "long", "short", "volatile" | |
19 ]; | |
20 | |
21 static final reservedGlobalSymbols = const <String>[ | |
22 // Section references are from Ecma-262 | |
23 // (http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pd
f) | |
24 | |
25 // 15.1.1 Value Properties of the Global Object | |
26 "NaN", "Infinity", "undefined", | |
27 | |
28 // 15.1.2 Function Properties of the Global Object | |
29 "eval", "parseInt", "parseFloat", "isNan", "isFinite", | |
30 | |
31 // 15.1.3 URI Handling Function Properties | |
32 "decodeURI", "decodeURIComponent", | |
33 "encodeURI", | |
34 "encodeURIComponent", | |
35 | |
36 // 15.1.4 Constructor Properties of the Global Object | |
37 "Object", "Function", "Array", "String", "Boolean", "Number", "Date", | |
38 "RegExp", "Error", "EvalError", "RangeError", "ReferenceError", | |
39 "SyntaxError", "TypeError", "URIError", | |
40 | |
41 // 15.1.5 Other Properties of the Global Object | |
42 "Math", | |
43 | |
44 // 10.1.6 Activation Object | |
45 "arguments", | |
46 | |
47 // B.2 Additional Properties (non-normative) | |
48 "escape", "unescape", | |
49 | |
50 // Window props (https://developer.mozilla.org/en/DOM/window) | |
51 "applicationCache", "closed", "Components", "content", "controllers", | |
52 "crypto", "defaultStatus", "dialogArguments", "directories", | |
53 "document", "frameElement", "frames", "fullScreen", "globalStorage", | |
54 "history", "innerHeight", "innerWidth", "length", | |
55 "location", "locationbar", "localStorage", "menubar", | |
56 "mozInnerScreenX", "mozInnerScreenY", "mozScreenPixelsPerCssPixel", | |
57 "name", "navigator", "opener", "outerHeight", "outerWidth", | |
58 "pageXOffset", "pageYOffset", "parent", "personalbar", "pkcs11", | |
59 "returnValue", "screen", "scrollbars", "scrollMaxX", "scrollMaxY", | |
60 "self", "sessionStorage", "sidebar", "status", "statusbar", "toolbar", | |
61 "top", "window", | |
62 | |
63 // Window methods (https://developer.mozilla.org/en/DOM/window) | |
64 "alert", "addEventListener", "atob", "back", "blur", "btoa", | |
65 "captureEvents", "clearInterval", "clearTimeout", "close", "confirm", | |
66 "disableExternalCapture", "dispatchEvent", "dump", | |
67 "enableExternalCapture", "escape", "find", "focus", "forward", | |
68 "GeckoActiveXObject", "getAttention", "getAttentionWithCycleCount", | |
69 "getComputedStyle", "getSelection", "home", "maximize", "minimize", | |
70 "moveBy", "moveTo", "open", "openDialog", "postMessage", "print", | |
71 "prompt", "QueryInterface", "releaseEvents", "removeEventListener", | |
72 "resizeBy", "resizeTo", "restore", "routeEvent", "scroll", "scrollBy", | |
73 "scrollByLines", "scrollByPages", "scrollTo", "setInterval", | |
74 "setResizeable", "setTimeout", "showModalDialog", "sizeToContent", | |
75 "stop", "uuescape", "updateCommands", "XPCNativeWrapper", | |
76 "XPCSafeJSOjbectWrapper", | |
77 | |
78 // Mozilla Window event handlers, same cite | |
79 "onabort", "onbeforeunload", "onchange", "onclick", "onclose", | |
80 "oncontextmenu", "ondragdrop", "onerror", "onfocus", "onhashchange", | |
81 "onkeydown", "onkeypress", "onkeyup", "onload", "onmousedown", | |
82 "onmousemove", "onmouseout", "onmouseover", "onmouseup", | |
83 "onmozorientation", "onpaint", "onreset", "onresize", "onscroll", | |
84 "onselect", "onsubmit", "onunload", | |
85 | |
86 // Safari Web Content Guide | |
87 // http://developer.apple.com/library/safari/#documentation/AppleApplication
s/Reference/SafariWebContent/SafariWebContent.pdf | |
88 // WebKit Window member data, from WebKit DOM Reference | |
89 // (http://developer.apple.com/safari/library/documentation/AppleApplication
s/Reference/WebKitDOMRef/DOMWindow_idl/Classes/DOMWindow/index.html) | |
90 "ontouchcancel", "ontouchend", "ontouchmove", "ontouchstart", | |
91 "ongesturestart", "ongesturechange", "ongestureend", | |
92 | |
93 // extra window methods | |
94 "uneval", | |
95 | |
96 // keywords https://developer.mozilla.org/en/New_in_JavaScript_1.7, | |
97 // https://developer.mozilla.org/en/New_in_JavaScript_1.8.1 | |
98 "getPrototypeOf", "let", "yield", | |
99 | |
100 // "future reserved words" | |
101 "abstract", "int", "short", "boolean", "interface", "static", "byte", | |
102 "long", "char", "final", "native", "synchronized", "float", "package", | |
103 "throws", "goto", "private", "transient", "implements", "protected", | |
104 "volatile", "double", "public", | |
105 | |
106 // IE methods | |
107 // (http://msdn.microsoft.com/en-us/library/ms535873(VS.85).aspx#) | |
108 "attachEvent", "clientInformation", "clipboardData", "createPopup", | |
109 "dialogHeight", "dialogLeft", "dialogTop", "dialogWidth", | |
110 "onafterprint", "onbeforedeactivate", "onbeforeprint", | |
111 "oncontrolselect", "ondeactivate", "onhelp", "onresizeend", | |
112 | |
113 // Common browser-defined identifiers not defined in ECMAScript | |
114 "event", "external", "Debug", "Enumerator", "Global", "Image", | |
115 "ActiveXObject", "VBArray", "Components", | |
116 | |
117 // Functions commonly defined on Object | |
118 "toString", "getClass", "constructor", "prototype", "valueOf", | |
119 | |
120 // Client-side JavaScript identifiers, which are needed for linkers | |
121 // that don't ensure GWT's window != $wnd, document != $doc, etc. | |
122 // Taken from the Rhino book, pg 715 | |
123 "Anchor", "Applet", "Attr", "Canvas", "CanvasGradient", | |
124 "CanvasPattern", "CanvasRenderingContext2D", "CDATASection", | |
125 "CharacterData", "Comment", "CSS2Properties", "CSSRule", | |
126 "CSSStyleSheet", "Document", "DocumentFragment", "DocumentType", | |
127 "DOMException", "DOMImplementation", "DOMParser", "Element", "Event", | |
128 "ExternalInterface", "FlashPlayer", "Form", "Frame", "History", | |
129 "HTMLCollection", "HTMLDocument", "HTMLElement", "IFrame", "Image", | |
130 "Input", "JSObject", "KeyEvent", "Link", "Location", "MimeType", | |
131 "MouseEvent", "Navigator", "Node", "NodeList", "Option", "Plugin", | |
132 "ProcessingInstruction", "Range", "RangeException", "Screen", "Select", | |
133 "Table", "TableCell", "TableRow", "TableSelection", "Text", "TextArea", | |
134 "UIEvent", "Window", "XMLHttpRequest", "XMLSerializer", | |
135 "XPathException", "XPathResult", "XSLTProcessor", | |
136 | |
137 // These keywords trigger the loading of the java-plugin. For the | |
138 // next-generation plugin, this results in starting a new Java process. | |
139 "java", "Packages", "netscape", "sun", "JavaObject", "JavaClass", | |
140 "JavaArray", "JavaMember", | |
141 | |
142 // GWT-defined identifiers | |
143 "\$wnd", "\$doc", "\$entry", "\$moduleName", "\$moduleBase", | |
144 "\$gwt_version", "\$sessionId", | |
145 | |
146 // Identifiers used by JsStackEmulator; later set to obfuscatable | |
147 "\$stack", "\$stackDepth", "\$location", | |
148 | |
149 // TODO: prove why this is necessary or remove it | |
150 "call" | |
151 ]; | |
152 | |
153 static final reservedPropertySymbols = | |
154 const <String>["__PROTO__", "prototype", "constructor"]; | |
155 | |
156 static Set<String> _reserved; | |
157 | |
158 static Set<String> get reserved() { | |
159 if (_reserved === null) { | |
160 _reserved = new Set<String>(); | |
161 _reserved.addAll(reservedPropertySymbols); | |
162 _reserved.addAll(reservedGlobalSymbols); | |
163 _reserved.addAll(javaScriptKeywords); | |
164 } | |
165 return _reserved; | |
166 } | |
167 | |
168 // TODO(ngeoffray): only the namer should call this method. | |
169 // Eventually move it there. | |
170 /* | |
171 * Returns a name that does not clash with reserved JS keywords, | |
172 * and also ensures it won't clash with other identifiers. | |
173 */ | |
174 static String getValid(String name) { | |
175 if (reserved.contains(name)) { | |
176 name = '$name\$'; | |
177 assert(!reserved.contains(name)); | |
178 } else if (name.contains(@'$')) { | |
179 name = name.replaceAll(@'$', @'$$'); | |
180 } | |
181 return name; | |
182 } | |
183 } | |
OLD | NEW |