Skip to content

Commit

Permalink
[Truffle] Only initialize core classes and modules in CoreLibrary con…
Browse files Browse the repository at this point in the history
…structor.
  • Loading branch information
eregon committed Feb 6, 2015
1 parent be3e5bf commit 9ae4641
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 26 deletions.
Expand Up @@ -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();
Expand Down
Expand Up @@ -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;
Expand Down Expand Up @@ -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));
Expand All @@ -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() {
Expand All @@ -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();

Expand All @@ -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) {
Expand Down

0 comments on commit 9ae4641

Please sign in to comment.