public void getAdoptedByLexicalParent( DynamicObject lexicalParent, String name, Node currentNode) { assert RubyGuards.isRubyModule(lexicalParent); Layouts.MODULE .getFields(lexicalParent) .setConstantInternal(currentNode, name, rubyModuleObject, false); Layouts.MODULE.getFields(lexicalParent).addLexicalDependent(rubyModuleObject); if (this.name == null) { // Tricky, we need to compare with the Object class, but we only have a Class at hand. final DynamicObject classClass = Layouts.BASIC_OBJECT.getLogicalClass(getLogicalClass()); final DynamicObject objectClass = ClassNodes.getSuperClass(ClassNodes.getSuperClass(classClass)); if (lexicalParent == objectClass) { this.name = name; updateAnonymousChildrenModules(); } else if (Layouts.MODULE.getFields(lexicalParent).hasName()) { this.name = Layouts.MODULE.getFields(lexicalParent).getName() + "::" + name; updateAnonymousChildrenModules(); } // else: Our lexicalParent is also an anonymous module // and will name us when it gets named via updateAnonymousChildrenModules() } }