151151import static org .jruby .api .Access .objectClass ;
152152import static org .jruby .api .Convert .*;
153153import static org .jruby .api .Create .*;
154+ import static org .jruby .api .Define .defineModule ;
154155import static org .jruby .api .Error .*;
155156import static org .jruby .api .Warn .warn ;
156157import static org .jruby .api .Warn .warnDeprecated ;
@@ -436,7 +437,7 @@ protected RubyModule(Ruby runtime, RubyClass metaClass) {
436437 /** standard path for Module construction
437438 *
438439 */
439- protected RubyModule (Ruby runtime ) {
440+ public RubyModule (Ruby runtime ) {
440441 this (runtime , runtime .getModule ());
441442 }
442443
@@ -447,27 +448,43 @@ public boolean needsImplementer() {
447448 /** rb_module_new
448449 *
449450 */
451+ @ Deprecated (since = "10.0" )
450452 public static RubyModule newModule (Ruby runtime ) {
451453 return new RubyModule (runtime );
452454 }
453455
456+ @ Deprecated (since = "10.0" )
457+ public static RubyModule newModule (Ruby runtime , String name , RubyModule parent , boolean setParent , String file , int line ) {
458+ return newModule (runtime .getCurrentContext (), name , parent , setParent , file , line );
459+ }
460+
454461 /** rb_module_new/rb_define_module_id/rb_name_class/rb_set_class_path
455462 *
463+ * This is used by IR to define a new module.
456464 */
457- public static RubyModule newModule (Ruby runtime , String name , RubyModule parent , boolean setParent , String file , int line ) {
458- RubyModule module = newModule ( runtime ).baseName (name );
465+ public static RubyModule newModule (ThreadContext context , String name , RubyModule parent , boolean setParent , String file , int line ) {
466+ RubyModule module = defineModule ( context ).baseName (name );
459467 if (setParent ) module .setParent (parent );
460- parent .setConstant (name , module , file , line );
468+ if (file != null ) {
469+ parent .setConstant (name , module , file , line );
470+ } else {
471+ parent .setConstant (name , module );
472+ }
461473 return module ;
462474 }
463475
476+ @ Deprecated (since = "10.0" )
464477 public static RubyModule newModule (Ruby runtime , String name , RubyModule parent , boolean setParent ) {
465- RubyModule module = newModule (runtime ).baseName (name );
478+ RubyModule module = new RubyModule (runtime ).baseName (name );
466479 if (setParent ) module .setParent (parent );
467480 parent .setConstant (name , module );
468481 return module ;
469482 }
470483
484+ public static RubyModule newModuleBootstrap (Ruby runtime , String name , RubyModule parent ) {
485+ return (RubyModule ) parent .setConstant (name , new RubyModule (runtime ).baseName (name ));
486+ }
487+
471488 // synchronized method per JRUBY-1173 (unsafe Double-Checked Locking)
472489 // FIXME: synchronization is still wrong in CP code
473490 public final synchronized void addClassProvider (ClassProvider provider ) {
@@ -2537,7 +2554,7 @@ public RubyModule defineOrGetModuleUnder(ThreadContext context, String name, Str
25372554 } else if ((module = searchProvidersForModule (name )) != null ) {
25382555 // reopen a java module
25392556 } else {
2540- module = RubyModule .newModule (context . runtime , name , this , true , file , line );
2557+ module = RubyModule .newModule (context , name , this , true , file , line );
25412558 }
25422559 return module ;
25432560 }
0 commit comments