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)) { |