public MutableString GetDisplayName(RubyContext/*!*/ context, bool showEmptyName) {
if (IsSingletonClass) {
RubyClass c = (RubyClass)this;
object singletonOf;
MutableString result = MutableString.CreateMutable(context.GetIdentifierEncoding());
int nestings = 0;
while (true) {
nestings++;
result.Append("#<Class:");
singletonOf = c.SingletonClassOf;
RubyModule module = singletonOf as RubyModule;
if (module == null || !module.IsSingletonClass && module.Name == null) {
nestings++;
result.Append("#<");
result.Append(c.SuperClass.GetName(context));
result.Append(':');
RubyUtils.AppendFormatHexObjectId(result, RubyUtils.GetObjectId(_context, singletonOf));
break;
}
if (!module.IsSingletonClass) {
result.Append(module.GetName(context));
break;
}
c = (RubyClass)module;
}
return result.Append('>', nestings);
} else if (_name == null) {
if (showEmptyName) {
return null;
} else {
MutableString result = MutableString.CreateMutable(context.GetIdentifierEncoding());
result.Append("#<");
result.Append(_context.GetClassOf(this).GetName(context));
result.Append(':');
RubyUtils.AppendFormatHexObjectId(result, RubyUtils.GetObjectId(_context, this));
result.Append('>');
return result;
}
} else {
return MutableString.CreateMutable(GetName(context), context.GetIdentifierEncoding());
}
}