Skip to content

Commit

Permalink
Showing 2 changed files with 34 additions and 26 deletions.
Original file line number Diff line number Diff line change
@@ -104,6 +104,7 @@ public RubyContext(Ruby runtime) {
emptyShape = RubyBasicObject.LAYOUT.createShape(new RubyOperations(this));

coreLibrary = new CoreLibrary(this);
coreLibrary.initialize();

featureManager = new FeatureManager(this);
traceManager = new TraceManager();
Original file line number Diff line number Diff line change
@@ -106,6 +106,7 @@ public class CoreLibrary {
private final RubyModule kernelModule;
private final RubyModule mathModule;
private final RubyModule objectSpaceModule;
private final RubyModule rubiniusModule;
private final RubyModule signalModule;
private final RubyModule truffleModule;
private final RubyModule truffleDebugModule;
@@ -282,31 +283,53 @@ public CoreLibrary(RubyContext context) {
truffleDebugModule = defineModule(truffleModule, "Debug");
defineModule(truffleModule, "Primitive");

RubyModule rubiniusModule = defineModule("Rubinius");
rubiniusUndefined = new RubyBasicObject(objectClass);
rubiniusModule.setConstant(null, "UNDEFINED", rubiniusUndefined);
rubiniusModule = defineModule("Rubinius");
byteArrayClass = new RubyClass(context, rubiniusModule, objectClass, "ByteArray");

// Include the core modules

includeModules(comparableModule);

// Create some key objects

mainObject = new RubyBasicObject(objectClass);
nilObject = new RubyNilClass(nilClass);
argv = new RubyArray(arrayClass);
rubiniusUndefined = new RubyBasicObject(objectClass);

initializeConstants();

globalVariablesObject = initializeGlobalVariables();
globalVariablesObject = new RubyBasicObject(objectClass);

arrayMinBlock = new ArrayNodes.MinBlock(context);
arrayMaxBlock = new ArrayNodes.MaxBlock(context);
}

private RubyBasicObject initializeGlobalVariables() {
private void includeModules(RubyModule comparableModule) {
objectClass.include(null, kernelModule);

numericClass.include(null, comparableModule);
stringClass.include(null, comparableModule);
symbolClass.include(null, comparableModule);

arrayClass.include(null, enumerableModule);
dirClass.include(null, enumerableModule);
hashClass.include(null, enumerableModule);
ioClass.include(null, enumerableModule);
rangeClass.include(null, enumerableModule);
}

/**
* Initializations which may access {@link RubyContext#getCoreLibrary()}.
*/
public void initialize() {
initializeGlobalVariables();
initializeConstants();
initializeEncodingConstants();
}

private void initializeGlobalVariables() {
RubyNode.notDesignedForCompilation();

RubyBasicObject globals = new RubyBasicObject(objectClass);
RubyBasicObject globals = globalVariablesObject;

globals.getOperations().setInstanceVariable(globals, "$LOAD_PATH", new RubyArray(arrayClass));
globals.getOperations().setInstanceVariable(globals, "$LOADED_FEATURES", new RubyArray(arrayClass));
@@ -324,22 +347,6 @@ private RubyBasicObject initializeGlobalVariables() {

// TODO (nirvdrum 05-Feb-15) We need to support the $-0 alias as well.
globals.getOperations().setInstanceVariable(globals, "$/", defaultRecordSeparator);

return globals;
}

private void includeModules(RubyModule comparableModule) {
objectClass.include(null, kernelModule);

numericClass.include(null, comparableModule);
stringClass.include(null, comparableModule);
symbolClass.include(null, comparableModule);

arrayClass.include(null, enumerableModule);
dirClass.include(null, enumerableModule);
hashClass.include(null, enumerableModule);
ioClass.include(null, enumerableModule);
rangeClass.include(null, enumerableModule);
}

private void initializeConstants() {
@@ -357,6 +364,8 @@ private void initializeConstants() {

objectClass.setConstant(null, "ARGV", argv);

rubiniusModule.setConstant(null, "UNDEFINED", rubiniusUndefined);

final RubyString separator = RubyString.fromJavaString(stringClass, "/");
separator.freeze();

@@ -374,8 +383,6 @@ private void initializeConstants() {

fileClass.setConstant(null, "PATH_SEPARATOR", RubyString.fromJavaString(stringClass, File.pathSeparator));
fileClass.setConstant(null, "FNM_SYSCASE", 0);

initializeEncodingConstants();
}

private RubyClass defineClass(String name) {

0 comments on commit 9ae4641

Please sign in to comment.