Skip to content

Commit

Permalink
Showing 3 changed files with 9 additions and 2 deletions.
2 changes: 0 additions & 2 deletions spec/truffle/tags/core/class/initialize_tags.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1 @@
fails:Class#initialize raises a TypeError when called on already initialized classes
fails:Class#initialize raises a TypeError when called on BasicObject
fails:Class#initialize when given the Class raises a TypeError
Original file line number Diff line number Diff line change
@@ -402,6 +402,11 @@ public DynamicObject typeErrorWrongArgumentType(Object object, String expectedTy
return typeError(StringUtils.format("wrong argument type %s (expected %s)", badClassName, expectedType), currentNode);
}

@TruffleBoundary
public DynamicObject typeErrorAlreadyInitializedClass(Node currentNode) {
return typeError("already initialized class", currentNode);
}

@TruffleBoundary
public DynamicObject typeError(String message, Node currentNode, Throwable javaThrowable) {
return ExceptionOperations.createRubyException(
Original file line number Diff line number Diff line change
@@ -331,6 +331,10 @@ private DynamicObject initializeGeneralWithoutBlock(VirtualFrame frame, DynamicO
assert RubyGuards.isRubyClass(rubyClass);
assert RubyGuards.isRubyClass(superclass);

if (Layouts.CLASS.getSuperclass(rubyClass) != null || rubyClass == coreLibrary().getBasicObjectClass()) {
throw new RaiseException(getContext().getCoreExceptions().typeErrorAlreadyInitializedClass(this));
}

ClassNodes.initialize(getContext(), rubyClass, superclass);
triggerInheritedHook(frame, rubyClass, superclass);

0 comments on commit c3373d4

Please sign in to comment.