Skip to content

Commit

Permalink
Showing 3 changed files with 9 additions and 8 deletions.
4 changes: 0 additions & 4 deletions spec/truffle/tags/core/basicobject/instance_eval_tags.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1 @@
fails:BasicObject#instance_eval expects a block with no arguments
fails:BasicObject#instance_eval yields the object to the block
fails:BasicObject#instance_eval gets constants in the receiver if a string given
fails:BasicObject#instance_eval raises a TypeError when defining methods on an immediate
fails:BasicObject#instance_eval raises a TypeError when defining methods on numerics
Original file line number Diff line number Diff line change
@@ -17,13 +17,14 @@
import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.nodes.NodeUtil;
import com.oracle.truffle.api.source.SourceSection;

import com.oracle.truffle.api.utilities.ConditionProfile;

import org.jruby.runtime.Visibility;
import org.jruby.truffle.nodes.RubyCallNode;
import org.jruby.truffle.nodes.RubyNode;
import org.jruby.truffle.nodes.cast.BooleanCastNodeFactory;
import org.jruby.truffle.nodes.dispatch.*;
import org.jruby.truffle.nodes.methods.UnsupportedOperationBehavior;
import org.jruby.truffle.nodes.yield.YieldDispatchHeadNode;
import org.jruby.truffle.runtime.ObjectIDOperations;
import org.jruby.truffle.runtime.RubyContext;
@@ -191,7 +192,7 @@ public RubyNilClass initialize() {

}

@CoreMethod(names = "instance_eval", needsBlock = true, optional = 1)
@CoreMethod(names = "instance_eval", needsBlock = true, optional = 1, unsupportedOperationBehavior = UnsupportedOperationBehavior.ARGUMENT_ERROR)
public abstract static class InstanceEvalNode extends CoreMethodNode {

@Child private YieldDispatchHeadNode yield;
@@ -217,7 +218,7 @@ public Object instanceEval(VirtualFrame frame, Object receiver, RubyString strin
public Object instanceEval(VirtualFrame frame, Object receiver, UndefinedPlaceholder string, RubyProc block) {
notDesignedForCompilation();

return yield.dispatchWithModifiedSelf(frame, block, receiver);
return yield.dispatchWithModifiedSelf(frame, block, receiver, receiver);
}

}
Original file line number Diff line number Diff line change
@@ -20,6 +20,8 @@

import org.jruby.runtime.Visibility;
import org.jruby.truffle.nodes.RubyNode;
import org.jruby.truffle.nodes.objects.SingletonClassNode;
import org.jruby.truffle.nodes.objects.SingletonClassNodeFactory;
import org.jruby.truffle.runtime.RubyArguments;
import org.jruby.truffle.runtime.RubyContext;
import org.jruby.truffle.runtime.control.TruffleFatalException;
@@ -32,11 +34,13 @@ public class AddMethodNode extends RubyNode {

@Child private RubyNode receiver;
@Child private MethodDefinitionNode methodNode;
@Child private SingletonClassNode singletonClassNode;

public AddMethodNode(RubyContext context, SourceSection section, RubyNode receiver, MethodDefinitionNode method) {
super(context, section);
this.receiver = receiver;
this.methodNode = method;
singletonClassNode = SingletonClassNodeFactory.create(context, section, null);
}

@Override
@@ -52,7 +56,7 @@ public RubySymbol execute(VirtualFrame frame) {
if (receiverObject instanceof RubyModule) {
module = (RubyModule) receiverObject;
} else {
module = ((RubyBasicObject) receiverObject).getSingletonClass(this);
module = singletonClassNode.executeSingletonClass(frame, receiverObject);
}

final Visibility visibility = getVisibility(frame, methodObject.getName());

0 comments on commit 6ef115d

Please sign in to comment.