Skip to content

Commit 70b8ed6

Browse files
committed
Add some comments on bootstrappin
1 parent d06416b commit 70b8ed6

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

core/src/main/java/org/jruby/Ruby.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -336,20 +336,20 @@ private Ruby(RubyInstanceConfig config) {
336336
refinementClass.setMetaClass(classClass);
337337

338338
RubyClass metaClass;
339-
metaClass = basicObjectClass.makeMetaClass(classClass);
340-
metaClass = objectClass.makeMetaClass(metaClass);
341-
metaClass = moduleClass.makeMetaClass(metaClass);
342-
classClass.makeMetaClass(metaClass);
339+
metaClass = basicObjectClass.makeMetaClass(classClass); // runtime needed for 3 things:
340+
metaClass = objectClass.makeMetaClass(metaClass); // 1. ObjectSpace
341+
metaClass = moduleClass.makeMetaClass(metaClass); // 2. Access 'Class' for makeMetaClass
342+
classClass.makeMetaClass(metaClass); // 3. booting check to ignore logging singletons
343343
refinementClass.makeMetaClass(metaClass);
344344

345345
RubyObject.createObjectClass(objectClass);
346346
RubyModule.createModuleClass(moduleClass);
347347
RubyClass.createClassClass(this, classClass);
348348

349349
// set constants now that they're initialized
350-
basicObjectClass.setConstant("BasicObject", basicObjectClass);
351-
objectClass.setConstant("BasicObject", basicObjectClass);
352-
objectClass.setConstant("Object", objectClass);
350+
basicObjectClass.setConstant("BasicObject", basicObjectClass); // FIXME: We know these sets will work so make something primal
351+
objectClass.setConstant("BasicObject", basicObjectClass); // just for these (to remove all checks which would require
352+
objectClass.setConstant("Object", objectClass); // runtime.
353353
objectClass.setConstant("Class", classClass);
354354
objectClass.setConstant("Module", moduleClass);
355355
objectClass.setConstant("Refinement", refinementClass);
@@ -360,7 +360,8 @@ private Ruby(RubyInstanceConfig config) {
360360
kernelModule = defineModuleUnder("Kernel", objectClass); // Initialize Kernel and include into Object
361361
topSelf = new RubyObject(this, objectClass); // Object is ready, create top self
362362

363-
// Pre-create all the core classes potentially referenced during startup
363+
// nil, true, and false all are set in TC so they need to be created above (both class and instances).
364+
// their methods are added afterwards since no dispatch happens until after first TC is defined.
364365
nilClass = defineClass("NilClass", objectClass, NOT_ALLOCATABLE_ALLOCATOR);
365366
falseClass = defineClass("FalseClass", objectClass, NOT_ALLOCATABLE_ALLOCATOR);
366367
trueClass = defineClass("TrueClass", objectClass, NOT_ALLOCATABLE_ALLOCATOR);

0 commit comments

Comments
 (0)