Skip to content

Commit 9ae4641

Browse files
committed
[Truffle] Only initialize core classes and modules in CoreLibrary constructor.
1 parent be3e5bf commit 9ae4641

File tree

2 files changed

+34
-26
lines changed

2 files changed

+34
-26
lines changed

truffle/src/main/java/org/jruby/truffle/runtime/RubyContext.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ public RubyContext(Ruby runtime) {
104104
emptyShape = RubyBasicObject.LAYOUT.createShape(new RubyOperations(this));
105105

106106
coreLibrary = new CoreLibrary(this);
107+
coreLibrary.initialize();
107108

108109
featureManager = new FeatureManager(this);
109110
traceManager = new TraceManager();

truffle/src/main/java/org/jruby/truffle/runtime/core/CoreLibrary.java

Lines changed: 33 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)