// thread safe: internal void InitializeImmediateClass(RubyClass/*!*/ singletonSuperClass, Action<RubyModule> trait) { Assert.NotNull(singletonSuperClass); RubyClass immediate; if (IsClass) { // class: eager singleton class construction: immediate = CreateSingletonClass(singletonSuperClass, trait); immediate.InitializeImmediateClass(_context.ClassClass.GetDummySingletonClass()); } else if (trait != null) { // module: eager singleton class construction: immediate = CreateSingletonClass(singletonSuperClass, trait); immediate.InitializeImmediateClass(singletonSuperClass.GetDummySingletonClass()); } else { // module: lazy singleton class construction: immediate = singletonSuperClass; } InitializeImmediateClass(immediate); }