Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(392)

Side by Side Diff: dart/lib/compiler/implementation/namer.dart

Issue 10581036: Ensure uniqueness of global names. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Update comment Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « dart/language/namer_test.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 /** 5 /**
6 * Assigns JavaScript identifiers to Dart variables, class-names and members. 6 * Assigns JavaScript identifiers to Dart variables, class-names and members.
7 */ 7 */
8 class Namer { 8 class Namer {
9 final Compiler compiler; 9 final Compiler compiler;
10 10
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 } 99 }
100 100
101 String getterName(LibraryElement lib, SourceString name) { 101 String getterName(LibraryElement lib, SourceString name) {
102 // We dynamically create getters from the field-name. The getter name must 102 // We dynamically create getters from the field-name. The getter name must
103 // therefore be derived from the instance field-name. 103 // therefore be derived from the instance field-name.
104 String fieldName = safeName(privateName(lib, name)); 104 String fieldName = safeName(privateName(lib, name));
105 return 'get\$$fieldName'; 105 return 'get\$$fieldName';
106 } 106 }
107 107
108 String getFreshGlobalName(String proposedName) { 108 String getFreshGlobalName(String proposedName) {
109 int usedCount = usedGlobals[proposedName]; 109 String name = proposedName;
110 if (usedCount === null) { 110 int count = usedGlobals[name];
111 // No element with this name has been used before. 111 if (count !== null) {
112 usedGlobals[proposedName] = 1;
113 return proposedName;
114 } else {
115 // Not the first time we see this name. Append a number to make it unique. 112 // Not the first time we see this name. Append a number to make it unique.
116 String name;
117 do { 113 do {
118 usedCount++; 114 name = '$proposedName${count++}';
119 name = '$proposedName$usedCount';
120 } while (usedGlobals[name] !== null); 115 } while (usedGlobals[name] !== null);
121 usedGlobals[proposedName] = usedCount; 116 // Record the count in case we see this name later. We
122 return name; 117 // frequently see names multiple times, as all our closures use
118 // the same name for their class.
119 usedGlobals[proposedName] = count;
123 } 120 }
121 usedGlobals[name] = 0;
122 return name;
124 } 123 }
125 124
126 static final String LIBRARY_PREFIX = "lib"; 125 static final String LIBRARY_PREFIX = "lib";
127 126
128 /** 127 /**
129 * Returns a preferred JS-id for the given top-level or static element. 128 * Returns a preferred JS-id for the given top-level or static element.
130 * The returned id is guaranteed to be a valid JS-id. 129 * The returned id is guaranteed to be a valid JS-id.
131 */ 130 */
132 String _computeGuess(Element element) { 131 String _computeGuess(Element element) {
133 assert(!element.isInstanceMember()); 132 assert(!element.isInstanceMember());
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 } 239 }
241 240
242 String safeName(String name) { 241 String safeName(String name) {
243 if (jsReserved.contains(name) || name.startsWith('\$')) { 242 if (jsReserved.contains(name) || name.startsWith('\$')) {
244 name = "\$$name"; 243 name = "\$$name";
245 assert(!jsReserved.contains(name)); 244 assert(!jsReserved.contains(name));
246 } 245 }
247 return name; 246 return name;
248 } 247 }
249 } 248 }
OLDNEW
« no previous file with comments | « dart/language/namer_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698