@@ -106,6 +106,7 @@ public class CoreLibrary {
106106 private final RubyModule kernelModule ;
107107 private final RubyModule mathModule ;
108108 private final RubyModule objectSpaceModule ;
109+ private final RubyModule rubiniusModule ;
109110 private final RubyModule signalModule ;
110111 private final RubyModule truffleModule ;
111112 private final RubyModule truffleDebugModule ;
@@ -282,31 +283,53 @@ public CoreLibrary(RubyContext context) {
282283 truffleDebugModule = defineModule (truffleModule , "Debug" );
283284 defineModule (truffleModule , "Primitive" );
284285
285- RubyModule rubiniusModule = defineModule ("Rubinius" );
286- rubiniusUndefined = new RubyBasicObject (objectClass );
287- rubiniusModule .setConstant (null , "UNDEFINED" , rubiniusUndefined );
286+ rubiniusModule = defineModule ("Rubinius" );
288287 byteArrayClass = new RubyClass (context , rubiniusModule , objectClass , "ByteArray" );
289288
289+ // Include the core modules
290+
290291 includeModules (comparableModule );
291292
292293 // Create some key objects
293294
294295 mainObject = new RubyBasicObject (objectClass );
295296 nilObject = new RubyNilClass (nilClass );
296297 argv = new RubyArray (arrayClass );
298+ rubiniusUndefined = new RubyBasicObject (objectClass );
297299
298- initializeConstants ();
299-
300- globalVariablesObject = initializeGlobalVariables ();
300+ globalVariablesObject = new RubyBasicObject (objectClass );
301301
302302 arrayMinBlock = new ArrayNodes .MinBlock (context );
303303 arrayMaxBlock = new ArrayNodes .MaxBlock (context );
304304 }
305305
306- private RubyBasicObject initializeGlobalVariables () {
306+ private void includeModules (RubyModule comparableModule ) {
307+ objectClass .include (null , kernelModule );
308+
309+ numericClass .include (null , comparableModule );
310+ stringClass .include (null , comparableModule );
311+ symbolClass .include (null , comparableModule );
312+
313+ arrayClass .include (null , enumerableModule );
314+ dirClass .include (null , enumerableModule );
315+ hashClass .include (null , enumerableModule );
316+ ioClass .include (null , enumerableModule );
317+ rangeClass .include (null , enumerableModule );
318+ }
319+
320+ /**
321+ * Initializations which may access {@link RubyContext#getCoreLibrary()}.
322+ */
323+ public void initialize () {
324+ initializeGlobalVariables ();
325+ initializeConstants ();
326+ initializeEncodingConstants ();
327+ }
328+
329+ private void initializeGlobalVariables () {
307330 RubyNode .notDesignedForCompilation ();
308331
309- RubyBasicObject globals = new RubyBasicObject ( objectClass ) ;
332+ RubyBasicObject globals = globalVariablesObject ;
310333
311334 globals .getOperations ().setInstanceVariable (globals , "$LOAD_PATH" , new RubyArray (arrayClass ));
312335 globals .getOperations ().setInstanceVariable (globals , "$LOADED_FEATURES" , new RubyArray (arrayClass ));
@@ -324,22 +347,6 @@ private RubyBasicObject initializeGlobalVariables() {
324347
325348 // TODO (nirvdrum 05-Feb-15) We need to support the $-0 alias as well.
326349 globals .getOperations ().setInstanceVariable (globals , "$/" , defaultRecordSeparator );
327-
328- return globals ;
329- }
330-
331- private void includeModules (RubyModule comparableModule ) {
332- objectClass .include (null , kernelModule );
333-
334- numericClass .include (null , comparableModule );
335- stringClass .include (null , comparableModule );
336- symbolClass .include (null , comparableModule );
337-
338- arrayClass .include (null , enumerableModule );
339- dirClass .include (null , enumerableModule );
340- hashClass .include (null , enumerableModule );
341- ioClass .include (null , enumerableModule );
342- rangeClass .include (null , enumerableModule );
343350 }
344351
345352 private void initializeConstants () {
@@ -357,6 +364,8 @@ private void initializeConstants() {
357364
358365 objectClass .setConstant (null , "ARGV" , argv );
359366
367+ rubiniusModule .setConstant (null , "UNDEFINED" , rubiniusUndefined );
368+
360369 final RubyString separator = RubyString .fromJavaString (stringClass , "/" );
361370 separator .freeze ();
362371
@@ -374,8 +383,6 @@ private void initializeConstants() {
374383
375384 fileClass .setConstant (null , "PATH_SEPARATOR" , RubyString .fromJavaString (stringClass , File .pathSeparator ));
376385 fileClass .setConstant (null , "FNM_SYSCASE" , 0 );
377-
378- initializeEncodingConstants ();
379386 }
380387
381388 private RubyClass defineClass (String name ) {
0 commit comments