OLD | NEW |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 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 | 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. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 part of js_backend; | 5 part of js_backend; |
6 | 6 |
7 /** | 7 /** |
8 * Assigns JavaScript identifiers to Dart variables, class-names and members. | 8 * Assigns JavaScript identifiers to Dart variables, class-names and members. |
9 */ | 9 */ |
10 class Namer implements ClosureNamer { | 10 class Namer implements ClosureNamer { |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
171 } | 171 } |
172 | 172 |
173 String publicInstanceMethodNameByArity(SourceString name, int arity) { | 173 String publicInstanceMethodNameByArity(SourceString name, int arity) { |
174 name = Elements.operatorNameToIdentifier(name); | 174 name = Elements.operatorNameToIdentifier(name); |
175 assert(!name.isPrivate()); | 175 assert(!name.isPrivate()); |
176 var base = name.slowToString(); | 176 var base = name.slowToString(); |
177 // We don't mangle the closure invoking function name because it | 177 // We don't mangle the closure invoking function name because it |
178 // is generated by string concatenation in applyFunction from | 178 // is generated by string concatenation in applyFunction from |
179 // js_helper.dart. | 179 // js_helper.dart. |
180 var proposedName = '$base\$$arity'; | 180 var proposedName = '$base\$$arity'; |
181 if (base == closureInvocationSelectorName) return proposedName; | 181 if (name == closureInvocationSelectorName) return proposedName; |
182 return getMappedInstanceName(proposedName); | 182 return getMappedInstanceName(proposedName); |
183 } | 183 } |
184 | 184 |
185 String invocationName(Selector selector) { | 185 String invocationName(Selector selector) { |
186 if (selector.isGetter()) { | 186 if (selector.isGetter()) { |
187 String proposedName = privateName(selector.library, selector.name); | 187 String proposedName = privateName(selector.library, selector.name); |
188 return 'get\$${getMappedInstanceName(proposedName)}'; | 188 return 'get\$${getMappedInstanceName(proposedName)}'; |
189 } else if (selector.isSetter()) { | 189 } else if (selector.isSetter()) { |
190 String proposedName = privateName(selector.library, selector.name); | 190 String proposedName = privateName(selector.library, selector.name); |
191 return 'set\$${getMappedInstanceName(proposedName)}'; | 191 return 'set\$${getMappedInstanceName(proposedName)}'; |
192 } else { | 192 } else { |
193 SourceString name = Elements.operatorNameToIdentifier(selector.name); | 193 SourceString name = Elements.operatorNameToIdentifier(selector.name); |
194 StringBuffer buffer = new StringBuffer(); | 194 StringBuffer buffer = new StringBuffer(); |
195 for (SourceString argumentName in selector.getOrderedNamedArguments()) { | 195 for (SourceString argumentName in selector.getOrderedNamedArguments()) { |
196 buffer.add(r'$'); | 196 buffer.add(r'$'); |
197 argumentName.printOn(buffer); | 197 argumentName.printOn(buffer); |
198 } | 198 } |
199 String suffix = '\$${selector.argumentCount}$buffer'; | 199 String suffix = '\$${selector.argumentCount}$buffer'; |
200 // We don't mangle the closure invoking function name because it | 200 // We don't mangle the closure invoking function name because it |
201 // is generated by string concatenation in applyFunction from | 201 // is generated by string concatenation in applyFunction from |
202 // js_helper.dart. | 202 // js_helper.dart. |
203 if (selector.isClosureCall()) return "$name$suffix"; | 203 if (selector.isCall() && name == closureInvocationSelectorName) { |
| 204 return "$name$suffix"; |
| 205 } |
204 String proposedName = privateName(selector.library, name); | 206 String proposedName = privateName(selector.library, name); |
205 return getMappedInstanceName('$proposedName$suffix'); | 207 return getMappedInstanceName('$proposedName$suffix'); |
206 } | 208 } |
207 } | 209 } |
208 | 210 |
209 /** | 211 /** |
210 * Returns the internal name used for an invocation mirror of this selector. | 212 * Returns the internal name used for an invocation mirror of this selector. |
211 */ | 213 */ |
212 String invocationMirrorInternalName(Selector selector) | 214 String invocationMirrorInternalName(Selector selector) |
213 => invocationName(selector); | 215 => invocationName(selector); |
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
468 } | 470 } |
469 | 471 |
470 String safeName(String name) { | 472 String safeName(String name) { |
471 if (jsReserved.contains(name) || name.startsWith('\$')) { | 473 if (jsReserved.contains(name) || name.startsWith('\$')) { |
472 name = "\$$name"; | 474 name = "\$$name"; |
473 assert(!jsReserved.contains(name)); | 475 assert(!jsReserved.contains(name)); |
474 } | 476 } |
475 return name; | 477 return name; |
476 } | 478 } |
477 } | 479 } |
OLD | NEW |