object IDuplicable.Duplicate(RubyContext/*!*/ context, bool copySingletonMembers) {
// capture the current immediate class (it can change any time if it not a singleton class)
RubyClass immediate = _immediateClass;
RubyModule result = new RubyModule(immediate.IsSingletonClass ? immediate.SuperClass : immediate, null);
// singleton members are copied here, not in InitializeCopy:
if (copySingletonMembers && immediate.IsSingletonClass) {
var singletonClass = result.GetOrCreateSingletonClass();
using (Context.ClassHierarchyLocker()) {
singletonClass.InitializeMembersFrom(immediate);
}
}
// copy instance variables:
_context.CopyInstanceData(this, result, false);
return result;
}