Skip to content

Commit

Permalink
Showing 2 changed files with 19 additions and 16 deletions.
20 changes: 11 additions & 9 deletions truffle/src/main/java/org/jruby/truffle/core/ClassNodes.java
Original file line number Diff line number Diff line change
@@ -73,20 +73,21 @@ public static DynamicObject createBootClass(RubyContext context, DynamicObject c

model.rubyModuleObject = rubyClass;

final ModuleFields fields = Layouts.MODULE.getFields(rubyClass);
if (model.lexicalParent == null) { // bootstrap or anonymous module
Layouts.MODULE.getFields(rubyClass).setFullName(Layouts.MODULE.getFields(rubyClass).givenBaseName);
fields.setFullName(fields.givenBaseName);
} else {
Layouts.MODULE.getFields(rubyClass).getAdoptedByLexicalParent(context, model.lexicalParent, model.givenBaseName, null);
fields.getAdoptedByLexicalParent(context, model.lexicalParent, model.givenBaseName, null);
}

if (superclass != null) {
assert RubyGuards.isRubyClass(superclass);
assert RubyGuards.isRubyClass(rubyClass);

Layouts.MODULE.getFields(rubyClass).parentModule = Layouts.MODULE.getFields(superclass).start;
fields.parentModule = Layouts.MODULE.getFields(superclass).start;
Layouts.MODULE.getFields(superclass).addDependent(rubyClass);

Layouts.MODULE.getFields(rubyClass).newVersion();
fields.newVersion();
}

return rubyClass;
@@ -119,19 +120,20 @@ public static DynamicObject createRubyClass(RubyContext context, DynamicObject c

model.rubyModuleObject = rubyClass;

final ModuleFields fields = Layouts.MODULE.getFields(rubyClass);
if (model.lexicalParent != null) {
Layouts.MODULE.getFields(rubyClass).getAdoptedByLexicalParent(context, model.lexicalParent, model.givenBaseName, null);
} else if (Layouts.MODULE.getFields(rubyClass).givenBaseName != null) { // bootstrap module
Layouts.MODULE.getFields(rubyClass).setFullName(Layouts.MODULE.getFields(rubyClass).givenBaseName);
fields.getAdoptedByLexicalParent(context, model.lexicalParent, model.givenBaseName, null);
} else if (fields.givenBaseName != null) { // bootstrap module
fields.setFullName(fields.givenBaseName);
}

if (superclass != null) {
assert RubyGuards.isRubyClass(superclass);

Layouts.MODULE.getFields(rubyClass).parentModule = Layouts.MODULE.getFields(superclass).start;
fields.parentModule = Layouts.MODULE.getFields(superclass).start;
Layouts.MODULE.getFields(superclass).addDependent(rubyClass);

Layouts.MODULE.getFields(rubyClass).newVersion();
fields.newVersion();
}

DynamicObjectFactory factory = Layouts.CLASS.getInstanceFactory(superclass);
15 changes: 8 additions & 7 deletions truffle/src/main/java/org/jruby/truffle/core/ModuleFields.java
Original file line number Diff line number Diff line change
@@ -129,17 +129,18 @@ public void initCopy(DynamicObject from) {
assert RubyGuards.isRubyModule(from);

// Do not copy name, the copy is an anonymous module
this.methods.putAll(Layouts.MODULE.getFields(from).methods);
this.constants.putAll(Layouts.MODULE.getFields(from).constants);
this.classVariables.putAll(Layouts.MODULE.getFields(from).classVariables);
final ModuleFields fields = Layouts.MODULE.getFields(from);
this.methods.putAll(fields.methods);
this.constants.putAll(fields.constants);
this.classVariables.putAll(fields.classVariables);

if (Layouts.MODULE.getFields(from).start.getParentModule() != Layouts.MODULE.getFields(from)) {
this.parentModule = Layouts.MODULE.getFields(from).start.getParentModule();
if (fields.start.getParentModule() != fields) {
this.parentModule = fields.start.getParentModule();
} else {
this.parentModule = Layouts.MODULE.getFields(from).parentModule;
this.parentModule = fields.parentModule;
}

for (DynamicObject ancestor : Layouts.MODULE.getFields(from).ancestors()) {
for (DynamicObject ancestor : fields.ancestors()) {
Layouts.MODULE.getFields(ancestor).addDependent(rubyModuleObject);
}
}

0 comments on commit 1d067c6

Please sign in to comment.