Index: frog/minfrog |
diff --git a/frog/minfrog b/frog/minfrog |
index 4948e0da77d82a396e9b1ba67152fa8e42140b02..004024e4773aa7a635eafad0be0fa27ccddd7504 100755 |
--- a/frog/minfrog |
+++ b/frog/minfrog |
@@ -5573,29 +5573,44 @@ Library.prototype._addMember = function(member) { |
if (member.declaringType.get$isTop()) { |
$globals.world._addTopName(member); |
} |
- return; |
- } |
- var mset = this._privateMembers.$index(member.name); |
- if ($eq$(mset)) { |
- var $$list = $globals.world.libraries.getValues(); |
- for (var $$i = $$list.iterator(); $$i.hasNext(); ) { |
- var lib = $$i.next(); |
- if (lib.get$_privateMembers().containsKey(member.get$jsname())) { |
- member._jsname = ("_" + this.get$jsname() + member.get$jsname()); |
- break; |
- } |
- } |
- mset = new MemberSet(member, true); |
- this._privateMembers.$setindex(member.name, mset); |
} |
else { |
- mset.get$members().add(member); |
+ var members = this._privateMembers.$index(member.name); |
+ if ($eq$(members)) { |
+ members = new MemberSet(member, true); |
+ this._privateMembers.$setindex(member.name, members); |
+ } |
+ 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); |
@@ -6893,13 +6908,14 @@ 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]; |
} |
MemberSet.prototype.get$name = function() { return this.name; }; |
MemberSet.prototype.get$members = function() { return this.members; }; |
-MemberSet.prototype.get$jsname = function() { return this.jsname; }; |
MemberSet.prototype.get$isVar = function() { return this.isVar; }; |
+MemberSet.prototype.get$jsname = function() { return this.jsname; }; |
MemberSet.prototype.toString = function() { |
return ("" + this.name + ":" + this.members.get$length()); |
} |
@@ -14274,7 +14290,7 @@ World.prototype.generateCode = function(lib) { |
this.jsBytesWritten = this.frogCode.length; |
this.gen = null; |
} |
-World.prototype._message = function(color, prefix, message, span, span1, span2, throwing) { |
+World.prototype._lang_message = function(color, prefix, message, span, span1, span2, throwing) { |
if (this.messageHandler != null) { |
this.messageHandler(prefix, message, span); |
if (span1 != null) { |
@@ -14304,7 +14320,7 @@ World.prototype._message = function(color, prefix, message, span, span1, span2, |
} |
World.prototype.error = function(message, span, span1, span2) { |
this.errors++; |
- this._message($globals._RED_COLOR, "error: ", message, span, span1, span2, $globals.options.throwOnErrors); |
+ this._lang_message($globals._RED_COLOR, "error: ", message, span, span1, span2, $globals.options.throwOnErrors); |
} |
World.prototype.warning = function(message, span, span1, span2) { |
if ($globals.options.warningsAsErrors) { |
@@ -14313,20 +14329,20 @@ World.prototype.warning = function(message, span, span1, span2) { |
} |
this.warnings++; |
if ($globals.options.showWarnings) { |
- this._message($globals._MAGENTA_COLOR, "warning: ", message, span, span1, span2, $globals.options.throwOnWarnings); |
+ this._lang_message($globals._MAGENTA_COLOR, "warning: ", message, span, span1, span2, $globals.options.throwOnWarnings); |
} |
} |
World.prototype.fatal = function(message, span, span1, span2) { |
this.errors++; |
this.seenFatal = true; |
- this._message($globals._RED_COLOR, "fatal: ", message, span, span1, span2, $globals.options.throwOnFatal || $globals.options.throwOnErrors); |
+ this._lang_message($globals._RED_COLOR, "fatal: ", message, span, span1, span2, $globals.options.throwOnFatal || $globals.options.throwOnErrors); |
} |
World.prototype.internalError = function(message, span, span1, span2) { |
- this._message($globals._NO_COLOR, "We are sorry, but...", message, span, span1, span2, true); |
+ this._lang_message($globals._NO_COLOR, "We are sorry, but...", message, span, span1, span2, true); |
} |
World.prototype.info = function(message, span, span1, span2) { |
if ($globals.options.showInfo) { |
- this._message($globals._GREEN_COLOR, "info: ", message, span, span1, span2, false); |
+ this._lang_message($globals._GREEN_COLOR, "info: ", message, span, span1, span2, false); |
} |
} |
World.prototype.withoutForceDynamic = function(fn) { |