@@ -106,6 +106,7 @@ public class CoreLibrary {
106
106
private final RubyModule kernelModule ;
107
107
private final RubyModule mathModule ;
108
108
private final RubyModule objectSpaceModule ;
109
+ private final RubyModule rubiniusModule ;
109
110
private final RubyModule signalModule ;
110
111
private final RubyModule truffleModule ;
111
112
private final RubyModule truffleDebugModule ;
@@ -282,31 +283,53 @@ public CoreLibrary(RubyContext context) {
282
283
truffleDebugModule = defineModule (truffleModule , "Debug" );
283
284
defineModule (truffleModule , "Primitive" );
284
285
285
- RubyModule rubiniusModule = defineModule ("Rubinius" );
286
- rubiniusUndefined = new RubyBasicObject (objectClass );
287
- rubiniusModule .setConstant (null , "UNDEFINED" , rubiniusUndefined );
286
+ rubiniusModule = defineModule ("Rubinius" );
288
287
byteArrayClass = new RubyClass (context , rubiniusModule , objectClass , "ByteArray" );
289
288
289
+ // Include the core modules
290
+
290
291
includeModules (comparableModule );
291
292
292
293
// Create some key objects
293
294
294
295
mainObject = new RubyBasicObject (objectClass );
295
296
nilObject = new RubyNilClass (nilClass );
296
297
argv = new RubyArray (arrayClass );
298
+ rubiniusUndefined = new RubyBasicObject (objectClass );
297
299
298
- initializeConstants ();
299
-
300
- globalVariablesObject = initializeGlobalVariables ();
300
+ globalVariablesObject = new RubyBasicObject (objectClass );
301
301
302
302
arrayMinBlock = new ArrayNodes .MinBlock (context );
303
303
arrayMaxBlock = new ArrayNodes .MaxBlock (context );
304
304
}
305
305
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 () {
307
330
RubyNode .notDesignedForCompilation ();
308
331
309
- RubyBasicObject globals = new RubyBasicObject ( objectClass ) ;
332
+ RubyBasicObject globals = globalVariablesObject ;
310
333
311
334
globals .getOperations ().setInstanceVariable (globals , "$LOAD_PATH" , new RubyArray (arrayClass ));
312
335
globals .getOperations ().setInstanceVariable (globals , "$LOADED_FEATURES" , new RubyArray (arrayClass ));
@@ -324,22 +347,6 @@ private RubyBasicObject initializeGlobalVariables() {
324
347
325
348
// TODO (nirvdrum 05-Feb-15) We need to support the $-0 alias as well.
326
349
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 );
343
350
}
344
351
345
352
private void initializeConstants () {
@@ -357,6 +364,8 @@ private void initializeConstants() {
357
364
358
365
objectClass .setConstant (null , "ARGV" , argv );
359
366
367
+ rubiniusModule .setConstant (null , "UNDEFINED" , rubiniusUndefined );
368
+
360
369
final RubyString separator = RubyString .fromJavaString (stringClass , "/" );
361
370
separator .freeze ();
362
371
@@ -374,8 +383,6 @@ private void initializeConstants() {
374
383
375
384
fileClass .setConstant (null , "PATH_SEPARATOR" , RubyString .fromJavaString (stringClass , File .pathSeparator ));
376
385
fileClass .setConstant (null , "FNM_SYSCASE" , 0 );
377
-
378
- initializeEncodingConstants ();
379
386
}
380
387
381
388
private RubyClass defineClass (String name ) {
0 commit comments