internal RubyClass/*!*/ Duplicate(object singletonClassOf) {
Context.RequiresClassHierarchyLock();
Debug.Assert(_superClass != null, "BasicObject cannot be duplicated");
RubyClass result = Context.CreateClass(Name, _underlyingSystemType, singletonClassOf, null, null, null, _factories,
_superClass, null, null, _structInfo, IsRubyClass, IsSingletonClass, ModuleRestrictions.None
);
if (!IsSingletonClass) {
// singleton members are copied here, not in InitializeCopy:
result.ImmediateClass.InitializeMembersFrom(ImmediateClass);
// copy instance variables and taint flag:
Context.CopyInstanceData(this, result, false);
}
// members initialized in InitializeClassFrom (invoked by "initialize_copy")
return result;
}