@@ -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