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

Unified Diff: frog/minfrog

Issue 9656003: Fix for issue with incorrectly renamed private names. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: x Created 8 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « frog/member_set.dart ('k') | frog/world.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: frog/minfrog
diff --git a/frog/minfrog b/frog/minfrog
index e9f39338d2c675fa2d580dae38e334cf4907e4a6..a1bb7ba34a4d32317b0933727b583424a94904a8 100755
--- a/frog/minfrog
+++ b/frog/minfrog
@@ -5583,34 +5583,12 @@ Library.prototype._addMember = function(member) {
else {
members.add(member);
}
- this._makePrivateMembersUnique(member, members);
}
}
else {
$globals.world._addMember(member);
}
}
-Library.prototype._makePrivateMembersUnique = function(member, members) {
- if (members.jsnameUnique) {
- member._jsname = members.jsname;
- return;
- }
- var name = members.name;
- var $$list = $globals.world.libraries.getValues();
- for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
- var lib = $$i.next();
- if ((null == lib ? null != (this) : lib !== this) && lib.get$_privateMembers().containsKey(name)) {
- var uniqueName = ("_" + this.get$jsname() + members.jsname);
- members.jsname = uniqueName;
- members.jsnameUnique = true;
- members.members.forEach((function (uniqueName, each) {
- each.set$_jsname(uniqueName);
- }).bind(null, uniqueName)
- );
- return;
- }
- }
-}
Library.prototype.getOrAddFunctionType = function(enclosingElement, name, func, data) {
var def = new FunctionTypeDefinition(func, null, func.span);
var type = new DefinedType(name, this, def, false);
@@ -6908,7 +6886,6 @@ function MemberSet(member, isVar) {
this.jsname = member.get$jsname();
this.name = member.name;
this._preparedForSet = false;
- this.jsnameUnique = false;
this.isVar = isVar;
this.members = [member];
}
@@ -6916,6 +6893,7 @@ MemberSet.prototype.get$name = function() { return this.name; };
MemberSet.prototype.get$members = function() { return this.members; };
MemberSet.prototype.get$isVar = function() { return this.isVar; };
MemberSet.prototype.get$jsname = function() { return this.jsname; };
+MemberSet.prototype.set$jsname = function(value) { return this.jsname = value; };
MemberSet.prototype.toString = function() {
return ("" + this.name + ":" + this.members.get$length());
}
@@ -14188,6 +14166,10 @@ World.prototype.runCompilationPhases = function() {
})
);
this.withTiming("resolve top level", this.get$resolveAll());
+ this.withTiming("privatization", (function () {
+ $this.makePrivateMembersUnique(lib);
+ })
+ );
if ($globals.experimentalAwaitPhase != null) {
this.withTiming("await translation", to$call$0($globals.experimentalAwaitPhase));
}
@@ -14273,6 +14255,40 @@ World.prototype.resolveAll = function() {
World.prototype.get$resolveAll = function() {
return this.resolveAll.bind(this);
}
+World.prototype.makePrivateMembersUnique = function(rootLib) {
+ var usedNames = new HashSetImplementation_dart_core_String();
+ function process(lib) {
+ var $$list = lib.get$_privateMembers().getKeys();
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var name = $$i.next();
+ if (usedNames.contains$1(name)) {
+ var members = lib.get$_privateMembers().$index(name);
+ var uniqueName = ("_" + lib.get$jsname() + members.get$jsname());
+ members.set$jsname(uniqueName);
+ var $list0 = members.get$members();
+ for (var $i0 = $list0.iterator(); $i0.hasNext(); ) {
+ var member = $i0.next();
+ member.set$_jsname(uniqueName);
+ }
+ }
+ else {
+ usedNames.add(name);
+ }
+ }
+ }
+ var visited = new HashSetImplementation_Library();
+ function visit(lib) {
+ if (visited.contains$1(lib)) return;
+ visited.add(lib);
+ process(lib);
+ var $$list = lib.get$imports();
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var import_ = $$i.next();
+ visit(import_.get$library());
+ }
+ }
+ visit(rootLib);
+}
World.prototype.findMainMethod = function(lib) {
var main = lib.lookup("main", lib.get$span());
if ($eq$(main)) {
« no previous file with comments | « frog/member_set.dart ('k') | frog/world.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698