Skip to content

Commit

Permalink
Showing 1 changed file with 8 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -331,12 +331,12 @@ private DynamicObject initializeGeneralWithoutBlock(VirtualFrame frame, DynamicO
assert RubyGuards.isRubyClass(rubyClass);
assert RubyGuards.isRubyClass(superclass);

if (Layouts.CLASS.getSuperclass(rubyClass) != null || rubyClass == coreLibrary().getBasicObjectClass()) {
if (isInitialized(rubyClass)) {
throw new RaiseException(getContext().getCoreExceptions().typeErrorAlreadyInitializedClass(this));
}
if (superClassProvided) {
checkInheritable(superclass);
if (superclass != coreLibrary().getBasicObjectClass() && Layouts.CLASS.getSuperclass(superclass) == null) {
if (!isInitialized(superclass)) {
throw new RaiseException(getContext().getCoreExceptions().typeErrorInheritUninitializedClass(this));
}
}
@@ -350,12 +350,12 @@ private DynamicObject initializeGeneralWithoutBlock(VirtualFrame frame, DynamicO
private DynamicObject initializeGeneralWithBlock(VirtualFrame frame, DynamicObject rubyClass, DynamicObject superclass, DynamicObject block, boolean superClassProvided) {
assert RubyGuards.isRubyClass(superclass);

if (Layouts.CLASS.getSuperclass(rubyClass) != null || rubyClass == coreLibrary().getBasicObjectClass()) {
if (isInitialized(rubyClass)) {
throw new RaiseException(getContext().getCoreExceptions().typeErrorAlreadyInitializedClass(this));
}
if (superClassProvided) {
checkInheritable(superclass);
if (superclass != coreLibrary().getBasicObjectClass() && Layouts.CLASS.getSuperclass(superclass) == null) {
if (!isInitialized(superclass)) {
throw new RaiseException(getContext().getCoreExceptions().typeErrorInheritUninitializedClass(this));
}
}
@@ -367,6 +367,10 @@ private DynamicObject initializeGeneralWithBlock(VirtualFrame frame, DynamicObje
return rubyClass;
}

private boolean isInitialized(DynamicObject rubyClass) {
return Layouts.CLASS.getSuperclass(rubyClass) != null || rubyClass == coreLibrary().getBasicObjectClass();
}

// rb_check_inheritable
private void checkInheritable(DynamicObject superClass) {
if (!RubyGuards.isRubyClass(superClass)) {

0 comments on commit f2b8595

Please sign in to comment.