IronRuby.Builtins.RubyClass.Duplicate C# (CSharp) Method

Duplicate() private method

Duplicates this class object. When duplicating singleton class a new "singletonClassOf" reference needs to be provided. NOT thread safe.
private Duplicate ( object singletonClassOf ) : RubyClass
singletonClassOf object
return RubyClass
        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;
        }